网站备案需要什么东西,高德地图怎么看实况街景,建设银行网站用户名,wordpress拖拽插件【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重… 【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库https://gitcode.com/Morse_Chen/PyTorch_deep_learning。 文章目录 一、导数和微分二、偏导数三、梯度四、链式法则小结 在2500年前古希腊人把一个多边形分成三角形并把它们的面积相加才找到计算多边形面积的方法。为了求出曲线形状比如圆的面积古希腊人在这样的形状上刻内接多边形。如图1所示内接多边形的等长边越多就越接近圆。这个过程也被称为逼近法method of exhaustion。 图1 用逼近法求圆的面积 事实上逼近法就是积分integral calculus的起源。2000多年后微积分的另一支微分differential calculus被发明出来。在微分学最重要的应用是优化问题即考虑如何把事情做到最好。正如在【深度学习基础】深度学习导论 中讨论的那样这种问题在深度学习中是无处不在的。 在深度学习中我们“训练”模型不断更新它们使它们在看到越来越多的数据时变得越来越好。通常情况下变得更好意味着最小化一个损失函数loss function即一个衡量“模型有多糟糕”这个问题的分数。最终我们真正关心的是生成一个模型它能够在从未见过的数据上表现良好。但“训练”模型只能将模型与我们实际能看到的数据相拟合。因此我们可以将拟合模型的任务分解为两个关键问题
优化optimization用模型拟合观测数据的过程泛化generalization数学原理和实践者的智慧能够指导我们生成出有效性超出用于训练的数据集本身的模型。 为了帮助读者在后面的章节中更好地理解优化问题和方法本节提供了一个非常简短的入门教程帮助读者快速掌握深度学习中常用的微分知识。
一、导数和微分 我们首先讨论导数的计算这是几乎所有深度学习优化算法的关键步骤。在深度学习中我们通常选择对于模型参数可微的损失函数。简而言之对于每个参数如果我们把这个参数增加或减少一个无穷小的量可以知道损失会以多快的速度增加或减少。 假设我们有一个函数 f : R → R f: \mathbb{R} \rightarrow \mathbb{R} f:R→R其输入和输出都是标量。如果 f f f的导数存在这个极限被定义为 f ′ ( x ) lim h → 0 f ( x h ) − f ( x ) h (1) f(x) \lim_{h \rightarrow 0} \frac{f(xh) - f(x)}{h}\tag{1} f′(x)h→0limhf(xh)−f(x)(1) 如果 f ′ ( a ) f(a) f′(a)存在则称 f f f在 a a a处是可微differentiable的。如果 f f f在一个区间内的每个数上都是可微的则此函数在此区间中是可微的。我们可以将式(1)中的导数 f ′ ( x ) f(x) f′(x)解释为 f ( x ) f(x) f(x)相对于 x x x的瞬时instantaneous变化率。所谓的瞬时变化率是基于 x x x中的变化 h h h且 h h h接近 0 0 0。 为了更好地解释导数让我们做一个实验。定义 u f ( x ) 3 x 2 − 4 x uf(x)3x^2-4x uf(x)3x2−4x 如下
%matplotlib inline
import numpy as np
from matplotlib_inline import backend_inline
from d2l import torch as d2ldef f(x):return 3 * x ** 2 - 4 * x通过令 x 1 x1 x1并让 h h h接近 0 0 0式(1)中 f ( x h ) − f ( x ) h \frac{f(xh)-f(x)}{h} hf(xh)−f(x)的数值结果接近 2 2 2。虽然这个实验不是一个数学证明但稍后会看到当 x 1 x1 x1时导数 u ′ u u′是 2 2 2。
def numerical_lim(f, x, h):return (f(x h) - f(x)) / hh 0.1
for i in range(5):print(fh{h:.5f}, numerical limit{numerical_lim(f, 1, h):.5f})h * 0.1让我们熟悉一下导数的几个等价符号。给定 y f ( x ) yf(x) yf(x)其中 x x x和 y y y分别是函数 f f f的自变量和因变量。以下表达式是等价的 f ′ ( x ) y ′ d y d x d f d x d d x f ( x ) D f ( x ) D x f ( x ) f(x) y \frac{dy}{dx} \frac{df}{dx} \frac{d}{dx} f(x) Df(x) D_x f(x) f′(x)y′dxdydxdfdxdf(x)Df(x)Dxf(x) 其中符号 d d x \frac{d}{dx} dxd和 D D D是微分运算符表示微分操作。我们可以使用以下规则来对常见函数求微分 D C 0 DC 0 DC0 C C C是一个常数 D x n n x n − 1 Dx^n nx^{n-1} Dxnnxn−1幂律power rule n n n是任意实数 D e x e x De^x e^x Dexex D ln ( x ) 1 / x D\ln(x) 1/x Dln(x)1/x 为了微分一个由一些常见函数组成的函数下面的一些法则方便使用。假设函数 f f f和 g g g都是可微的 C C C是一个常数则
常数相乘法则 d d x [ C f ( x ) ] C d d x f ( x ) , (2) \frac{d}{dx} [Cf(x)] C \frac{d}{dx} f(x),\tag{2} dxd[Cf(x)]Cdxdf(x),(2)
加法法则 d d x [ f ( x ) g ( x ) ] d d x f ( x ) d d x g ( x ) , (3) \frac{d}{dx} [f(x) g(x)] \frac{d}{dx} f(x) \frac{d}{dx} g(x),\tag{3} dxd[f(x)g(x)]dxdf(x)dxdg(x),(3)
乘法法则 d d x [ f ( x ) g ( x ) ] f ( x ) d d x [ g ( x ) ] g ( x ) d d x [ f ( x ) ] , (4) \frac{d}{dx} [f(x)g(x)] f(x) \frac{d}{dx} [g(x)] g(x) \frac{d}{dx} [f(x)],\tag{4} dxd[f(x)g(x)]f(x)dxd[g(x)]g(x)dxd[f(x)],(4)
除法法则 d d x [ f ( x ) g ( x ) ] g ( x ) d d x [ f ( x ) ] − f ( x ) d d x [ g ( x ) ] [ g ( x ) ] 2 . (5) \frac{d}{dx} \left[\frac{f(x)}{g(x)}\right] \frac{g(x) \frac{d}{dx} [f(x)] - f(x) \frac{d}{dx} [g(x)]}{[g(x)]^2}.\tag{5} dxd[g(x)f(x)][g(x)]2g(x)dxd[f(x)]−f(x)dxd[g(x)].(5) 现在我们可以应用上述几个法则来计算 u ′ f ′ ( x ) 3 d d x x 2 − 4 d d x x 6 x − 4 uf(x)3\frac{d}{dx}x^2-4\frac{d}{dx}x6x-4 u′f′(x)3dxdx2−4dxdx6x−4。令 x 1 x1 x1我们有 u ′ 2 u2 u′2在这个实验中数值结果接近 2 2 2这一点得到了在本节前面的实验的支持。当 x 1 x1 x1时此导数也是曲线 u f ( x ) uf(x) uf(x)切线的斜率。 为了对导数的这种解释进行可视化我们将使用matplotlib这是一个Python中流行的绘图库。要配置matplotlib生成图形的属性我们需要定义几个函数。在下面use_svg_display函数指定matplotlib软件包输出svg图表以获得更清晰的图像。 注意注释#save是一个特殊的标记会将对应的函数、类或语句保存在d2l包中。因此以后无须重新定义就可以直接调用它们例如d2l.use_svg_display()。
def use_svg_display(): #save使用svg格式在Jupyter中显示绘图backend_inline.set_matplotlib_formats(svg)我们定义set_figsize函数来设置图表大小。注意这里可以直接使用d2l.plt因为导入语句from matplotlib import pyplot as plt已标记为保存到d2l包中。
def set_figsize(figsize(3.5, 2.5)): #save设置matplotlib的图表大小use_svg_display()d2l.plt.rcParams[figure.figsize] figsize下面的set_axes函数用于设置由matplotlib生成图表的轴的属性。
#save
def set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend):设置matplotlib的轴axes.set_xlabel(xlabel)axes.set_ylabel(ylabel)axes.set_xscale(xscale)axes.set_yscale(yscale)axes.set_xlim(xlim)axes.set_ylim(ylim)if legend:axes.legend(legend)axes.grid()通过这三个用于图形配置的函数定义一个plot函数来简洁地绘制多条曲线因为我们需要在整个书中可视化许多曲线。
#save
def plot(X, YNone, xlabelNone, ylabelNone, legendNone, xlimNone,ylimNone, xscalelinear, yscalelinear,fmts(-, m--, g-., r:), figsize(3.5, 2.5), axesNone):绘制数据点if legend is None:legend []set_figsize(figsize)axes axes if axes else d2l.plt.gca()# 如果X有一个轴输出Truedef has_one_axis(X):return (hasattr(X, ndim) and X.ndim 1 or isinstance(X, list)and not hasattr(X[0], __len__))if has_one_axis(X):X [X]if Y is None:X, Y [[]] * len(X), Xelif has_one_axis(Y):Y [Y]if len(X) ! len(Y):X X * len(Y)axes.cla()for x, y, fmt in zip(X, Y, fmts):if len(x):axes.plot(x, y, fmt)else:axes.plot(y, fmt)set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend)现在我们可以绘制函数 u f ( x ) uf(x) uf(x)及其在 x 1 x1 x1处的切线 y 2 x − 3 y2x-3 y2x−3其中系数 2 2 2是切线的斜率。
x np.arange(0, 3, 0.1)
plot(x, [f(x), 2 * x - 3], x, f(x), legend[f(x), Tangent line (x1)])二、偏导数 到目前为止我们只讨论了仅含一个变量的函数的微分。在深度学习中函数通常依赖于许多变量。因此我们需要将微分的思想推广到多元函数multivariate function上。 设 y f ( x 1 , x 2 , … , x n ) y f(x_1, x_2, \ldots, x_n) yf(x1,x2,…,xn)是一个具有 n n n个变量的函数。 y y y关于第 i i i个参数 x i x_i xi的偏导数partial derivative为 ∂ y ∂ x i lim h → 0 f ( x 1 , … , x i − 1 , x i h , x i 1 , … , x n ) − f ( x 1 , … , x i , … , x n ) h (6) \frac{\partial y}{\partial x_i} \lim_{h \rightarrow 0} \frac{f(x_1, \ldots, x_{i-1}, x_ih, x_{i1}, \ldots, x_n) - f(x_1, \ldots, x_i, \ldots, x_n)}{h}\tag{6} ∂xi∂yh→0limhf(x1,…,xi−1,xih,xi1,…,xn)−f(x1,…,xi,…,xn)(6) 为了计算 ∂ y ∂ x i \frac{\partial y}{\partial x_i} ∂xi∂y我们可以简单地将 x 1 , … , x i − 1 , x i 1 , … , x n x_1, \ldots, x_{i-1}, x_{i1}, \ldots, x_n x1,…,xi−1,xi1,…,xn看作常数并计算 y y y关于 x i x_i xi的导数。对于偏导数的表示以下是等价的 ∂ y ∂ x i ∂ f ∂ x i f x i f i D i f D x i f (7) \frac{\partial y}{\partial x_i} \frac{\partial f}{\partial x_i} f_{x_i} f_i D_i f D_{x_i} f\tag{7} ∂xi∂y∂xi∂ffxifiDifDxif(7)
三、梯度 我们可以连结一个多元函数对其所有变量的偏导数以得到该函数的梯度gradient向量。具体而言设函数 f : R n → R f:\mathbb{R}^n\rightarrow\mathbb{R} f:Rn→R的输入是一个 n n n维向量 x [ x 1 , x 2 , … , x n ] ⊤ \mathbf{x}[x_1,x_2,\ldots,x_n]^\top x[x1,x2,…,xn]⊤并且输出是一个标量。函数 f ( x ) f(\mathbf{x}) f(x)相对于 x \mathbf{x} x的梯度是一个包含 n n n个偏导数的向量 ∇ x f ( x ) [ ∂ f ( x ) ∂ x 1 , ∂ f ( x ) ∂ x 2 , … , ∂ f ( x ) ∂ x n ] ⊤ (8) \nabla_{\mathbf{x}} f(\mathbf{x}) \bigg[\frac{\partial f(\mathbf{x})}{\partial x_1}, \frac{\partial f(\mathbf{x})}{\partial x_2}, \ldots, \frac{\partial f(\mathbf{x})}{\partial x_n}\bigg]^\top\tag{8} ∇xf(x)[∂x1∂f(x),∂x2∂f(x),…,∂xn∂f(x)]⊤(8) 其中 ∇ x f ( x ) \nabla_{\mathbf{x}} f(\mathbf{x}) ∇xf(x)通常在没有歧义时被 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x)取代。
假设 x \mathbf{x} x为 n n n维向量在微分多元函数时经常使用以下规则
对于所有 A ∈ R m × n \mathbf{A} \in \mathbb{R}^{m \times n} A∈Rm×n都有 ∇ x A x A ⊤ \nabla_{\mathbf{x}} \mathbf{A} \mathbf{x} \mathbf{A}^\top ∇xAxA⊤对于所有 A ∈ R n × m \mathbf{A} \in \mathbb{R}^{n \times m} A∈Rn×m都有 ∇ x x ⊤ A A \nabla_{\mathbf{x}} \mathbf{x}^\top \mathbf{A} \mathbf{A} ∇xx⊤AA对于所有 A ∈ R n × n \mathbf{A} \in \mathbb{R}^{n \times n} A∈Rn×n都有 ∇ x x ⊤ A x ( A A ⊤ ) x \nabla_{\mathbf{x}} \mathbf{x}^\top \mathbf{A} \mathbf{x} (\mathbf{A} \mathbf{A}^\top)\mathbf{x} ∇xx⊤Ax(AA⊤)x ∇ x ∥ x ∥ 2 ∇ x x ⊤ x 2 x \nabla_{\mathbf{x}} \|\mathbf{x} \|^2 \nabla_{\mathbf{x}} \mathbf{x}^\top \mathbf{x} 2\mathbf{x} ∇x∥x∥2∇xx⊤x2x 同样对于任何矩阵 X \mathbf{X} X都有 ∇ X ∥ X ∥ F 2 2 X \nabla_{\mathbf{X}} \|\mathbf{X} \|_F^2 2\mathbf{X} ∇X∥X∥F22X。正如我们之后将看到的梯度对于设计深度学习中的优化算法有很大用处。
四、链式法则 然而上面方法可能很难找到梯度。这是因为在深度学习中多元函数通常是复合composite的所以难以应用上述任何规则来微分这些函数。幸运的是链式法则可以被用来微分复合函数。 让我们先考虑单变量函数。假设函数 y f ( u ) yf(u) yf(u)和 u g ( x ) ug(x) ug(x)都是可微的根据链式法则 d y d x d y d u d u d x (9) \frac{dy}{dx} \frac{dy}{du} \frac{du}{dx}\tag{9} dxdydudydxdu(9) 现在考虑一个更一般的场景即函数具有任意数量的变量的情况。假设可微分函数 y y y有变量 u 1 , u 2 , … , u m u_1, u_2, \ldots, u_m u1,u2,…,um其中每个可微分函数 u i u_i ui都有变量 x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1,x2,…,xn。注意 y y y是 x 1 , x 2 … , x n x_1, x_2 \ldots, x_n x1,x2…,xn的函数。对于任意 i 1 , 2 , … , n i 1, 2, \ldots, n i1,2,…,n链式法则给出 ∂ y ∂ x i ∂ y ∂ u 1 ∂ u 1 ∂ x i ∂ y ∂ u 2 ∂ u 2 ∂ x i ⋯ ∂ y ∂ u m ∂ u m ∂ x i (10) \frac{\partial y}{\partial x_i} \frac{\partial y}{\partial u_1} \frac{\partial u_1}{\partial x_i} \frac{\partial y}{\partial u_2} \frac{\partial u_2}{\partial x_i} \cdots \frac{\partial y}{\partial u_m} \frac{\partial u_m}{\partial x_i}\tag{10} ∂xi∂y∂u1∂y∂xi∂u1∂u2∂y∂xi∂u2⋯∂um∂y∂xi∂um(10)
小结
微分和积分是微积分的两个分支前者可以应用于深度学习中的优化问题。导数可以被解释为函数相对于其变量的瞬时变化率它也是函数曲线的切线的斜率。梯度是一个向量其分量是多变量函数相对于其所有变量的偏导数。链式法则可以用来微分复合函数。 文章转载自: http://www.morning.zhishizf.cn.gov.cn.zhishizf.cn http://www.morning.wknjy.cn.gov.cn.wknjy.cn http://www.morning.srgsb.cn.gov.cn.srgsb.cn http://www.morning.wgbmj.cn.gov.cn.wgbmj.cn http://www.morning.hlzpb.cn.gov.cn.hlzpb.cn http://www.morning.ffwrq.cn.gov.cn.ffwrq.cn http://www.morning.bgbnc.cn.gov.cn.bgbnc.cn http://www.morning.hrypl.cn.gov.cn.hrypl.cn http://www.morning.rywn.cn.gov.cn.rywn.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.glncb.cn.gov.cn.glncb.cn http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.yrycb.cn.gov.cn.yrycb.cn http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn http://www.morning.hmtft.cn.gov.cn.hmtft.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.tntqr.cn.gov.cn.tntqr.cn http://www.morning.fqqlq.cn.gov.cn.fqqlq.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.bmpjp.cn.gov.cn.bmpjp.cn http://www.morning.rmltt.cn.gov.cn.rmltt.cn http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn http://www.morning.hsklc.cn.gov.cn.hsklc.cn http://www.morning.cmzcp.cn.gov.cn.cmzcp.cn http://www.morning.cnhgc.cn.gov.cn.cnhgc.cn http://www.morning.hqykb.cn.gov.cn.hqykb.cn http://www.morning.ypklb.cn.gov.cn.ypklb.cn http://www.morning.ktcrr.cn.gov.cn.ktcrr.cn http://www.morning.qxnlc.cn.gov.cn.qxnlc.cn http://www.morning.bzwxr.cn.gov.cn.bzwxr.cn http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn http://www.morning.wfzlt.cn.gov.cn.wfzlt.cn http://www.morning.mhnxs.cn.gov.cn.mhnxs.cn http://www.morning.nrchx.cn.gov.cn.nrchx.cn http://www.morning.pjrql.cn.gov.cn.pjrql.cn http://www.morning.knczz.cn.gov.cn.knczz.cn http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn http://www.morning.hctgn.cn.gov.cn.hctgn.cn http://www.morning.qbgdy.cn.gov.cn.qbgdy.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.nqgff.cn.gov.cn.nqgff.cn http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn http://www.morning.wylpy.cn.gov.cn.wylpy.cn http://www.morning.rjmb.cn.gov.cn.rjmb.cn http://www.morning.jpbpc.cn.gov.cn.jpbpc.cn http://www.morning.knczz.cn.gov.cn.knczz.cn http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.mysmz.cn.gov.cn.mysmz.cn http://www.morning.supera.com.cn.gov.cn.supera.com.cn http://www.morning.zpnfc.cn.gov.cn.zpnfc.cn http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn http://www.morning.hkchp.cn.gov.cn.hkchp.cn http://www.morning.prkdl.cn.gov.cn.prkdl.cn http://www.morning.khclr.cn.gov.cn.khclr.cn http://www.morning.ygmw.cn.gov.cn.ygmw.cn http://www.morning.rqbkc.cn.gov.cn.rqbkc.cn http://www.morning.rhfh.cn.gov.cn.rhfh.cn http://www.morning.nsncq.cn.gov.cn.nsncq.cn http://www.morning.nrll.cn.gov.cn.nrll.cn http://www.morning.wsyst.cn.gov.cn.wsyst.cn http://www.morning.fpzpb.cn.gov.cn.fpzpb.cn http://www.morning.hjwzpt.com.gov.cn.hjwzpt.com http://www.morning.hffjj.cn.gov.cn.hffjj.cn http://www.morning.qiyelm.com.gov.cn.qiyelm.com http://www.morning.hmxb.cn.gov.cn.hmxb.cn http://www.morning.jokesm.com.gov.cn.jokesm.com http://www.morning.fkwp.cn.gov.cn.fkwp.cn http://www.morning.gqcd.cn.gov.cn.gqcd.cn http://www.morning.ypfw.cn.gov.cn.ypfw.cn http://www.morning.qrwnj.cn.gov.cn.qrwnj.cn http://www.morning.rrms.cn.gov.cn.rrms.cn http://www.morning.phzrq.cn.gov.cn.phzrq.cn http://www.morning.lyhry.cn.gov.cn.lyhry.cn http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.wynnb.cn.gov.cn.wynnb.cn http://www.morning.zycll.cn.gov.cn.zycll.cn