滴水恩情 发表于 2024-9-5 12:57:49

Datawhale X 李宏毅苹果书 AI夏令营 《深度学习详解》第三章 深度学习底子

3.1 局部极小值与鞍点

        1、临界点及其种类

         在我们的训练中是会存在梯度下降失效的题目的
https://i-blog.csdnimg.cn/direct/f29945b3179b4ec5900a5bed8c91755c.png
        提到梯度为零的时候,大家开始想到的可能就是局部极小值(local minimum) ,但实在损失不是只在局部极小值的梯度是零,还有其他可能会让梯度是零的点,比如鞍点(saddle point)。鞍点实在就是梯度是零且区别于局部极小值和局部极大值(localmaximum)的点,我们将梯度为零的点统称为临界点(critical point)
https://i-blog.csdnimg.cn/direct/671f8f35f5864e1788c71be7eaa4a5b8.png
        2、判断临界点种类的方法

        判断一个临界点到底是局部极小值照旧鞍点需要知道损失函数的外形。虽然无法完备知道整个损失函数的样子,但是如果给定某一组参数,比如https://latex.csdn.net/eq?%5Ctheta%7B%7D%27,在https://latex.csdn.net/eq?%5Ctheta%20%7B%7D%27附近的损失函数是有办法写出来的:https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29%5Capprox%20L%5Cleft%20%28%20%5Ctheta%20%7B%7D%27%20%5Cright%20%29+%5Cleft%20%28%20%5Ctheta%20-%5Ctheta%20%7B%7D%27%20%5Cright%20%29%5E%7BT%7Dg+%5Cfrac%7B1%7D%7B2%7D%5Cleft%20%28%20%5Ctheta%20-%5Ctheta%20%7B%7D%27%20%5Cright%20%29%5E%7BT%7DH%5Cleft%20%28%20%5Ctheta%20-%5Ctheta%20%7B%7D%27%20%5Cright%20%29,我们使用泰勒级数近似(Tayler series appoximation)得到这个近似公式。


[*]第一项https://latex.csdn.net/eq?L%5Cleft%20%28%7B%5Ctheta%20%7D%27%20%5Cright%20%29告诉我们,当https://latex.csdn.net/eq?%5Ctheta跟https://latex.csdn.net/eq?%5Ctheta%20%7B%7D%27很近的时候,https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29应该跟https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%7B%7D%27%20%5Cright%20%29比较接近
[*]第二项https://latex.csdn.net/eq?%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29%5E%7BT%7Dg中,https://latex.csdn.net/eq?g代表梯度,它是一个向量,可以弥补https://latex.csdn.net/eq?L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29跟https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29之间的差距。偶尔候梯度https://latex.csdn.net/eq?g会写成https://latex.csdn.net/eq?%5Cbigtriangledown%20L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29。https://latex.csdn.net/eq?g_%7Bi%7D是向量https://latex.csdn.net/eq?g的第 i 个元素,就是https://latex.csdn.net/eq?L关于https://latex.csdn.net/eq?%5Ctheta的第 i 个元素的微分,即https://latex.csdn.net/eq?g_%7Bi%7D%3D%5Cfrac%7B%5Cpartial%20L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29%7D%7B%5Cpartial%20%5Ctheta%20_%7Bi%7D%7D
[*]第三项https://latex.csdn.net/eq?%5Cfrac%7B1%7D%7B2%7D%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29%5E%7BT%7DH%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29跟海森矩阵(Hessian matrix)https://latex.csdn.net/eq?H有关。https://latex.csdn.net/eq?H里面放的是https://latex.csdn.net/eq?L的二次微分,它第 i 行,第 j 列的值https://latex.csdn.net/eq?H_%7Bij%7D就是把https://latex.csdn.net/eq?%5Ctheta的第 i 个元素对https://latex.csdn.net/eq?L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29作微分,再把https://latex.csdn.net/eq?%5Ctheta的第 j 个元素对https://latex.csdn.net/eq?%5Cfrac%7B%5Cpartial%20L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29%7D%7B%5Cpartial%20%5Ctheta%20_%7Bi%7D%7D作微分后的结果,即https://latex.csdn.net/eq?H_%7Bij%7D%3D%5Cfrac%7B%5Cpartial%20%5E%7B2%7D%7D%7B%5Cpartial%20%5Ctheta%20_%7Bi%7D%5Cpartial%20%5Ctheta%20_%7Bj%7D%7DL%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29
        在临界点,梯度https://latex.csdn.net/eq?g为零,因此https://latex.csdn.net/eq?%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29%5E%7BT%7Dg为零。以是在临界点的附近,损失函数可被近似为https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29%5Capprox%20L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29+%5Cfrac%7B1%7D%7B2%7D%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29H%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29,我们可以根据这个式子的第二项来判断在https://latex.csdn.net/eq?%7B%5Ctheta%20%7D%27附近的偏差外貌(error surface)到底是什么样子的。为了符号简洁,我们用向量https://latex.csdn.net/eq?v来表示https://latex.csdn.net/eq?%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29,https://latex.csdn.net/eq?%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29%5E%7BT%7DH%5Cleft%20%28%20%5Ctheta%20-%7B%5Ctheta%20%7D%27%20%5Cright%20%29可改写为https://latex.csdn.net/eq?v%5E%7BT%7DHv,有如下三种情况:


[*]对所有https://latex.csdn.net/eq?v,https://latex.csdn.net/eq?v%5E%7BT%7DHv%3E%200。这意味着对任意https://latex.csdn.net/eq?%5Ctheta,https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29%3E%20L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29。这代表 L(θ′) 是附近的一个最低点,以是它是局部极小值
[*]对所有https://latex.csdn.net/eq?v,https://latex.csdn.net/eq?v%5E%7BT%7DHv%3C%200。这意味着对任意https://latex.csdn.net/eq?%5Ctheta,https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29%3C%20L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29。这代表 L(θ′) 是附近的一个最高点,以是它是局部极大值
[*]对于https://latex.csdn.net/eq?v,https://latex.csdn.net/eq?v%5E%7BT%7DHv偶尔候大于零,偶尔候小于零。这意味着在https://latex.csdn.net/eq?%7B%5Ctheta%20%7D%27附近,偶尔候https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29%3C%20L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29,偶尔候https://latex.csdn.net/eq?L%5Cleft%20%28%20%5Ctheta%20%5Cright%20%29%3E%20L%5Cleft%20%28%20%7B%5Ctheta%20%7D%27%20%5Cright%20%29,以是它既不是局部极大值,也不是局部极小值,而是鞍点
https://i-blog.csdnimg.cn/direct/995ad02d6e03463ca1a30ab62b1c039d.png
        3、逃离鞍点的方法

https://i-blog.csdnimg.cn/direct/b13d0d2805a447c2958126a4d539cb7e.png
        最小值比例(minimum ratio)界说为: 最小值比例=正特征值数量/总特征值数量。从经验上来看,遇到局部极小值的可能性极小,多数的时候,我们训练到一个梯度很小的地方,参数不再更新,往往只是遇到了鞍点。
3.2 批量和动量

        事实上,在把数据分为批量的时候,我们还会进行随机打乱(shuffle)。随机打乱有许多不同的做法,一个常见的做法是在每一个回合开始之前重新划分批量,也就是说,每个回合的批量的数据都不一样。 
        1、批量大小对梯度下降法的影响

         假设我们如今有20笔数据,下面出现两种情况:


[*]批量大小为训练数据的大小。这种使用全批量(fullbatch)的数据来更新参数的方法即批量梯度下降法(Batch Gradient Descent,BGD),此时模子必须把 20 笔训练数据都看完,才能够盘算损失和梯度,参数才能够更新一次。
https://i-blog.csdnimg.cn/direct/2106f25205304fe3bb8a7f5664818c80.png


[*]批量大小等于 1。此时使用的方法即随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法。批量大小等于 1 意味着只要取出一笔数据即可盘算损失、更新一次参数。如果统共有 20 笔数据,那么在每一个回合里面,参数会更新 20 次。用一笔数据算出来的损失相对带有更多噪声,因此其更新的方向是曲折的
https://i-blog.csdnimg.cn/direct/092310f4bc824093b9387edb33048d2f.png
https://i-blog.csdnimg.cn/direct/f2ef4523119d40c18ff7547ca7669e87.png         实际上,考虑并行运算,批量梯度下降耗费的时间不一定更长;对于比较大的批量,盘算损失和梯度耗费的时间不一定比使用小批量的盘算时间长。
https://i-blog.csdnimg.cn/direct/039b2883d3684edcaa34c83c96651c23.pnghttps://i-blog.csdnimg.cn/direct/ac9f203627c74f97ab13e177369c5284.png
         大的批量更新比较稳定,小的批量的梯度的方向是比较有噪声的(noisy)。但实际上有噪声的的梯度反而可以资助训练,如果拿不同的批量来训练模子来做图像识别题目,得到的结果是:批量大小越大,验证集准确率越差。这个是优化的题目,大的批量大小优化可能会有题目,小的批量大小优化的结果反而是比较好的。
https://i-blog.csdnimg.cn/direct/b8fec855877a471ebfd3052c19ae051c.png
        2、动量法

         动量法(momentum method)是别的一个可以对抗鞍点或局部最小值的方法。
        一般的梯度下降(vanilla gradient descent)初始参数为https://latex.csdn.net/eq?%5Ctheta%20_%7B0%7D,盘算一下梯度,盘算完梯度后,往梯度的反方向去更新参数https://latex.csdn.net/eq?%5Ctheta%20_%7B1%7D%3D%5Ctheta%20_%7B0%7D-%5Ceta%20g_%7B0%7D。有了新的参数https://latex.csdn.net/eq?%5Ctheta%20_%7B1%7D后,再盘算一次梯度,再往梯度的反方向更新一次参数,以此类推。
https://i-blog.csdnimg.cn/direct/5ab0b14bdaae47d3b43fe09caf49f4c9.png
        引入动量后,每次在移动参数的时候,不是只往梯度的反方向来移动参数,而是根据梯度的反方向加上前一步移动的方向决定移动方向。过程如下: 
https://i-blog.csdnimg.cn/direct/3c255bff097f448280ccc6bc51b1713e.png
3.3 自顺应学习率

        训练一个网络,训练到厥后发现损失不再下降的时候,偶尔候不是卡在局部最小值或鞍点,只是单纯的损失无法再下降。最原始的梯度下降连简单的偏差外貌都做不好,因此需要更好的梯度下降的版本。在梯度下降里面,所有的参数都是设同样的学习率,这显然是不够的,应该要为每一个参数定制化学习率,即引入自顺应学习率(adaptive learning rate)的方法,给每一个参数不同的学习率。如果在某一个方向上,梯度的值很小,非常平展,我们会盼望学习率调大一点;如果在某一个方向上非常陡峭,坡度很大,我们会盼望学习率可以设得小一点。
https://i-blog.csdnimg.cn/direct/ab1a87e26c464bd798e15de87507b922.png
        1、AdaGrad

        AdaGrad(Adaptive Gradient)是典范的自顺应学习率方法,其能够根据梯度大小主动调整学习率。AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。 
        梯度下降更新某个参数https://latex.csdn.net/eq?%5Ctheta%20_%7Bt%7D%5E%7Bi%7D的过程为:https://latex.csdn.net/eq?%5Ctheta%20_%7Bt+1%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7Bt%7D%5E%7Bi%7D-%5Ceta%20g_%7Bt%7D%5E%7Bi%7D
        https://latex.csdn.net/eq?%5Ctheta%20_%7Bt%7D%5E%7Bi%7D在第 t 个迭代的值减掉在第 t 个迭代参数 i 算出来的梯度:https://latex.csdn.net/eq?g_%7Bt%7D%5E%7Bi%7D%3D%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20%5Ctheta%20%5E%7Bi%7D%7D%7C_%7B%5Ctheta%20%3D%5Ctheta%20_%7Bt%7D%7D,https://latex.csdn.net/eq?g_%7Bt%7D%5E%7Bi%7D代表在第 t 个迭代,即https://latex.csdn.net/eq?%5Ctheta%20%3D%20%5Ctheta%20_%7Bt%7D时, 参数https://latex.csdn.net/eq?%5Ctheta%20%5E%7Bi%7D对损失https://latex.csdn.net/eq?L的微分,学习率是固定的。
        如今要有一个随着参数定制化的学习率,即把原来学习率https://latex.csdn.net/eq?%5Ceta酿成https://latex.csdn.net/eq?%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7Bt%7D%5E%7Bi%7D%7D:https://latex.csdn.net/eq?%5Ctheta%20_%7Bt+1%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7Bt%7D%5E%7Bi%7D-%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7Bt%7D%5E%7Bi%7D%7Dg_%7Bt%7D%5E%7Bi%7D,其中https://latex.csdn.net/eq?%5Csigma%20_%7Bt%7D%5E%7Bi%7D的上标为 i,这代表参数https://latex.csdn.net/eq?%5Csigma与 i 相关,不同的参数的https://latex.csdn.net/eq?%5Csigma不同。https://latex.csdn.net/eq?%5Csigma%20_%7Bt%7D%5E%7Bi%7D的下标为 t,这代表参数https://latex.csdn.net/eq?%5Csigma与迭代相关,不同的迭代也会有不同的https://latex.csdn.net/eq?%5Csigma。学习率从https://latex.csdn.net/eq?%5Ceta改成https://latex.csdn.net/eq?%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7Bt%7D%5E%7Bi%7D%7D的时候,学习率就变得参数相关(parameter dependent)
         参数相关的一个常见的类型是算梯度的均方根(root mean square)


[*]第一次更新参数过程为:https://latex.csdn.net/eq?%5Ctheta%20_%7B1%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7B0%7D%5E%7Bi%7D-%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7B0%7D%5E%7Bi%7D%7Dg_%7B0%7D%5E%7Bi%7D,其中https://latex.csdn.net/eq?%5Ctheta%20_%7B0%7D%5E%7Bi%7D是初始化参数。而https://latex.csdn.net/eq?%5Csigma%20_%7B0%7D%5E%7Bi%7D的盘算过程为:https://latex.csdn.net/eq?%5Csigma%20_%7B0%7D%5E%7Bi%7D%3D%5Csqrt%7B%5Cleft%20%28%20g_%7B0%7D%5E%7Bi%7D%20%5Cright%20%29%5E%7B2%7D%7D%3D%5Cleft%20%7C%20g_%7B0%7D%5E%7Bi%7D%20%5Cright%20%7C,其中https://latex.csdn.net/eq?g_%7B0%7D%5E%7Bi%7D是梯度。将https://latex.csdn.net/eq?%5Csigma%20_%7B0%7D%5E%7Bi%7D的值代入更新的公式可知https://latex.csdn.net/eq?%5Cfrac%7Bg_%7B0%7D%5E%7Bi%7D%7D%7B%5Csigma%20_%7B0%7D%5E%7Bi%7D%7D的值是 +1 或 −1
[*]第二次更新参数过程为:https://latex.csdn.net/eq?%5Ctheta%20_%7B2%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7B1%7D%5E%7Bi%7D-%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7B1%7D%5E%7Bi%7D%7Dg_%7B1%7D%5E%7Bi%7D,其中https://latex.csdn.net/eq?%5Csigma%20_%7B1%7D%5E%7Bi%7D%3D%5Csqrt%7B%5Cfrac%7B1%7D%7B2%7D%5Cleft%20%5B%20%5Cleft%20%28%20g_%7B0%7D%5E%7Bi%7D%20%5Cright%20%29%5E%7B2%7D+%5Cleft%20%28%20g_%7B1%7D%5E%7Bi%7D%20%5Cright%20%29%5E%7B2%7D%20%5Cright%20%5D%7D是过去所有盘算出来的梯度的平方的平均再开根号,即均方根
[*]以此类推,第 t + 1 次更新参数的时候,有:https://latex.csdn.net/eq?%5Ctheta%20_%7Bt+1%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7Bt%7D%5E%7Bi%7D-%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7Bt%7D%5E%7Bi%7D%7Dg_%7Bt%7D%5E%7Bi%7D,https://latex.csdn.net/eq?%5Csigma%20_%7Bt%7D%5E%7Bi%7D%3D%5Csqrt%7B%5Cfrac%7B1%7D%7Bt+1%7D%5Csum_%7Bi%3D0%7D%5E%7Bt%7D%5Cleft%20%28%20g_%7Bt%7D%5E%7Bi%7D%20%5Cright%20%29%5E%7B2%7D%7D
        因此有了https://latex.csdn.net/eq?%5Csigma%20_%7Bt%7D%5E%7Bi%7D这一项以后,就可以随着梯度的不同,每一个参数的梯度的不同,来主动调整学习率的大小。
        2、RMSProp

         同一个参数需要的学习率,也会随着时间而改变,于是就有了一个新的方法———RMSprop(Root Mean Squared propagation)


[*]第一次更新过程为:https://latex.csdn.net/eq?%5Ctheta%20_%7B1%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7B0%7D%5E%7Bi%7D-%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7B0%7D%5E%7Bi%7D%7Dg_%7B0%7D%5E%7Bi%7D,https://latex.csdn.net/eq?%5Csigma%20_%7B0%7D%5E%7Bi%7D%3D%5Csqrt%7B%5Cleft%20%28%20g_%7B0%7D%5E%7Bi%7D%20%5Cright%20%29%5E%7B2%7D%7D%3D%5Cleft%20%7C%20g_%7B0%7D%5E%7Bi%7D%20%5Cright%20%7C
[*]第二次更新过程为:https://latex.csdn.net/eq?%5Ctheta%20_%7B2%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7B1%7D%5E%7Bi%7D-%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7B1%7D%5E%7Bi%7D%7Dg_%7B1%7D%5E%7Bi%7D,https://latex.csdn.net/eq?%5Csigma%20_%7B1%7D%5E%7Bi%7D%3D%5Csqrt%7B%5Calpha%20%5Cleft%20%28%20%5Csigma%20_%7B0%7D%5E%7Bi%7D%20%5Cright%20%29%5E%7B2%7D+%5Cleft%20%28%201-%5Calpha%20%5Cright%20%29%5Cleft%20%28g%20_%7B1%7D%5E%7Bi%7D%20%5Cright%20%29%5E%7B2%7D%7D
[*]以此类推,第 t + 1 次更新参数的时候,有:https://latex.csdn.net/eq?%5Ctheta%20_%7Bt+1%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7Bt%7D%5E%7Bi%7D-%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7Bt%7D%5E%7Bi%7D%7Dg_%7Bt%7D%5E%7Bi%7D,https://latex.csdn.net/eq?%5Csigma%20_%7Bt%7D%5E%7Bi%7D%3D%5Csqrt%7B%5Calpha%20%5Cleft%20%28%20%5Csigma%20_%7Bt-1%7D%5E%7Bi%7D%20%5Cright%20%29%5E%7B2%7D+%5Cleft%20%28%201-%5Calpha%20%5Cright%20%29%5Cleft%20%28%20g_%7Bt%7D%5E%7Bi%7D%20%5Cright%20%29%20%5E%7B2%7D%7D
        RMSProp 通过https://latex.csdn.net/eq?%5Calpha可以决定,https://latex.csdn.net/eq?g_%7Bt%7D%5E%7Bi%7D相较于之前存在https://latex.csdn.net/eq?%5Csigma%20_%7Bt-1%7D%5E%7Bi%7D里面的https://latex.csdn.net/eq?g_%7B1%7D%5E%7Bi%7D, https://latex.csdn.net/eq?g_%7B2%7D%5E%7Bi%7D, · · · · · · , https://latex.csdn.net/eq?g_%7Bt-1%7D%5E%7Bi%7D的重要性有多大。如果使用 RMSprop,就可以动态调整https://latex.csdn.net/eq?%5Csigma%20_%7Bt%7D%5E%7Bi%7D这一项
https://i-blog.csdnimg.cn/direct/58d4aad334fc4c4e9d2bc167a3595df8.png
        3、Adam

         最常用的优化的策略大概优化器(optimizer)是Adam(Adaptive moment estimation)。Adam 可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,而且能够自顺应调整学习率。PyTorch 里面已经帮我们写好了 Adam 优化器,这个优化器里面有一些超参数需要人为决定,但是往往用 PyTorch 预设的参数就好了,并不需要我们进行改动。
3.4 学习率调治

        之前的学习率调整方法中https://latex.csdn.net/eq?%5Ceta是一个固定的值,而在学习率调治(learning rate scheduling)中https://latex.csdn.net/eq?%5Ceta跟时间有关。学习率调治中最常见的策略是学习率衰减(learning rate decay),也称为学习率退火(learning rateannealing),随着参数的不断更新,让https://latex.csdn.net/eq?%5Ceta越来越小
https://i-blog.csdnimg.cn/direct/bde85e8d75df4605b0557d519ec8d222.png
         除了学习率下降以外,还有别的一个经典的学习率调治的方式———预热。预热的方法是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。残差网络,BERT 和 Transformer 的训练都使用了预热。
3.5 优化总结

        以是我们从最原始的梯度下降,进化到这一个版本:https://latex.csdn.net/eq?%5Ctheta%20_%7Bt+1%7D%5E%7Bi%7D%5Cleftarrow%20%5Ctheta%20_%7Bt%7D%5E%7Bi%7D-%5Cfrac%7B%5Ceta%20%7D%7B%5Csigma%20_%7Bt%7D%5E%7Bi%7D%7Dm_%7Bt%7D%5E%7Bi%7D,其中https://latex.csdn.net/eq?m_%7Bt%7D%5E%7Bi%7D是动量
https://i-blog.csdnimg.cn/direct/0d4b5c6ae53f4fffa78af5222dfca39d.png
3.6 分类

        1、分类与回归的关系

        回归是输入一个向量https://latex.csdn.net/eq?x,输出https://latex.csdn.net/eq?%5Chat%7By%7D,我们盼望https://latex.csdn.net/eq?%5Chat%7By%7D跟某一个标签https://latex.csdn.net/eq?y越接近越好,https://latex.csdn.net/eq?y是要学习的目的。而分类可当作回归来看,输入https://latex.csdn.net/eq?x后,输出仍然是一个标量https://latex.csdn.net/eq?%5Chat%7By%7D,它跟正确答案的那个类越接近越好。实际上,在做分类的题目的时候,比较常见的做法是用独热向量表示类,这样类两两之间的间隔都是一样的。
        如果https://latex.csdn.net/eq?y是有多个元素的向量,网络也要产生多个输出,每个输出都是跟目的越接近越好:
https://i-blog.csdnimg.cn/direct/716f3c0de7a24dae892122ddbd89209e.png
        2、带有 softmax 的分类

        按照上述的设定,分类实际过程是:输入https://latex.csdn.net/eq?x,乘上https://latex.csdn.net/eq?W,加上https://latex.csdn.net/eq?b,通过激活函数https://latex.csdn.net/eq?%5Csigma,乘上https://latex.csdn.net/eq?%7BW%7D%27,再加上https://latex.csdn.net/eq?%7Bb%7D%27得到向量https://latex.csdn.net/eq?%5Chat%7By%7D。但实际做分类的时候,往往会把https://latex.csdn.net/eq?%5Chat%7By%7D通过 softmax 函数得到https://latex.csdn.net/eq?%7By%7D%27,才去盘算https://latex.csdn.net/eq?%7By%7D%27跟https://latex.csdn.net/eq?%5Chat%7By%7D之间的间隔。
https://i-blog.csdnimg.cn/direct/60580ea6114b4a9d9c57f9c43b173030.png
https://i-blog.csdnimg.cn/direct/33def6819e5048ca9b70fcd55d41be1a.png         softmax 的盘算:https://latex.csdn.net/eq?%7By_%7Bi%7D%7D%27%3D%5Cfrac%7B%5Cexp%20%5Cleft%20%28%20y_%7Bi%7D%20%5Cright%20%29%7D%7B%5Csum_%7Bj%7D%5E%7B%7D%5Cexp%20%5Cleft%20%28%20y_%7Bi%7D%20%5Cright%20%29%7D,其中https://latex.csdn.net/eq?1%3E%20%7By_%7Bi%7D%7D%27%3E%200,https://latex.csdn.net/eq?%5Csum_%7Bi%7D%5E%7B%7D%7By_%7Bi%7D%7D%27%3D1
        3、分类损失

        当我们把https://latex.csdn.net/eq?x输入到一个网络里面产生https://latex.csdn.net/eq?%5Chat%7By%7D后,通过softmax得到https://latex.csdn.net/eq?%5Chat%7By%7D,再去盘算https://latex.csdn.net/eq?%7By%7D%27跟https://latex.csdn.net/eq?y之间的间隔https://latex.csdn.net/eq?e,有两种盘算方法,一种是均方偏差:https://latex.csdn.net/eq?e%3D%5Csum_%7Bi%7D%5E%7B%7D%5Cleft%20%28%20y_%7Bi%7D%20-%7By_%7Bi%7D%7D%27%5Cright%20%29%5E%7B2%7D,一种是交织熵:https://latex.csdn.net/eq?e%3D-%5Csum_%7Bi%7D%5E%7B%7Dy_%7Bi%7D%5Cln%20%7By_%7Bi%7D%7D%27,当https://latex.csdn.net/eq?%5Chat%7By%7D跟https://latex.csdn.net/eq?%7By%7D%27相同时,可以最小化交织熵的值,实在就是最大化似然(maximize likelihood),此时均方偏差也是最小的。
        从优化的角度来说,相较于均方偏差,交织熵是被更常用在分类上 。
3.7 批量归一化

        如果我们可以给不同的维度,同样的数值范围的话,那我们可能就可以制造比较好的偏差外貌,让训练变得比较容易一点实在有许多不同的方法,这些不同的方法往往就合起来统称为特征归一化(feature normalization) 
        Z 值归一化(Z-score normalization),也称为标准化(standardization)。假设https://latex.csdn.net/eq?x%5E%7B1%7D到https://latex.csdn.net/eq?x%5E%7BR%7D是我们所有的训练数据的特征向量,把所有训练数据的特征向量,齐备都集合起来。向量https://latex.csdn.net/eq?x%5E%7B1%7D里面https://latex.csdn.net/eq?x_%7B1%7D%5E%7B1%7D代表https://latex.csdn.net/eq?x%5E%7B1%7D的第一个元素,https://latex.csdn.net/eq?x_%7B1%7D%5E%7B2%7D代表https://latex.csdn.net/eq?x%5E%7B2%7D的第一个元素,以此类推。我们把不同笔数据即不同特征向量,同一个维度里面的数值取出来,对于每个维度 i,盘算其平均值(mean)https://latex.csdn.net/eq?m_%7Bi%7D和标准差(standard deviation)https://latex.csdn.net/eq?%5Csigma%20_%7Bi%7D。接下来就可以进行归一化:https://latex.csdn.net/eq?%5Ctilde%7Bx%7D_%7Bi%7D%5E%7Br%7D%5Cleftarrow%20%5Cfrac%7Bx_%7Bi%7D%5E%7Br%7D-m_%7Bi%7D%7D%7B%5Csigma%20_%7Bi%7D%7D
        归一化有个好处,做完归一化以后,这个维度上面的数值就会平均是 0,其方差是 1,以是这一排数值的分布就都会在 0 上下。对每一个维度都做一样的归一化,所有特征不同维度的数值都在 0 上下,可能就可以制造一个比较好的偏差外貌。以是特征归一化方式往往对训练有资助,它可以使得在做梯度下降时,损失收敛更快一点,训练更顺利一点。 
        1、考虑深度学习

         https://latex.csdn.net/eq?%5Ctilde%7Bx%7D代表归一化的特征,把它丢到深度网络里面,去做接下来的盘算和训练。
https://i-blog.csdnimg.cn/direct/161f0ba8d1bd4e7dbec15f7259590077.png         如何对https://latex.csdn.net/eq?z做特征归一化?https://latex.csdn.net/eq?z可以看成别的一种特征。
        首先盘算下https://latex.csdn.net/eq?z%5E%7B1%7D,https://latex.csdn.net/eq?z%5E%7B2%7D, https://latex.csdn.net/eq?z%5E%7B3%7D的平均值:https://latex.csdn.net/eq?%5Cmu%20%3D%5Cfrac%7B1%7D%7B3%7D%5Csum_%7Bi%3D1%7D%5E%7B3%7Dz%5E%7Bi%7D,接下来盘算标准差:https://latex.csdn.net/eq?%5Csigma%20%3D%5Csqrt%7B%5Cfrac%7B1%7D%7B3%7D%5Csum_%7Bi%3D1%7D%5E%7B3%7D%5Cleft%20%28%20z%5E%7Bi%7D-%5Cmu%20%5Cright%20%29%5E%7B2%7D%7D,在这个式子里,平方就是指对每一个元素都去做平方,开根号指的是对向量里面的每一个元素开根号。末了,根据盘算出的https://latex.csdn.net/eq?%5Cmu和https://latex.csdn.net/eq?%5Csigma进行归一化:https://latex.csdn.net/eq?%5Ctilde%7Bz%7D%5E%7Bi%7D%3D%5Cfrac%7Bz%5E%7Bi-%5Cmu%20%7D%7D%7B%5Csigma%20%7D,其中,除号代表逐元素的除,即分子分母两个向量对应元素相除。
        接下来可以通过激活函数得到其他向量,但是训练数据非常多,如今一个数据集可能有上百万笔数据,GPU 的显存无法把它整个数据集的数据都加载进去。因此,在实现的时候,我们不会让这一个网络考虑整个训练数据里面的所有样本,而是只会考虑一个批量里面的样本。批量归一化实用于批量大小比较大的时候,批量大小如果比较大,也许这个批量大小里面的数据就足以表示整个数据集的分布。这个时候就不需要对整个数据集做特征归一化,而改成只在一个批量上做特征归一化作为近似。
        在做批量归一化的时候往往还会做如下操纵:https://latex.csdn.net/eq?%5Chat%7Bz%7D%5E%7Bi%7D%3D%5Cgamma%20%5Cbigodot%20%5Ctilde%7Bz%7D%5E%7Bi%7D+%5Cbeta,其中,https://latex.csdn.net/eq?%5Cbigodot代表逐元素的相乘,https://latex.csdn.net/eq?%5Cbeta和https://latex.csdn.net/eq?%5Cgamma可以想成是网络的参数,需要别的再被学习出来。
https://i-blog.csdnimg.cn/direct/5714360cf24a4209932bf67f69feb9d3.png
        2、测试时的批量归一化

        批量归一化在测试也就是推断(inference)的时候,并不需要做什么特别的处理,PyTorch 已经处理好了。在训练的时候,如果有在做批量归一化,每一个批量盘算出来的https://latex.csdn.net/eq?%5Cmu,https://latex.csdn.net/eq?%5Csigma,都会拿出来算移动平均(moving average)。假设如今有各个批量盘算出来的https://latex.csdn.net/eq?%5Cmu%20%5E%7B1%7D, https://latex.csdn.net/eq?%5Cmu%20%5E%7B2%7D, https://latex.csdn.net/eq?%5Cmu%20%5E%7B3%7D, · · · · · · , https://latex.csdn.net/eq?%5Cmu%20%5E%7Bt%7D,则可以盘算移动平均:https://latex.csdn.net/eq?%5Cbar%7B%5Cmu%20%7D%5Cleftarrow%20p%5Cbar%7B%5Cmu%20%7D+%5Cleft%20%28%201-p%20%5Cright%20%29%5Cmu%20%5E%7Bt%7D,其中,https://latex.csdn.net/eq?%5Cbar%7B%5Cmu%20%7D是https://latex.csdn.net/eq?%5Cmu的个平均值,https://latex.csdn.net/eq?p是因子,这也是一个常数,这也是一个超参数,在 PyTorch 里面,https://latex.csdn.net/eq?p设 0.1
        3、内部协变量偏移

        原始的批量归一化论文里面提出内部协变量偏移(internal covariate shift)概念
https://i-blog.csdnimg.cn/direct/6c792c82b39a40bfbf5bae1992b7e318.png
https://i-blog.csdnimg.cn/direct/99ca6e9faaed41459f6968f02172f090.png         实在批量归一化不是唯一的归一化方法,还有许多归一化方法,比如批量重归一化(batchrenormalization)、层归一化(layer normalization)、实例归一化(instance normalization)、组归一化(group normalization)、权重归一化(weight normalization)和谱归一化(spectrum normalization)
hahaha都看到这里了,要是以为有效的话就辛苦动动小手点个赞吧! 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Datawhale X 李宏毅苹果书 AI夏令营 《深度学习详解》第三章 深度学习底子