第 3 章和第 4 章详细评论了浅层和深层神经网络,它们构成了分段线性函数族,函数的详细方式由各自的参数确认。第 5 章引进了丢失概念 —— 一个反映网络猜测与练习集真实值差异的单个数值。 丢失与网络参数有关,本章着重于评论怎么确认能使丢失最小化的参数值。这个进程称为网络参数的学习,或更通俗地说,是模型的练习或拟合。该进程首要是选取一组初始参数值,随后重复履行两个进程:(i) 核算丢失函数关于参数的导数(梯度);(ii) 根据梯度调整参数,以期削减丢失。屡次迭代后,方针是使丢失函数抵达其大局最小值。 本章要点评论参数调整进程,即选用何种算法来削减丢失。第 7 章将介绍怎么为神经网络初始化参数并核算梯度。

6.1 梯度下降

为了拟合模型,咱们需要一组输入/输出对的练习集 {xi,yi}{x_i, y_i}。咱们寻求模型 f(xi,)f(x_i, phi) 的参数 phi,使得这些参数能够尽或许准确地将输入 xix_i 映射到输出 yiy_i。为此目的,咱们界说了一个丢失函数 L()L(phi),它经过返回一个数值来量化映射中的误差。优化算法的方针是找到一组参数 hat{phi},使得这个丢失函数抵达最小值:

=arg⁡min⁡L()(6.1)hat{phi} = argmin_{phi} L(phi) tag{6.1}

虽然存在多种优化算法,但练习神经网络一般选用迭代办法。这些办法首要启发式地设定初始参数值,然后重复调整参数以下降丢失值。

这个进程中最基本的办法称为梯度下降。它从初始参数 =[0,1,…,N]Tphi = [phi_0, phi_1, ldots, phi_N]^T 开端,并分两步迭代:

进程 1. 核算丢失相关于参数的导数:

∂L∂=[∂L∂0∂L∂1⋮∂L∂N](6.2)frac{partial L}{partial phi} = begin{bmatrix} frac{partial L}{partial phi_0} \ frac{partial L}{partial phi_1} \ vdots \ frac{partial L}{partial phi_N} end{bmatrix} tag{6.2}

进程 2. 根据以下规矩更新参数:

←−⋅∂L∂(6.3)phi leftarrow phi – alpha cdot frac{partial L}{partial phi} tag{6.3}

其间,正数 alpha 确认了调整的起伏。

第一步核算当时方位上丢失函数的梯度,确认了丢失添加的方向。第二步则是向相反方向(即下降方向)小幅移动。参数 alpha 能够固定(此时称之为学习率),或者经过线性查找测验多个 alpha 值,以找到能最大程度下降丢失的值。

当丢失函数抵达最小值时,其外表必须是平整的(否则,咱们还能经过继续下降来进一步改善)。因而,梯度将变为零,参数也随之中止改动。在实践中,咱们会监测梯度的巨细,并在其变得过小时中止算法。

6.1.1 线性回归示例

考虑将梯度下降办法运用于第2章介绍的一维线性回归模型。该模型 f(x,)f(x, phi) 把一个标量输入 xx 映射到一个标量输出 yy,具有参数 =[0,1]Tphi = [phi_0, phi_1]^T,别离代表了y轴截距和斜率:

y=f(x,)=0+1x(6.4)y = f(x, phi) = phi_0 + phi_1x tag{6.4}

给定一个数据集 {xi,yi}{x_i, y_i},包含 II 对输入/输出数据,咱们选用最小二乘法作为丢失函数:

L()=∑i=1Iei=∑i=1I(f(xi,)−yi)2=∑i=1I(0+1xi−yi)2(6.5)L(phi) = sum_{i=1}^I e_i = sum_{i=1}^I (f(x_i, phi) – y_i)^2 = sum_{i=1}^I (phi_0 + phi_1x_i – y_i)^2 tag{6.5}

这儿的 ei=(0+1xi−yi)2e_i = (phi_0 + phi_1x_i – y_i)^2 标明第 (i) 个练习样本对丢失的独自奉献。

丢失函数对参数的导数能够标明为各个奉献导数的总和:

∂L∂=∂∂∑i=1Iei=∑i=1I∂ei∂(6.6)frac{partial L}{partial phi} = frac{partial}{partial phi} sum_{i=1}^I e_i = sum_{i=1}^I frac{partial e_i}{partial phi} tag{6.6}

详细核算办法如下:

∂ei∂=[∂ei∂0∂ei∂1]=[2(0+1xi−yi)2xi(0+1xi−yi)](6.7)frac{partial e_i}{partial phi} = begin{bmatrix} frac{partial e_i}{partial phi_0} \ frac{partial e_i}{partial phi_1} end{bmatrix} = begin{bmatrix} 2(phi_0 + phi_1x_i – y_i) \ 2x_i(phi_0 + phi_1x_i – y_i) end{bmatrix} tag{6.7}

图 6.1 经过迭代地根据方程 6.6 和 6.7 核算导数,接着根据方程 6.3 的规矩更新参数,展现了算法的逐步发展。在此示例中,咱们选用了线查找技术,在每次迭代中找到能够最大极限削减丢失的 alpha 值。

了解深度学习: 第六章 练习模型
图 6.1 线性回归模型的梯度下降。a) 练习集由 12 对输入/输出数据对 {xi , yi} 组成。b) 丢失函数图展现了梯度下降的迭代进程。从点 0 动身,咱们沿最峻峭的下降方向行进,直至无法进一步下降丢失,从而抵达点 1。然后,咱们重复此进程,丈量点 1 的梯度并继续下降到点 2,以此类推。c) 经过热图能够更直观地展现这一进程,图中的亮度代表了丢失巨细。仅经过四轮迭代,咱们现已十分接近最小丢失值。d) 点 0 处参数(线条最浅)的模型对数据的描绘十分不准确,但跟着每轮迭代,模型的拟合度都有所提高。点 4 处参数(线条最深)的模型已能合理描绘练习数据。

6.1.2 Gabor模型示例

线性回归问题的丢失函数(参见图 6.1c)总是有一个清晰界说的大局最小值。更方式化地说,这些函数是凸函数,意味着曲面上恣意两点连线(即弦)不会穿过函数图画。凸性保证了不管参数初始化在何处,只需咱们不断地“下坡”,终究都能找到最小值;这样的练习进程是不会失利的。

但是,大部分非线性模型(包含浅层和深层网络)的丢失函数都对错凸的。由于参数很多,使得神经网络丢失函数的可视化变得极具挑战性。因而,咱们首要研究一个参数较少的简略非线性模型,以深化了解非凸丢失函数的特性:

f(x,)=sin⁡[0+0.06⋅1x]⋅exp⁡(−(0+0.06⋅1x)232.0)(6.8)f(x, phi) = sin[phi_0 + 0.06 cdot phi_1x] cdot exp left( – frac{(phi_0 + 0.06 cdot phi_1x)^2}{32.0} right) tag{6.8}

这个Gabor模型将标量输入xx映射到标量输出yy,而且由一个正弦重量(发生振动作用)和一个负指数重量(使得振幅随离中心间隔添加而减小)相乘构成。模型具有两个参数=[0,1]Tphi = [phi_0, phi_1]^T0∈Rphi_0 in mathbb{R} 操控函数的拉伸或紧缩,而1∈R+phi_1 in mathbb{R}^+ 则决议沿x轴的拉伸或紧缩(见图6.2)。

考虑一个包含II个样本{xi,yi}{x_i, y_i}的练习集。界说II个练习样本的最小二乘丢失函数为:

L()=∑i=1I(f(xi,)−yi)2(6.9)L(phi) = sum_{i=1}^I (f(x_i, phi) – y_i)^2 tag{6.9}

方针再次是找到能够最小化这个丢失的参数hat{phi}

了解深度学习: 第六章 练习模型

图 6.2 Gabor 模型。这个非线性模型将单一输入 x 映射到单一输出 y,具有参数组 = [0 , 1]T。它描绘了一个振幅随间隔中心添加而减小的正弦波函数。0 参数决议了波峰的方位,随 0 增大,波形向左移动。1 参数操控波形相关于中心的紧缩程度,1 增大时,波形变得更窄。a–c) 展现了具有不同参数的模型。

了解深度学习: 第六章 练习模型

图 6.3 用于拟合 Gabor 模型的练习数据。练习集包含了 28 组输入/输出样本 {xi,yi}。这些样本是经过在区间 [−15, 15] 内均匀采样 xi,然后将样本值经过参数设为 = [0.0,16.6]T 的 Gabor 模型处理,并加入正态散布的噪声生成的。

6.1.3 部分最小值与鞍点

图 6.4 展现了这个数据集的 Gabor 模型丢失函数。存在很多部分最小值(标记为青色圆圈)。在这些方位,梯度为零,不管向哪个方向移动,丢失都会添加,但是这些并不代表函数的大局最小点。丢失最小的点,即大局最小值,用灰色圆圈标出。

假如咱们从随机方位动身,选用梯度下降法“下山”,无法保证终究能够抵达大局最小值并找出最优参数(参见图 6.5a)。算法很或许会停在某个部分最小值,而不是最佳解。更重要的是,咱们无法确认是否有更优的解存在于其他地方。

此外,丢失函数中还存在鞍点(比如图 6.4中的蓝色十字处)。在鞍点,虽然梯度为零,但是函数值在某些方向上升,在其他方向下降。假如当时参数方位并非正好在鞍点上,那么经过“下山”梯度下降法仍有或许逃脱。但是,鞍点邻近的曲面几乎是平整的,这使得很难确认练习是否现已收敛。假如咱们在梯度很小时就中止算法,或许会过错地在鞍点邻近中止,误以为找到了处理方案。

了解深度学习: 第六章 练习模型

图 6.4 Gabor 模型的丢失函数。a) 丢失函数出现非凸形状,除了一个大局最小值(灰色圆圈)外,还存在多个部分最小值(青色圆圈)。同时,该函数包含鞍点,即在这些点上,虽然梯度暂时为零,但函数值在某一方向上升,在另一方向下降。例如,蓝色叉号标识的鞍点,水平方向移动导致函数值下降,而笔直方向移动则导致上升。b–f) 展现了对应于不同最小值点的模型状态。在这些状态下,任何细小的调整都无法使丢失值进一步下降。图 (c) 中展现的大局最小值点,其丢失值为 0.64。

了解深度学习: 第六章 练习模型

图 6.5 梯度下降与随机梯度下降的比较。a) 运用线性查找的梯度下降办法。只需初始设置正确,位于丢失函数的适当“谷底”(如点 1 和 3),参数估量便会稳步向大局最小值挨近。但假如初始点设在这个谷底之外(如点 2),则或许会堕入部分最小值。b) 随机梯度下降经过引进噪声到优化进程中,使得即便是从过错的“谷底”(如点 2)动身,也有或许跳出并终究找到大局最小值。

6.2 随机梯度下降

Gabor 模型具有两个参数,因而咱们能够经过以下两种办法找到大局最小值:(i)尽头地查找参数空间或(ii)重复从不同方位开端梯度下降,并选择丢失最低的成果。但是,神经网络模型或许具有数以百万计的参数,这使得上述两种办法都不现实。简言之,运用梯度下降办法寻觅高维丢失函数的大局最优解颇具挑战性。咱们能找到一个最小值,但无法确认这是否为大局最小值或一个较优解。 一个首要问题是,梯度下降算法的终究成果彻底取决于其起始点。随机梯度下降(SGD)测验经过在每一步中为梯度引进一些噪声来处理这一问题。这样,处理方案在均匀意义上仍向低处移动,但在任何给定的迭代中,所选方向不必然是最峻峭的下坡方向。实践上,有时乃至或许不是向下的。SGD算法或许暂时向上移动,因而能够从丢失函数的一个“谷”跳动到另一个(见图 6.5b)。

6.2.1 批次和周期

引进随机性的机制很简略。在每次迭代时,算法随机选择练习数据的一个子集,并仅根据这些示例核算梯度。这个子集称为小批量(minibatch)或简称批次(batch)。因而,模型参数tphi_t在第t次迭代的更新规矩为:

t+1←t−⋅∑i∈Bt∂L[]∂(6.10)phi_{t+1} leftarrow phi_t – alpha cdot sum_{i in B_t} frac{partial mathcal{L}[phi]}{partial phi} tag{6.10}

其间BtB_t是当时批次中输入/输出对索引的调集,eie_i是第(i)对导致的丢失。alpha是学习率,与梯度巨细一起,决议了每次迭代的移动间隔。学习率在开端时确认,并不受函数部分特性的影响。

一般,批次是从数据集中不重复抽取的。算法遍历一切练习样本直至悉数运用完毕,然后再次从完好练习数据集开端抽样。整个练习数据集的单次遍历称为一个周期。批次的巨细能够从单一样本到整个数据集不等。后者被称为全批量梯度下降,与惯例(非随机)梯度下降相同。

SGD的另一解说是,它在每次迭代核算不同丢失函数的梯度;由于丢失函数依赖于模型与练习数据,因而每个随机选择的批次都会不同。从这个视点看,SGD在一个不断改变的丢失函数上履行确认性梯度下降(见图 6.6)。但是,虽然存在这种变异性,任何点的希望丢失和梯度与惯例梯度下降保持一致。

了解深度学习: 第六章 练习模型

图 6.6 针对 Gabor 模型的随机梯度下降办法,选用的批处理巨细为三。a) 针对悉数练习数据集的丢失函数图。每一次迭代都对应一组或许的参数改变概率散布(小图展现了样本选择)。这些散布对应于选择的三个批处理元素的不同组合。b) 某一特定批处理的丢失函数图。随机梯度下降算法根据学习速率和当时梯度的巨细,沿着丢失函数下降方向移动一段间隔。当时模型(小图中的虚线标明)将调整以更好地契合这批数据(以实线标明)。c) 另一批数据会生成不同的丢失函数,并导致不同的模型更新。d) 对这批数据,算法沿着批丢失函数的下降方向移动,但相关于图 (a) 中的大局丢失函数或许是上升的。这展现了随机梯度下降怎么协助模型跳出部分最小值,寻觅大局最优解。

6.2.2 随机梯度下降的特性

SGD具有几个吸引人的特色。首要,虽然它在途径上添加了噪声,但每次迭代都改善了对数据子集的拟合,因而更新一般是合理的,即使不是最佳的。其次,经过无重复抽取练习样本并遍历数据集,保证了一切练习样本的平等奉献。第三,仅运用练习数据的一部分核算梯度在核算上更为高效。第四,它原则上能够逃离部分最小值。第五,它削减了在鞍点邻近停滞的几率;很或许至少有一些批次在丢失函数的任何点上都有明显梯度。终究,有依据标明,SGD找到的参数能使神经网络在实践中对新数据具有杰出的泛化才能(见第9.2节)。

SGD不一定按传统意义上“收敛”。但是,咱们希望当接近大局最小值时,一切数据点都能被模型很好地描绘,这样不管选择哪个批次,梯度都将很小,参数改变不大。实践中,SGD常配合学习率调度运用。学习率起始于一个较高值,并每经过N个周期以一个固定份额下降。这样做的逻辑是,在练习初期,咱们希望算法能探究参数空间,跨过不同的“谷”寻觅合理的区域;而在后期,当咱们大致处于正确方位时,更注重参数的微调,因而经过下降来减小改变起伏。

6.3 动量

在随机梯度下降法中,添加动量(Momentum)项是一种常见的改善办法。此办法经过结合当时批次核算得到的梯度与上一进程的移动方向的加权组合来更新参数:

mt+1←⋅mt+(1−)∑i∈Bt∂L[]∂(6.11)m_{t+1} leftarrow beta cdot m_t + (1 – beta) sum_{i in B_t} frac{partial mathcal{L}[phi]}{partial phi} tag{6.11}
t+1←t−⋅mt+1,phi_{t+1} leftarrow phi_t – alpha cdot m_{t+1},

其间,mtm_t 标明动量项,∈[0,1]beta in [0,1] 用于操控随时刻改变的滑润作用,alpha 为学习率。

动量的递归核算办法导致梯度更新进程成为一切从前梯度的无限加权和,其间跟着时刻的推移,权重逐步削减。若这些梯度在多个迭代中保持一致方向,则有用的学习速率会添加;反之,假如梯度方向频繁改变,由于累加项之间的相互抵消,有用的学习速率则会下降。这样能够使参数更新途径愈加滑润,削减在优化进程中的震动现象(参见图 6.7)。

了解深度学习: 第六章 练习模型
图 6.7 带动量的随机梯度下降。a) 传统的随机梯度下降办法向最小值进发的途径弯曲杂乱。b) 经过引进动量项,能够将当时步的更新设定为之前更新与当时批次梯度的加权混合,从而使途径更滑润,加快收敛速度。

6.3.1 Nesterov 加快动量

动量项可视为对 SGD 算法下一步移动方位的粗略猜测。Nesterov 加快动量(参见图 6.8)不是在当时方位,而是在猜测的方位核算梯度:

mt+1←⋅mt+(1−)∑iinB∂L(t−⋅mt)∂t+1←t−⋅mt+1(6.12)begin{align} & m_{t+1} leftarrow beta cdot m_t + (1 – beta) sum_{i in B} frac{partial L(phi_t – alpha cdot m_t)}{partial phi} \ & phi_{t+1} leftarrow phi_t – alpha cdot m_{t+1} end{align} tag{6.12}

此处,梯度是在 t−⋅mtphi_t – alpha cdot m_t 方位核算的。这种办法使得梯度项能够对仅靠动量确认的途径进行批改。

了解深度学习: 第六章 练习模型
图 6.8 Nesterov 加快动量。该办法的解沿虚线行进至点 1。在传统动量更新中,先在点 1 处核算梯度,再按此方向移动至点 2,并添加前一次迭代的动量(即延虚线方向),终究抵达点 3。Nesterov 动量先运用动量(从点 1 至点 4),然后核算梯度并更新至点 5。

6.4 Adam

传统的梯度下降办法选用固定步长,存在一个问题:它会对大梯度的参数做出较大调整(在这些状况下咱们或许需要愈加小心),而对小梯度的参数调整较小(这儿或许需要进一步的探究)。当丢失函数外表的梯度在一个方向比另一个方向更峻峭时,很难选择一个同时能(i)在两个方向上有用发展且(ii)保持稳定的学习率(见图 6.9a–b)。

一个简便的办法是对梯度进行标准化处理,使得在每个方向上都能按固定间隔(由学习率决议)行进。首要,咱们核算梯度 mt+1m_{t+1} 和逐点平方梯度 vt+1v_{t+1}

mt+1←∂L(t)∂(6.13)m_{t+1} leftarrow frac{partial L(phi_t)}{partial phi} tag{6.13}
vt+1←(∂L(t)∂)2v_{t+1} leftarrow left( frac{partial L(phi_t)}{partial phi} right)^2

接下来运用更新规矩:

t+1←t−⋅mt+1vt+1+(6.14)phi_{t+1} leftarrow phi_t – alpha cdot frac{m_{t+1}}{sqrt{v_{t+1} + epsilon}} tag{6.14}

其间,平方根和除法均为逐点履行,alpha 标明学习率,epsilon 是一个小常量,用于防止当梯度巨细为零时除以零的状况。vt+1v_{t+1} 为平方梯度,经过其正平方根来标准化梯度,使得终究只剩下每个坐标方向上的符号。算法因而沿每个坐标方向移动固定间隔 alpha,方向由下坡方向确认(见图 6.9c)。这种简略的算法虽然能在两个方向上取得发展,但除非刚好抵达最小值点,否则不会收敛。它会在最小值周围重复跳动。

自适应矩估量(Adaptive Moment Estimation,简称Adam)在这一思路基础上,对梯度估量和平方梯度都引进了动量:

mt+1←⋅mt+(1−)∂L(t)∂m_{t+1} leftarrow beta cdot m_t + (1 – beta) frac{partial L(phi_t)}{partial phi}
vt+1←⋅vt+(1−)(∂L(t)∂)2(6.15)v_{t+1} leftarrow gamma cdot v_t + (1 – gamma) left( frac{partial L(phi_t)}{partial phi} right)^2 tag{6.15}

其间 betagamma 别离是两种核算量的动量系数。

运用动量相当于对这些核算量的历史数据进行加权均匀。在开端时,一切之前的丈量基本上都是零,这会导致估量值过小。因而,咱们经过以下规矩对这些核算量进行调整:

mt+1←mt+11−t+1hat{m}_{t+1} leftarrow frac{m_{t+1}}{1 – beta^{t+1}}
vt+1←vt+11−t+1(6.16)hat{v}_{t+1} leftarrow frac{v_{t+1}}{1 – gamma^{t+1}} tag{6.16}

由于 betagamma 的取值规模是 [0,1],跟着时刻步进,指数项 t+1t+1 逐步减小,分母趋近于一,这种调整的作用逐步变小。

终究,咱们按之前的办法更新参数,但运用调整后的项:

t+1←t−⋅mt+1vt+1+(6.17)phi_{t+1} leftarrow phi_t – alpha cdot frac{hat{m}_{t+1}}{sqrt{hat{v}_{t+1}} + epsilon} tag{6.17}

这一算法能够朝全体最小值收敛,并在参数空间的每个方向上都取得杰出发展。注意,Adam 一般在一个随机环境下运用,其间梯度及其平方根据小批量数据核算:

mt+1←⋅mt+(1−)∑i∈B∂L(t)∂m_{t+1} leftarrow beta cdot m_t + (1 – beta) sum_{i in B} frac{partial L(phi_t)}{partial phi}
vt+1←⋅vt+(1−)∑iinB(∂L(t)∂)2(6.18)v_{t+1} leftarrow gamma cdot v_t + (1 – gamma) sum_{i in B} left( frac{partial L(phi_t)}{partial phi} right)^2 tag{6.18}

因而,实践的轨迹会有噪声。

如第7章所述,神经网络参数的梯度巨细或许取决于它们在网络中的深度。Adam 有助于补偿这一趋势,并在不同层之间平衡改变。实践上,由于它防止了图 6.9a–b 中描绘的状况,Adam 对初始学习率的敏感度较低,因而不需要杂乱的学习率调整战略。

了解深度学习: 第六章 练习模型

图 6.9 自适应矩估量(Adam)。a) 该丢失函数在笔直方向上敏捷改变,在水平方向上改变缓慢。若运用适合笔直发展的学习率进行全批梯度下降,算法抵达终究水平方位需时甚久。b) 若学习率设置利于水平发展,则会在笔直方向过冲,导致不稳定。c) 一个简略办法是每步沿每个轴固定间隔移动,以两个方向都下降。这需要经过归一化梯度巨细并保存方向来完成。但这一般不会准确收敛至最小值,而是在其周边振动(如终究两点间)。d) Adam 算法运用动量优化梯度估量和归一化,保证途径更滑润。

6.5 练习算法的超参数

选择学习算法、批量巨细(Batch Size)、学习率调度(Learning Rate Schedule)和动量系数(Momentum Coefficients)都是练习算法的超参数;它们直接影响终究模型的功能,但与模型的参数本身不同。选择这些超参数更像是一门艺术而非准确科学,常见的做法是练习多个带有不同超参数的模型,然后选出体现最佳的一个。这个进程称为超参数查找。咱们将在第8章深化评论这一论题。

6.6 总结

本章环绕模型练习进行了评论。咱们将问题界说为找到使丢失函数 L[] 抵达最小的参数 。梯度下降法(Gradient Descent)经过丈量当时参数下丢失函数的梯度(即,当咱们微调参数时丢失怎么改变)来进行。接着,它会将参数向着能使丢失最快削减的方向调整。这个进程持续进行,直到抵达收敛状态。

关于非线性函数,丢失函数或许存在部分最小值(梯度下降或许会堕入这些点)和鞍点(梯度下降或许好像已收敛,但实践上并未真实收敛)。随机梯度下降(Stochastic Gradient Descent)有助于缓解这些问题。每次迭代,咱们都运用数据的一个不同随机子集(一个批次)来核算梯度,为进程引进噪声,防止算法堕入参数空间的非最优区域。此外,每次迭代核算成本更低,由于只运用了数据的一部分。咱们还看到,引进动量项能够使收敛进程愈加高效。终究,咱们介绍了 Adam 算法(Adam Algorithm)。

本章内容适用于任何模型的优化。下一章将专门评论与神经网络练习相关的两个问题。首要是怎么运用闻名的反向传达算法(Backpropagation Algorithm)核算丢失函数相关于神经网络参数的梯度。其次是在优化开端之前怎么正确初始化网络参数。假如初始化不当,优化进程运用的梯度或许会反常大或小,从而妨碍练习进程。

Notes

优化算法:优化算法在工程学中被广泛运用,一般倾向于运用“方针函数”而非丢失函数或成本函数。梯度下降法由 Cauchy 在 1847 年提出,而随机梯度下降的概念至少能够追溯到 Robbins & Monro 的 1951 年作业。两者之间的一种现代中心方案是随机方差减小下降(Stochastic Variance-Reduced Descent, Johnson & Zhang, 2013),在该办法中,全梯度定时核算,与随机更新交替进行。优化算法,特别是针对神经网络的,能够参阅 Ruder (2016)、Bottou 等 (2018) 以及 Sun (2020) 的综述。Bottou (2012) 评论了 SGD 的最佳实践,包含无重复的随机选择。

凸性、极小值与鞍点:假如函数上恣意两点间的连线(弦)都不与函数相交,则该函数是凸的。这能够经过分析海森矩阵(Hessian Matrix,即二阶导数矩阵)来验证: H[phi] = begin{bmatrix} frac{partial^2 L}{partial phi_1 partial phi_0} & frac{partial^2 L}{partial phi_1^2} & cdots & frac{partial^2 L}{partial phi_1 partial phi_N} \ frac{partial^2 L}{partial phi_2 partial phi_0} & frac{partial^2 L}{partial phi_2^2} & cdots & frac{partial^2 L}{partial phi_2 partial phi_N} \ vdots & vdots & ddots & vdots \ frac{partial^2 L}{partial phi_N partial phi_0} & frac{partial^2 L}{partial phi_N^2} & cdots & frac{partial^2 L}{partial phi_N^2} \ end{bmatrix} tag{6.19}

假如海森矩阵在一切或许的参数值上都是正定的(具有正特征值),则该函数是凸的;丢失函数将出现为润滑的碗状(如图 6.1c 所示),使得练习进程相对简略。存在单一的大局最小值,不会有部分最小值或鞍点。

关于任何丢失函数,梯度为零的方位处海森矩阵的特征值能够协助咱们将该方位分类为:(i)最小值(一切特征值均为正),(ii)最大值(一切特征值均为负),或(iii)鞍点(正特征值与处于最小值的方向相关,负特征值与处于最大值的方向相关)。

线查找:梯度下降法运用固定步长或许功率不高,由于移动的间隔彻底由梯度的巨细决议。函数改变快时,它或许移动较长间隔(或许应更谨慎),而函数改变慢时则移动较短间隔(或许应探究更远)。因而,梯度下降一般与线查找进程结合运用,经过在希望方向上采样函数来测验找到最优步长。一种办法是括号法(如图 6.10)。梯度下降在下降山沟时还或许导致低效的振动行为(如图 6.5a 的途径 1)。

了解深度学习: 第六章 练习模型

图 6.10 运用夹逼法进行线性查找。a) 当时的解在方位 a(橙色点),咱们方案探究区间 [a, d](灰色暗影部分)。在这个区间内,咱们选取两个内部点 b 和 c,评价这些点的丢失函数值。发现 L[b] 大于 L[c],因而咱们将区间 [a, b] 从查找规模中剔除。b) 接下来,在细化后的查找区间重复这一进程,此次发现 L[b] 小于 L[c],因而咱们剔除区间 [c, d]。c) 经过不断重复这一进程,直到咱们能够紧密定位到最小值的方位。

超越梯度下降:已开宣布许多算法处理梯度下降的问题。其间最闻名的是牛顿法(Newton Method),它经过运用海森矩阵的逆矩阵(Inverse of the Hessian Matrix)来考虑外表的曲率;假如函数梯度改变敏捷,则会运用更谨慎的更新战略。这种办法使线查找变得不必要,且不会受到振动行为的影响。但是,它在简略方式下向最近的极值移动或许是一个缺陷,特别是当咱们接近山顶而非山沟底部时,或许会是一个最大值。此外,关于参数很多的状况,如神经网络,核算海森矩阵的逆变得不切实践。

SGD 的特性:当学习率趋近于零时,SGD 的极限是一种随机微分方程。Jastrzebski 等(2018)指出,这一方程依赖于学习率与批量巨细的份额,并发现学习率与批量巨细份额与找到的最小值的宽度有关。较宽的最小值被以为更为理想;假如测验数据的丢失函数类似,则参数估量的细小过错对测验功能的影响较小。He 等(2019)为 SGD 提出了一个泛化边界,显现了批量巨细与学习率份额的正相关性。经过在不同架构和数据集上练习很多模型,他们找到了当批量巨细与学习率份额较低时,测验准确率提高的实证依据。Smith 等(2018)和 Goyal 等(2018)也以为批量巨细与学习率的份额对泛化至关重要(参见图 20.10)。

动量:Polyak 在 1964 年提出运用动量加快优化的概念。Goh(2017)对动量的属性进行了深化评论。Nesterov 加快梯度办法由 Nesterov 在 1983 年引进,并初次由 Sutskever 等人(2013)在随机梯度下降的布景下运用 Nesterov 动量。

自适应练习算法:AdaGrad(Duchi 等人,2011年)是一种优化算法,它经过为每个参数分配不同的学习率来应对某些参数或许需要移动更远间隔的问题。AdaGrad 运用每个参数的累计平方梯度来下降其学习率。这样做的缺陷是学习率会随时刻下降,或许在找到最小值之前中止学习。RMSProp(Hinton 等人,2012a)和 AdaDelta(Zeiler,2012)对该算法进行了改善,经过递归更新平方梯度项来防止这些问题。

目前最广泛运用的自适应练习算法是自适应矩估量优化(Adaptive Moment Estimation or Adam,Kingma & Ba,2015)。它结合了动量(其间梯度向量随时刻均匀)和 AdaGrad、AdaDelta 与 RMSProp(其间运用滑润的平方梯度项为每个参数调整学习率)的思维。虽然存在理论上的争议,原始的 Adam 算法在实践中体现出色,广泛运用,首要是由于它在广泛的超参数规模内都能杰出作业,而且能够敏捷取得初步发展。

自适应练习算法的一个潜在问题是学习率根据观察到的梯度的累积核算。在练习开端阶段,由于样本量少,这些核算或许极为嘈杂。经过学习率热身(Goyal 等人,2018)能够处理这一问题,其间在最初的几千次迭代中逐步添加学习率。另一种处理方案是校正 Adam(Liu 等人,2021a),它逐步改动动量项,有助于防止高方差。Dozat(2016)将 Nesterov 动量整合入 Adam 算法中。

SGD 与 Adam:关于 SGD 和 Adam 的相对优势一直存在激烈评论。Wilson 等人(2017)提供了依据标明,带动量的 SGD 能找到比 Adam 更低的极小值,从而在多种深度学习任务中完成更好的泛化。但是,这是有些奇怪的,由于在特定条件下(当 = = 0 时),SGD 实践上是 Adam 的一种特例。这标明,当运用 Adam 的默认超参数时,SGD 或许会有更好的体现。Loshchilov & Hutter(2019)提出的 AdamW,在存在 L2 正则化时明显提高了 Adam 的功能。Choi 等人(2019)的研究标明,假如寻觅最佳的 Adam 超参数,它与 SGD 的体现相当且收敛更快。Keskar & Socher(2017)提出了 SWATS 办法,先运用 Adam 快速发展,然后切换到 SGD 以取得更好的终究泛化功能。

尽头查找:本章评论的一切算法都是迭代的。一个彻底不同的办法是对网络参数进行量化,并运用 SAT 解算器(Mezard & Mora,2009)尽头查找成果离散化的参数空间。这种办法有或许找到大局最小值,并保证没有其他更低的丢失存在,但只对十分小的模型有用。

Problems

问题 6.1 证明方程 6.5 中最小二乘丢失函数的导数能够经过方程 6.7 中的表达式给出。

问题 6.2 若 Hessian 矩阵 H[]H[phi] 的特征值在任何方位都是正值,则该外表为凸面。在这种状况下,该外表存在一个仅有的最小值,使得优化变得简略。求线性回归模型(方程 6.5)的 Hessian 矩阵的代数表达式,

H[]=[∂2L∂02∂2L∂0∂1∂2L∂1∂0∂2L∂12](6.20)H[phi] = begin{bmatrix} frac{partial^2 L}{partial phi_0^2} & frac{partial^2 L}{partial phi_0 partial phi_1} \ frac{partial^2 L}{partial phi_1 partial phi_0} & frac{partial^2 L}{partial phi_1^2} \ end{bmatrix} tag{6.20}

经过证明其特征值始终为正来证明此函数的凸性。这能够经过证明矩阵的迹和行列式均为正值来完成。

问题 6.3 关于 Gabor 模型(方程 6.8),核算参数 0phi_01phi_1 对最小二乘丢失 L[]L[phi] 的导数。

问题 6.4* 逻辑回归模型经过线性函数将一个维度的输入 xx 分类到两个或许的类别 y∈{0,1}y in {0,1} 中。该模型具有两个参数,0phi_01phi_1,界说如下:

Pr(y=1∣x)=sig[0+1x](6.21)Pr(y = 1|x) = sig[phi_0 + phi_1x] tag{6.21}

其间 sig[⋅]sig[cdot] 是逻辑 sigmoid 函数:

sig[z]=11+exp[−z](6.22)sig[z] = frac{1}{1 + exp[-z]} tag{6.22}

问题 6.5* 核算相关于方程 3.1 中介绍的简略神经网络模型的十个参数的最小二乘丢失的导数:

f[x,z]=0+1a[0+1x]+2a[0+1x]+3a[0+1x](6.23)f[x,z] = phi_0 + phi_1a[theta_0 + theta_1x] + phi_2a[beta_0 + beta_1x] + phi_3a[gamma_0 + gamma_1x] tag{6.23}

细心考虑 ReLU 函数 a[⋅]a[cdot] 的导数将怎么表达。

问题 6.6 图 6.11 中哪些函数是凸函数?请给出你的证明。对每个点 1–7 进行分类,别离为(i)部分最小值,(ii)大局最小值,或(iii)两者都不是。

了解深度学习: 第六章 练习模型

图 6.11 展现了问题 6.6 中的三个一维丢失函数。

问题 6.7* 图 6.5a 中的途径 1 在向最小值方向下降时体现出来回摇摆的低功率。特别是,每一步都以直角转变方向。对这一现象给出定性解说,并提出一种或许的处理方案,以防止此种行为。

问题 6.8* 固定学习率的(非随机)梯度下降法能否逃离部分最小值?

问题 6.9 在数据集巨细为 100,批量巨细为 20 的条件下,咱们运行了 1,000 次迭代的随机梯度下降算法。模型被练习了多少个周期?

问题 6.10 证明动量项 mtm_t (方程 6.11)是从前迭代中梯度的无限加权和,并推导出该总和中系数(权重)的表达式。

问题 6.11 假如模型有一百万个参数,Hessian 矩阵将是什么维度?