conda create--name d2l python=3.8 -y 现在激活d21环境: conda activate d21 安装深度学习框架和d21软件包 在安装深度学习框架之前,请先检查你的计算机上是否有可用的G四。例如,你可以查看计算机是否装 有NVIDIA GPU并已安装CUDA'。如果你的机器没有任何GPU,没有必要担心,因为你的CPU在前几章完全 够用。但是,如果你想流畅地学习全部章节,请提早获取GPU并且安装深度学习框架的GU版本。 你可以按如下方式安装PyTorchf的CPU或GPU版本: pip install torch=-1.11.0 pip install torchvision==0.12.0 我们的下一步是安装21包,以方健调取本书中经常使用的函数和类: pip install d2l==0.17.5 下载D2 L Notebook 接下来,需要下载这本书的代码。你可以点击本书HTML页面顶部的“Jupyter记事本”选项下载后解压代码。 或者,你可以按照如下方式进行下载: mkdir d21-zh &cd d21-zh curlhttps://zh-v2.d2l.ai/d2l-zh-2.0.0.zip-od2l-zh.zip unzip d2l-zh.zip &rm d2l-zh.zip cd pytorch 注意:如果你没有安装unzip,则可以通过运行sudo apt install unzipi进行安装。 安装完成后,你可以通过运行以下命令打开apyter笔记本(在Wimd0w系统的命令行窗口中运行以下命令前, 需先将当前路径定位到刚下载的本书代码解压后的目录): jupyter notebook 现在,你可以在Web浏览器中打开htp:1 ocalhost:8888(通常会自动打开)。由此,你可以运行这本书中每个 部分的代码。在运行书籍代码、更新深度学习框架或d2L软件包之前,请始终执行conda activate d2L以 激活运行时环境。要退出环境,请运行conda deactivate。 https://developer.nvidia.com/cuda-downloads 6 目录
conda create --name d2l python=3.8 -y 现在激活 d2l 环境: conda activate d2l 安装深度学习框架和d2l软件包 在安装深度学习框架之前,请先检查你的计算机上是否有可⽤的GPU。例如,你可以查看计算机是否装 有NVIDIA GPU并已安装CUDA9。如果你的机器没有任何GPU,没有必要担⼼,因为你的CPU在前⼏章完全 够⽤。但是,如果你想流畅地学习全部章节,请提早获取GPU并且安装深度学习框架的GPU版本。 你可以按如下⽅式安装PyTorch的CPU或GPU版本: pip install torch==1.11.0 pip install torchvision==0.12.0 我们的下⼀步是安装d2l包,以⽅便调取本书中经常使⽤的函数和类: pip install d2l==0.17.5 下载 D2L Notebook 接下来,需要下载这本书的代码。你可以点击本书HTML⻚⾯顶部的“Jupyter 记事本”选项下载后解压代码。 或者,你可以按照如下⽅式进⾏下载: mkdir d2l-zh && cd d2l-zh curl https://zh-v2.d2l.ai/d2l-zh-2.0.0.zip -o d2l-zh.zip unzip d2l-zh.zip && rm d2l-zh.zip cd pytorch 注意:如果你没有安装unzip,则可以通过运⾏sudo apt install unzip进⾏安装。 安装完成后,你可以通过运⾏以下命令打开Jupyter笔记本(在Window系统的命令⾏窗⼝中运⾏以下命令前, 需先将当前路径定位到刚下载的本书代码解压后的⽬录): jupyter notebook 现在,你可以在Web浏览器中打开http://localhost:8888(通常会⾃动打开)。由此,你可以运⾏这本书中每个 部分的代码。在运⾏书籍代码、更新深度学习框架或d2l软件包之前,请始终执⾏conda activate d2l以 激活运⾏时环境。要退出环境,请运⾏conda deactivate。 9 https://developer.nvidia.com/cuda-downloads 10 ⽬录
符号 本书中使用的符号概述如下。 数字 ·x:标量 ·x:向量 ·X:矩阵 ·X:张量 ·1:单位矩阵 ·,X:向量x第i个元素 ·,X]:矩阵X第行第列的元素 集合论 ·火:集合 ·:整数集合 ·盈:实数集合 ·R:n维实数向量 ·Ra×b:包含a行和b列的实数矩阵 ·AUB:集合A和5的并集
符号 本书中使⽤的符号概述如下。 数字 • x:标量 • x:向量 • X:矩阵 • X:张量 • I:单位矩阵 • xi, [x]i:向量x第i个元素 • xij , [X]ij:矩阵X第i⾏第j列的元素 集合论 • X : 集合 • Z: 整数集合 • R: 实数集合 • R n: n维实数向量 • R a×b : 包含a⾏和b列的实数矩阵 • A ∪ B: 集合A和B的并集 13
·AnB:集合A和B的交集 ·A\B:集合A与集合B相减,B关于A的相对补集 函数和运算符 ·f):函数 ·1og(:自然对数 ·exp(小:指数函数 ·1x:指示函数 ·⊙厂:向量或矩阵的转置 ·X-1:矩阵的逆 ·⊙:按元素相乘 ·飞,小:连结 ·X外:集合的基数 ·p::Lp正则 ··非:L2正则 ·x,y):向量x和y的点积 ·∑:连加 ·:连乘 ·些:定义 微积分 ·坐:y关于x的导数 ·器:关于的偏导数 ·Vxy:关于x的梯度 ·心fc)d:f在a到b区间上关于x的定积分 ·∫f(x)dx:f关于x的不定积分 目录
• A ∩ B:集合A和B的交集 • A \ B:集合A与集合B相减,B关于A的相对补集 函数和运算符 • f(·):函数 • log(·):⾃然对数 • exp(·): 指数函数 • 1X : 指⽰函数 • (·) ⊤ : 向量或矩阵的转置 • X −1 : 矩阵的逆 • ⊙: 按元素相乘 • [·, ·]:连结 • |X |:集合的基数 • ∥ · ∥p: :Lp 正则 • ∥ · ∥: L2 正则 • ⟨x, y⟩:向量x和y的点积 • ∑: 连加 • ∏ : 连乘 • def =:定义 微积分 • dy dx:y关于x的导数 • ∂y ∂x:y关于x的偏导数 • ∇xy:y关于x的梯度 • ∫ b a f(x) dx: f在a到b区间上关于x的定积分 • ∫ f(x) dx: f关于x的不定积分 14 ⽬录
概率与信息论 ·P):概率分布 ·z~P:随机变量:具有概率分布P ·P(XIY):XIY的条件概率 ·px水概率密度函数 ·E,f(小函数f对的数学期望 ·X⊥Y:随机变量X和Y是独立的 ·X⊥Y|Z:随机变量X和Y在给定随机变量Z的条件下是独立的 ·Var(X):随机变量X的方差 ·ox:随机变量X的标准差 ·COv(X,Y):随机变量X和Y的协方差 ·p(X,Y):随机变量X和Y的相关性 ·H(X):随机变量x的熵 ·D红(PIQ:P和Q的KL散度 复杂度 ·O:大0标记 Discussions https://discuss.d/089 目录 夕
概率与信息论 • P(·):概率分布 • z ∼ P: 随机变量z具有概率分布P • P(X | Y ):X | Y 的条件概率 • p(x): 概率密度函数 • Ex[f(x)]: 函数f对x的数学期望 • X ⊥ Y : 随机变量X和Y 是独⽴的 • X ⊥ Y | Z: 随机变量X和Y 在给定随机变量Z的条件下是独⽴的 • Var(X): 随机变量X的⽅差 • σX: 随机变量X的标准差 • Cov(X, Y ): 随机变量X和Y 的协⽅差 • ρ(X, Y ): 随机变量X和Y 的相关性 • H(X): 随机变量X的熵 • DKL(P∥Q): P和Q的KL-散度 复杂度 • O:⼤O标记 Discussions11 11 https://discuss.d2l.ai/t/2089 ⽬录 15
1 前言 时至今日,我们常用的计算机程序几乎都是软件开发人员从零编写的。比如,现在我们要编写一个程序来管 理网上商城。经过思考,我们可能提出如下一个解决方案:首先,用户通过Wb浏览器(或移动应用程序)与 应用程序进行交互。紧接着,应用程序与数据库引擎进行交互,以保存交易历史记录并跟踪每个用户的动态。 其中,这个程序的核心一“业务逻辑”,详细说明了程序在各种情况下进行的操作。 为了完善业务逻辑,我们必须细致地考虑应用程序所有可能遇到的边界情况,并为这些边界情况设计合适的 规则。当买家单击将商品添加到购物车时,我们会向购物车数据库表中添加一个条目,将该用户ID与商品D关 联起来。虽然一次编写出完美应用程序的可能性微乎其微,但在大多数情况下,我们可以从基本原理出发编 写这样的程序,并不断测试直到满足用户的需求。我们能够根据第一原则设计自动化系统,驱动正常运行的 产品和系统,是一个人类认知上的非凡壮举。 幸运的是,对于日益壮大的机器学习科学家群体来说,实现很多任务的自动化并不再屈从于人类的聪明才智。 想象一下,你正和你最聪明的一群朋友围绕着白板,试图解决以下问题之一: ·编写一个程序,给出地理信总、卫星图像和一些历史天气信息,来预测明天的天气。 ·编写一个程序,给出自然文本表示的向题,并正确回答该向题。 ,编写一个程序,给出一张图像,识别出图像所包含的人,并在每个人周围绘制轮廓 ,编写一个程序,向用户推荐他们可能喜欢,但在自然浏览过程中不太可能遇到的产品。 在这些情况下,即使是顶级程序员也无法提出完美的解决方案。原因可能各不相同,有时我们的任务可能遵 循一种随着时间推移而变化的模式,我们需要程序来自动调整。有时任务内的关系可能太复杂(比如像素和 抽象类别之间的关系),需要数千或数百万次的计算。即使我们的眼睛能毫不费力地完成任务,这些计算也超 出了我们的意识理解。机器学习(machine learning,.ML)是一类强大的可以从经验中学习的技术。通常采 用观测数据或与环境交互的形式,机器学习算法会积累更多的经验,其性能也会逐步提高。相反,对比刚刚
1 前⾔ 时⾄今⽇,我们常⽤的计算机程序⼏乎都是软件开发⼈员从零编写的。⽐如,现在我们要编写⼀个程序来管 理⽹上商城。经过思考,我们可能提出如下⼀个解决⽅案:⾸先,⽤⼾通过Web浏览器(或移动应⽤程序)与 应⽤程序进⾏交互。紧接着,应⽤程序与数据库引擎进⾏交互,以保存交易历史记录并跟踪每个⽤⼾的动态。 其中,这个程序的核⼼——“业务逻辑”,详细说明了程序在各种情况下进⾏的操作。 为了完善业务逻辑,我们必须细致地考虑应⽤程序所有可能遇到的边界情况,并为这些边界情况设计合适的 规则。当买家单击将商品添加到购物⻋时,我们会向购物⻋数据库表中添加⼀个条⽬,将该⽤⼾ID与商品ID关 联起来。虽然⼀次编写出完美应⽤程序的可能性微乎其微,但在⼤多数情况下,我们可以从基本原理出发编 写这样的程序,并不断测试直到满⾜⽤⼾的需求。我们能够根据第⼀原则设计⾃动化系统,驱动正常运⾏的 产品和系统,是⼀个⼈类认知上的⾮凡壮举。 幸运的是,对于⽇益壮⼤的机器学习科学家群体来说,实现很多任务的⾃动化并不再屈从于⼈类的聪明才智。 想象⼀下,你正和你最聪明的⼀群朋友围绕着⽩板,试图解决以下问题之⼀: • 编写⼀个程序,给出地理信息、卫星图像和⼀些历史天⽓信息,来预测明天的天⽓。 • 编写⼀个程序,给出⾃然⽂本表⽰的问题,并正确回答该问题。 • 编写⼀个程序,给出⼀张图像,识别出图像所包含的⼈,并在每个⼈周围绘制轮廓。 • 编写⼀个程序,向⽤⼾推荐他们可能喜欢,但在⾃然浏览过程中不太可能遇到的产品。 在这些情况下,即使是顶级程序员也⽆法提出完美的解决⽅案。原因可能各不相同,有时我们的任务可能遵 循⼀种随着时间推移⽽变化的模式,我们需要程序来⾃动调整。有时任务内的关系可能太复杂(⽐如像素和 抽象类别之间的关系),需要数千或数百万次的计算。即使我们的眼睛能毫不费⼒地完成任务,这些计算也超 出了我们的意识理解。机器学习(machine learning,ML)是⼀类强⼤的可以从经验中学习的技术。通常采 ⽤观测数据或与环境交互的形式,机器学习算法会积累更多的经验,其性能也会逐步提⾼。相反,对⽐刚刚 17