读书学习笔记 # Datawhale X 李宏毅苹果书 AI夏令营

文章目录

🚩学习目标

  • Task 1.1 《深度学习详解》- 3.1 局部极小值与鞍点
  • Task 1.2 《深度学习详解》- 3.2 批量和动量
  • Task 2.1 《深度学习详解》- 3.3&4&5 自适应学习率
  • Task 2.2 《深度学习详解》- 3.6 分类
  • Task 2.3 (实践任务):HW3(CNN)
  • Task 3.1 《深度学习详解》- 3.7 批量归一化
  • Task 3.2 《深度学习详解》- 4.1&2&3&4 卷积神经网络-上
  • Task 3.3 《深度学习详解》- 3.5&6&7&8 卷积神经网络-下
  • (选修)《深度学习详解》- 6.1&2 自注意力机制的原理
  • (选修实践任务):HW4(Attention)
  • (选修)《深度学习详解》19-ChatGPT

🚩学习内容

欢迎去大家各大电商平台选购纸质版苹果书《深度学习详解》
基于上述书籍拓展

引用内容为书本原话 图片基本上来源于书中
我以自问自答的方式输出内容


🚩 Task1.1


🎯为什么优化会失败

收敛在局部极限值与鞍点会导致优化失败。

隐藏任务①:搜索资料,找到一个优化失败的案例,尝试用自己的话描述一遍情况~
深度学习并非万能,遇到这些问题会失败 | 机器之心

📌因非信息梯度导致的失败

原因:如果梯度中的信息很少,使用它来进行学习就无法成功。
例如,研究者从学习随机奇偶校验的简单问题开始,在大约d=30这个程度之后,经过合理时间后也没有观察到优于随机的表现。
研究者使用两个定理对此进行了详细的分析,得出了结论:基于梯度的方法确实不能学会随机奇偶校验和线性周期函数。 此外,不管我们使用哪一类预测算法,只要使用了基于梯度的方法来进行训练,这个结果都成立。

🎯局部极小值与鞍点

我们在做优化的时候经常会发现,随着参数不断更新,训练的损失不会再下降, 但是我们对这个损失仍然不满意。’

达到了临界点

🎯临界点及其种类

过去常见的一个猜想是我们优化到某个地方,这个地方参数对损失的微分为零,如图 3.1所示。图 3.1 中的两条曲线对应两个神经网络训练的过程。当参数对损失微分为零的时候,梯度下降就不能再更新参数了,训练就停下来了,损失不再下降了。

在这里插入图片描述

提到梯度为零的时候,大家最先想到的可能就是局部极小值(local minimum)
所以经常有人说,做深度学习时使用梯度下降会收敛在局部极小值,梯度下降不起作用。 但其实损失不是只在局部极小值的梯度是零,还有其他可能会让梯度是零的点,比如鞍点(saddle point)鞍点其实就是梯度是零且区别于局部极小值和局部极大值(localmaximum)的点。图 3.2b 红色的点在 y 轴方向是比较高的,在 x 轴方向是比较低的,这就是一个鞍点。鞍点的叫法是因为其形状像马鞍。 鞍点的梯度为零,但它不是局部极小值。 我们把梯度为零的点统称为临界点(critical point)。 损失没有办法再下降,也许是因为收敛在了临界点,但不一定收敛在局部极小值,因为鞍点也是梯度为零的点。
在这里插入图片描述
局部较小值点和鞍点都会使得梯度为零,所以梯度为零的点,临界点不一定是局部极小值。

🎯如何判断临界值种类

判断一个临界点到底是局部极小值还是鞍点需要知道损失函数的形状。
虽然无法完整知道整个损失函数的样子,但是如果给定某一组参数,比如 θ ′ θ^{'} θ θ ′ θ^{'} θ 附近的 L ( θ ) L(θ) L(θ) 可近似为

L ( θ ) ≈ L ( θ ′ ) + ( θ − θ ′ ) T ∗ g + 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) . ( 3.1 ) L(θ) ≈ L(θ^{'})+(θ − θ^{′})^T*g +\frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) . (3.1) L(θ)L(θ)+(θθ)Tg+21(θθ)TH(θθ).(3.1)

式 (3.1) 是泰勒级数近似(Tayler series appoximation)。 其中,第一项 L ( θ ) L(θ) L(θ)′ 告诉我们,当 θ 跟 θ ′ θ^{′} θ很近的时候, L ( θ ) L(θ) L(θ) 应该跟还蛮靠近的;第二项 ( θ − θ ′ ) T ∗ g (θ − θ^{′})^T*g (θθ)Tg中,g 代表梯度,它是一个向量,可以弥补 L ( θ ′ ) L(θ^{′}) L(θ) L ( θ ) L(θ) L(θ) 之间的差距。有时候梯度 g 会写成 ∇ L ( θ ′ ) ∇L(θ^{′}) L(θ) g i g_i gi是向量 g 的第 i 个元素,就是 L 关于 θ 的第 i 个元素的微分,即
g i = ∂ L ( θ ′ ) ∂ θ i . ( 3.2 ) g_i =\frac{∂L(θ^{′})}{∂θ_i}.(3.2) gi=θiL(θ).(3.2)

光看 g 还是没有办法完整地描述 ,还要看式 (3.1) 的第三项 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) \frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) 21(θθ)TH(θθ)。第三项跟海森矩阵(Hessian matrix)H 有关
H 里面放的是 L 的二次微分,它第 i 行,第 j 列的值 H i j H_{ij} Hij 就是把 θ 的第 i 个元素对 L ( θ ′ ) L(θ^{′}) L(θ)作微分,再把 θ 的第 j 个元素对 ∂ L ( θ ′ ) ∂ θ i \frac{∂L(θ^{′})}{∂θ_i} θiL(θ)作微分后的结果,即

H i j = ∂ 2 L ( θ ′ ) ∂ θ i ∂ θ j . ( 3.3 ) H_{ij} =\frac{∂^2L(θ^{′})}{∂θ_i∂θ_j}. (3.3) Hij=θiθj2L(θ).(3.3)

在临界点,梯度 g 为零,因此 θ − θ′Tg 为零。所以在临界点的附近,损失函数可被近似为
L ( θ ) ≈ L ( θ ′ ) + 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) . ( 3.1 ) L(θ) ≈ L(θ^{'}) +\frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) . (3.1) L(θ)L(θ)+21(θθ)TH(θθ).(3.1)

我们可以根据 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) \frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) 21(θθ)TH(θθ)来判断在 θ ′ θ^{′} θ附近的误差表面(error surface) 到底长什么样子。
知道误差表面的“地貌”,我们就可以判断 L(θ′) 是局部极小值、局部极大值,还是鞍点。

上述我们通过一系列的转化把损失函数近似的写了出来,可以根据误差表面来判断临界点。

我们用向量 v 来表示 θ − θ ′ , ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) θ − θ^{′} ,(θ − θ^{′})^T * H(θ − θ^{′}) θθ,(θθ)TH(θθ)可改写为 v T H v v^TH_v vTHv,有如下三种情况。

  1. 如果对所有 v, v T H v > 0 v^TH_v> 0 vTHv>0 . 这意味着对任意 θ,L(θ) > L(θ′). 只要 θ 在 θ′ 附近,L(θ) 都大于 L(θ′). 这代表 L(θ′) 是附近的一个最低点,所以它是局部极小值。
  2. 如果对所有 v, v T H v < 0 v^TH_v< 0 vTHv<0 . 这意味着对任意 θ,L(θ) < L(θ′),θ′ 是附近最高的一个点,L(θ′) 是局部极大值。
  3. 如果对于 v, v T H v v^TH_v vTHv 有时候大于零,有时候小于零。 这意味着在 θ′ 附近,有时候L(θ) > L(θ′),有时候 L(θ) < L(θ′). 因此在 θ′ 附近,L(θ′) 既不是局部极大值,也不是局部极小值,而 是鞍点。

📌更简便的方法来判断 v T H v v^TH_v vTHv 的正负。

只要看 H的特征值。

  1. 若 H 的所有特征值都是正的H 为正定矩阵,则 v T H v v^TH_v vTHv > 0,临界点是局部极小值
  2. 若 H 的所有特征值都是负的H 为负定矩阵,则 v T H v v^TH_v vTHv < 0,临界点是局部极大值
  3. 若 H 的特征值有正有负,临界点是鞍点
    在这里插入图片描述

🎯H 怎么告诉我们怎么更新参数呢?

设 λ 为 H 的一个特征值 λ,u 为其对应的特征向量。对于我们的优化问题,可令 u = θ − θ ′ u =θ − θ^{′} u=θθ,则

u T H u = u T ( λ u ) = λ ∥ u ∥ 2 . u^{T}Hu = uT(λu) = λ∥u∥^{2}. uTHu=uT(λu)=λu2.

若 λ < 0,则 λ ∥ u ∥ 2 λ∥u∥^{2} λu2 < 0。所以 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) \frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) 21(θθ)TH(θθ) < 0。此时,L(θ) < L(θ′),且沿着 u 的方向更新 θ,损失就会变小。

只要 θ = θ′ + u,沿着特征向量 u 的方向去更新参数,损失就会变小,所以虽然临界点的梯度为零,如果我们是在一个鞍点,只要找出负的特征值,再找出这个特征值对应的特征向量。将其与 θ′ 相加,就可以找到一个损失更低的点。
我们其实只要顺着 u 的方向去更新参数,就可以找到一个比鞍点的损失还要更低的点。

🎯如何逃离鞍点

我们常常会遇到两种情况:损失仍然很高,却遇到了临界点而不再下降;或者损失降得很低,才遇到临界点。

在这里插入图片描述

在图 3.6 所示的例子中,最小值比例(=正特征值数量/总特征值数量)最大也不过处于 0.5 ~ 0.6 的范围,代表只有约一半的特征值为正,另一半的特征值为负,代表在所有的维度里面有约一半的路可以让损失上升,还有约一半的路可以让损失下降。

在这里插入图片描述

所以从经验上看起来,局部极小值并没有那么常见。 多数的时候,我们训练到一个梯度很小的地方,参数不再更新,往往只是遇到了鞍点。

🚩 Task1.2

🎯什么是批量和动量

实际计算梯度的过程中,我们将数据分成多个批次(batch),每个批次大小为B,即包含B个数据样本。

每次更新参数时,从批次中选取数据计算损失和梯度,并更新参数。完成一次遍历所有批次的过程称为一个回合(epoch)。

为了增加样本的随机性,我们会在划分批次时进行随机打乱(shuffle)。常见的一种做法是在每个回合开始之前重新划分批次,使得每个回合的批次数据都不同。

在这里插入图片描述

📌批量大小对梯度下降法的影响

在这里插入图片描述

🎈批量梯度下降法(Batch Gradient Descent,BGD)

使用全批量(fullbatch)的数据来更新参数的方法即批量梯度下降法(Batch Gradient Descent,BGD)。
此时模型必须把 20 笔训练数据都看完,才能够计算损失和梯度,参数才能够更新一次。

🎈随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法

批量大小等于 1,此时使用的方法即随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法。
批量大小等于 1 意味着只要取出一笔数据即可计算损失、更新一次参数。
如果总共有 20 笔数据,那么在每一个回合里面,参数会更新 20 次。
用一笔数据算出来的损失相对带有更多噪声,因此其更新的方向如图 3.8 所示,是曲曲折折的 。

🎈批量大小与计算时间的关系

在这里插入图片描述

当批量大小增加到10000,甚至增加到 60000 的时候,GPU 计算梯度并更新参数所耗费的时间确实随着批量大小的增加而逐渐增长。

大的批量更新比较稳定,小的批量的梯度的方向是比较有噪声的(noisy)。

在这里插入图片描述

同一个模型,大的批量大小往往在训练的时候,结果比较差。 这个是优化的问题,大的批量大小优化可能会有问题,小的批量大小优化的结果反而是比较好的。

在这里插入图片描述

一个可能的解释如图 3.12 所示,批量梯度下降在更新参数的时候,沿着一个损失函数来更新参数,走到一个局部最小值或鞍点显然就停下来了。
梯度是零,如果不看海森矩阵,梯度下降就无法再更新参数了 。
但小批量梯度下降法(mini-batch gradient descent)每次是挑一个批量计算损失,所以每一次更新参数的时候所使用的损失函数是有差异的。
这种有噪声的更新方式反而对训练其实是有帮助的。其实小的批量也对测试有帮助。

在模型训练的适合小批量梯度下降法的噪声反而使得梯度不容易落在临界点,而且更方便测试。

大的批量跟小的批量的训练准确率(accuracy) 差不多,但就算是在训练的时候结果差不多,测试的时候,大的批量比小的批量差,代表过拟合。

在这里插入图片描述

大的批量大小会让我们倾向于走到“峡谷”里面,而小的批量大小倾向于让我们走到“盆地”里面。 小的批量有很多的损失,其更新方向比较随机,其每次更新的方向都不太一样。即使“峡谷”非常窄,它也可以跳出去,之后如果有一个非常宽的“盆地”,它才会停下来。

在这里插入图片描述

而小的批量更新的方向比较有噪声的,大的批量更新的方向比较稳定。但是有噪声的更新方向反而在优化的时候有优势,而且在测试的时候也会有优势。
所以大的批量跟小的批量各有优缺点,批量大小是需要去调整的超参数。

🎯什么是动量法

动量法(momentum method)是另外一个可以对抗鞍点或局部最小值的方法。

在这里插入图片描述

但是在物理的世界里,一个球如果从高处滚下来,就算滚到鞍点或鞍点,因为惯性的关系它还是会继续往前走。因此在物理的世界里面,一个球从高处滚下来的时候,它并不一定会被鞍点或局部最小值卡住,如果将其应用到梯度下降中,这就是动量。

📌对比一般的梯度下降法和动量法

在这里插入图片描述

在这里插入图片描述

引入动量后,每次在移动参数的时候,不是只往梯度的反方向来移动参数,而是根据梯度的反方向加上前一步移动的方向决定移动方向。

图 3.16 中红色虚线方向是梯度的反方向,蓝色虚线方向是前一次更新的方向,蓝色实线的方向是下一步要移动的方向。 把前一步指示的方向跟梯度指示的方向相加就是下一步的移动方向。

动量法引入了动量的概念,通过累积之前的梯度信息来加速学习过程。动量法在更新参数时不仅考虑当前的梯度,还考虑了之前累积的梯度。

🎈动量法的主要优点

可以加速收敛速度,特别是在目标函数存在高度非均向性的情况下。
可以帮助跳出局部最小值,并具有一定的平滑效果。

🎈动量法也存在一些缺点。

动量法引入了额外的超参数,需要人工调整。
如果动量系数设置过大,可能会导致震荡;如果设置过小,则可能会导致收敛速度变慢。

在这里插入图片描述

动量的简单例子如图 3.17 所示。红色表示负梯度方向,蓝色虚线表示前一步的方向,蓝色实线表示真实的移动量。 一开始没有前一次更新的方向,完全按照梯度给指示往右移动参数。负梯度方向跟前一步移动的方向加起来,得到往右走的方向。一般梯度下降走到一个局部最小值或鞍点时,就被困住了。但有动量还是有办法继续走下去,因为动量不是只看梯度,还看前一步的方向。即使梯度方向往左走,但如果前一步的影响力比梯度要大,球还是有可能继续往右走,甚至翻过一个小丘,也许可以走到更好的局部最小值,这就是动量有可能带来的好处 。

🚩Task 2.1

🎯什么是自适应学习率

临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。

在这里插入图片描述

图 3.18中的横坐标代表参数更新的次数,竖坐标表示损失

一般在训练一个网络的时候,损失原来很大,随着参数不断的更新,损失会越来越小,最后就卡住了,损失不再下降。

到临界点损失不在下降。
在这里插入图片描述

我们走到临界点的时候,意味着梯度非常小,但损失不再下降的时候,梯度并没有真的变得很小,图 3.19 给出了示例。

图 3.19 中横轴是迭代次数,竖轴是梯度的范数(norm),即梯度这个向量的长度。
随着迭代次数增多,虽然损失不再下降,但是梯度的范数并没有真的变得很小。

范数(norm)是 梯度这个向量的长度。
在这里插入图片描述

图 3.20是误差表面,梯度在山谷的两个谷壁间,不断地来回“震荡”,这个时候损失不会再下降,它不是真的卡到了临界点,卡到了鞍点或局部最小值
在局部最小值或鞍点,只是单纯的损失无法再下降。
但它的梯度仍然很大,只是损失不一定再减小了

我们可以试着把学习率设小一点

在这里插入图片描述

调学习率从 10−2 调到 10−7 的结果如图 3.22(b)所示,参数不再“震荡”了。参数会滑到山谷底后左转,但是这个训练永远走不到终点,因为学习率已经太小了

AB段的坡度很陡,梯度的值很大,还能够前进一点。左拐以后,BC 段的坡度已经非常平坦了,这种小的学习率无法再让训练前进。
事实上在 BC 段有 10 万个点(10 万次更新),但都无法靠近局部最小值,所以显然就算是一个凸的误差表面,梯度下降也很难训练

在梯度下降里面,所有的参数都是设同样的学习率,这显然是不够的,应该要为每一个参数定制化学习率,即引入自适应学习率(adaptive learning rate) 的方法,给每一个参数不同的学习率。

🎯AdaGrad

AdaGrad(Adaptive Gradient)典型的自适应学习率方法,其能够根据梯度大小自动调整学习率。 AdaGrad可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大

📌参数更新和学习率调整

🎈基本参数更新公式
  • 在第 t t t个迭代中,参数 θ i \theta^i θi的更新公式为:
    θ t + 1 i ← θ t i − η g t i ( 3.14 ) \theta_{t+1}^i \leftarrow \theta_t^i - \eta g_t^i \quad (3.14) θt+1iθtiηgti(3.14)
    其中 g t i g_t^i gti是在 θ = θ t \theta = \theta_t θ=θt时,参数 θ i \theta^i θi对损失 L L L的微分。
🎈梯度计算
  • 梯度 g t i g_t^i gti的计算公式为:
    g t i = ∂ L ∂ θ i ∣ θ = θ t ( 3.15 ) g_t^i = \left.\frac{\partial L}{\partial \theta^i}\right|_{\theta=\theta_t} \quad (3.15) gti=θiL θ=θt(3.15)
🎈定制化学习率
  • 将学习率 η \eta η调整为参数相关的学习率 η σ t i \frac{\eta}{\sigma_t^i} σtiη
    θ t + 1 i ← θ t i − η σ t i g t i ( 3.16 ) \theta_{t+1}^i \leftarrow \theta_t^i - \frac{\eta}{\sigma_t^i} g_t^i \quad (3.16) θt+1iθtiσtiηgti(3.16)
    其中 σ t i \sigma_t^i σti与参数 i i i和迭代 t t t相关。
🎈梯度的均方根
  • 参数的更新过程,其中 σ 0 i \sigma_0^i σ0i的计算为:
    σ 0 i = ( g 0 i ) 2 = ∣ g 0 i ∣ ( 3.18 ) \sigma_0^i = \sqrt{\left(g_0^i\right)^2} = \left|g_0^i\right| \quad (3.18) σ0i=(g0i)2 = g0i (3.18)
🎈参数更新的迭代过程
  • 第二次参数更新:
    θ 2 i ← θ 1 i − η σ 1 i g 1 i ( 3.19 ) \theta_2^i \leftarrow \theta_1^i - \frac{\eta}{\sigma_1^i} g_1^i \quad (3.19) θ2iθ1iσ1iηg1i(3.19)
    其中 σ 1 i \sigma_1^i σ1i是过去所有计算出来的梯度的平方的平均再开根号。
🎈迭代更新公式
  • t + 1 t+1 t+1次更新参数的公式为:
    θ t + 1 i ← θ t i − η σ t i g t i σ t i = 1 t + 1 ∑ i = 0 t ( g t i ) 2 ( 3.22 ) \theta_{t+1}^i \leftarrow \theta_t^i - \frac{\eta}{\sigma_t^i} g_t^i \quad \sigma_t^i = \sqrt{\frac{1}{t+1}\sum_{i=0}^t\left(g_t^i\right)^2} \quad (3.22) θt+1iθtiσtiηgtiσti=t+11i=0t(gti)2 (3.22)
🎈参数更新的动态调整
  • 根据梯度的不同,每一个参数的梯度的不同,自动调整学习率的大小,使得参数更新更加有效。
🎈参数更新的可视化
  • 图 3.24 展示了两个参数 θ 1 \theta^1 θ1 θ 2 \theta^2 θ2的更新情况,其中 θ 1 \theta^1 θ1坡度小, θ 2 \theta^2 θ2坡度大。根据公式 (3.22),不同的梯度大小导致不同的学习率调整,从而影响参数更新的步伐。

在这里插入图片描述

📌AdaGrad算法的问题

在这里插入图片描述
当模型接近最优点时,由于在某些方向上梯度非常小,AdaGrad算法会导致学习率变得非常大,从而可能出现“爆炸”现象,使得模型突然偏离最优路径。累积的 σ t i \sigma_t^i σti在梯度较小的方向上会变得非常大,导致学习步伐过大。

🎯RMSProp

RMSprop 是一种自适应学习率的优化算法,由 Geoffrey Hinton 在 Coursera 深度学习课程中提出。

📌算法的步骤

🎈初始梯度的均方根
  • RMSprop 的第一步与 Adagrad 相同,计算初始梯度的绝对值作为均方根
    σ 0 i = ( g 0 i ) 2 = ∣ g 0 i ∣ ( 3.23 ) \sigma_0^i = \sqrt{\left(g_0^i\right)^2} = \left|g_0^i\right| \quad (3.23) σ0i=(g0i)2 = g0i (3.23)

📌参数更新公式

  • 第二次更新参数的公式,引入超参数 α \alpha α来调整梯度的重要性
    θ 2 i ← θ 1 i − η σ 1 i g 1 i σ 1 i = α ( σ 0 i ) 2 + ( 1 − α ) ( g 1 i ) 2 ( 3.24 ) \theta_2^i \leftarrow \theta_1^i - \frac{\eta}{\sigma_1^i} g_1^i \quad \sigma_1^i = \sqrt{\alpha \left(\sigma_0^i\right)^2 + (1-\alpha) \left(g_1^i\right)^2} \quad (3.24) θ2iθ1iσ1iηg1iσ1i=α(σ0i)2+(1α)(g1i)2 (3.24)
    其中 0 < α < 1 0 < \alpha < 1 0<α<1
🎈迭代更新过程
  • 后续的参数更新过程,通过递归方式计算 σ t i \sigma_t^i σti来动态调整学习率
    θ 3 i ← θ 2 i − η σ 2 i g 2 i σ 2 i = α ( σ 1 i ) 2 + ( 1 − α ) ( g 2 i ) 2 ⋮ θ t + 1 i ← θ t i − η σ t i g t i σ t i = α ( σ t − 1 i ) 2 + ( 1 − α ) ( g t i ) 2 \begin{aligned} \theta_3^i &\leftarrow \theta_2^i - \frac{\eta}{\sigma_2^i} g_2^i \quad \sigma_2^i = \sqrt{\alpha \left(\sigma_1^i\right)^2 + (1-\alpha) \left(g_2^i\right)^2} \\ \vdots \\ \theta_{t+1}^i &\leftarrow \theta_t^i - \frac{\eta}{\sigma_t^i} g_t^i \quad \sigma_t^i = \sqrt{\alpha \left(\sigma_{t-1}^i\right)^2 + (1-\alpha) \left(g_t^i\right)^2} \end{aligned} θ3iθt+1iθ2iσ2iηg2iσ2i=α(σ1i)2+(1α)(g2i)2 θtiσtiηgtiσti=α(σt1i)2+(1α)(gti)2
    在这里插入图片描述

📌算法特性

  • RMSprop 通过超参数 α \alpha α来决定当前梯度 g t i g_t^i gti相较于之前梯度的重要性。这使得算法能够快速响应梯度的变化,实现更灵活的参数更新。
  • 在误差表面的不同区域,例如从 A 到 B 的平坦区域,RMSprop 允许较大的学习步伐;而在 B 到 C 的陡峭区域,通过增加 α \alpha α值,可以快速减小学习步伐,实现“踩刹车”的效果。

在这里插入图片描述

🎯Adam

最常用的优化的策略或者优化器(optimizer) 是Adam(Adaptive moment estimation)
Adam 可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,并且能够自适应调整学习率。PyTorch 里面已经写好了 Adam 优化器。

🎯学习率调度

学习率调度是一种策略,它使得学习率 η \eta η随着时间或训练的迭代次数逐渐减小学习率衰减(learning rate decay)或学习率退火(learning rate annealing)是学习率调度中的一种常见策略

📌学习率衰减

通过引入学习率衰减,可以避免在训练后期由于学习率过大导致的不稳定现象。学习率调度允许模型在训练初期快速收敛,在训练后期则通过减小学习率,使模型能够稳定地接近最优点
在这里插入图片描述

📌学习率调度的公式

引入学习率调度后的参数更新公式为:
θ t + 1 i ← θ t i − η t σ t i g t i ( 3.26 ) \theta_{t+1}^i \leftarrow \theta_t^i - \frac{\eta_t}{\sigma_t^i} g_t^i \quad (3.26) θt+1iθtiσtiηtgti(3.26)
其中 η t \eta_t ηt是随时间变化的学习率。

📌预热

除了学习率下降以外,还有另外一个经典的学习率调度的方式———预热。

预热的方法是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。
除了残差网络, BERT 和 Transformer 的训练也都使用了预

在这里插入图片描述

📌RAdam

RAdam的应用场景非常广泛,尤其适用于那些对学习率预热敏感的模型和任务
RAdam 是 Ranger 优化器的重要组成部分。Ranger 优化器结合了 RAdam 和 LookAhead,在深度学习中表现出色,能够提升模型的能力和收敛速度。

🎈无需预热

RAdam 无需预热,就能避免模型收敛至“局部最优解”。

🎈优于手动预热

RAdam 自动提供方差缩减,在各种预热长度和各种学习率下都优于传统的手动预热调整。

🎈RAdam与Adam性能对比
性能指标RAdamAdam
收敛速度有望为几乎所有 AI 应用提供更好的收敛速度。在前期的表现一般不好,前期数据少,很难总结出一个靠谱的初始动量,也更容易陷入局部最优,所以一般需要几个 batch 的预热阶段让自适应动量更靠谱。
训练稳定性对不同的学习速度具有鲁棒性,同时仍具有更好的训练稳定性(对选择的学习率不那么敏感)。在没有预热的情况下使用时,在初始迭代期间,梯度具有较大的方差。这种较大的差异会导致最小值的过冲,从而导致较差的最优值。
准确性和泛化性可立即提高 AI 准确度和泛化性。存在很多问题,效果甚至没有简单的 SGD+Momentum 好。
以下是对您提供的文件内容的总结,使用Markdown格式:

🎯学习率调度与优化器变形

📌动量与均方根的计算差异

  • 动量 m t i m_{t}^{i} mti考虑了过去所有梯度的方向和大小,通过将所有梯度直接相加来计算,因此保留了梯度的方向信息。
  • 均方根 σ t i \sigma_{t}^{i} σti:仅考虑了梯度的大小,通过计算梯度的平方和的平方根来得出,忽略了梯度的方向

尽管 m t i m_{t}^{i} mti σ t i \sigma_{t}^{i} σti 都使用了过去所有的梯度,但由于计算方式的不同,它们并不会相互抵消

📌优化总结

  • 从最基本的梯度下降法演化至包含动量的优化版本,如式(3.27)所示:
    θ t + 1 i ← θ t i − η t σ t i m t i ( 3.27 ) \theta_{t+1}^i \leftarrow \theta_t^i - \frac{\eta_t}{\sigma_t^i} m_t^i \qquad (3.27) θt+1iθtiσtiηtmti(3.27)
    其中, m t i m_t^i mti 表示动量。

  • 动量 m t i m_t^i mti 不仅考虑了某一时刻的梯度方向,而是对所有梯度方向进行了加权总和,作为参数更新的方向

  • 更新步伐的大小 m t i σ t i \frac{m_t^i}{\sigma_t^i} σtimti 决定。

🚩Task 2.2

🎯什么是分类

分类与回归是深度学习最常见的两种问题

🎯回归与分类的区别和联系

回归是输入一个向量 x,输出 yˆ,我们希望 yˆ 跟某一个标签 y 越接近越好, y 是要学习的目标。而分类可当作回归来看,输入 x 后,输出仍然是一个标量 yˆ,要让它跟正确答案的那个类越接近越好。

📌回归

  • 回归任务涉及输入一个向量 x x x 并预测一个连续值 y y y
  • 目标是使得预测值 y y y 尽可能接近真实标签值。

📌分类

  • 分类可以视为一种特殊的回归问题,其中输入 x x x 后,输出是一个标量 y y y
  • 目的是让输出 y y y 与正确类别的编号尽可能接近。

🎯使用数字表示类别会出现的问题

引出独热编码

直接使用数字来表示类别可能会导致问题,尤其是当类别之间存在某种关系时。

例如,根据身高和体重预测年级时,一年级和二年级在逻辑上比一年级和三年级更接近。

🎯什么是独热编码(One-Hot Encoding)

当类别之间没有固有的顺序或数值关系时,使用独热编码来表示类别是一种常见做法。
独热编码通过为每个类别分配一个唯一的二进制向量,避免了类别之间不恰当的数值关系。
在分类问题中尤其有用,因为它允许模型更准确地学习类别之间的关系。

在这里插入图片描述

图3.30展示了如何使用数字和独热编码来表示类别。类别编号(如1、2、3)可能暗示它们之间的某种关系,而独热编码则不包含这样的预设关系。

如果用独热向量计算距离的话,类两两之间的距离都是一样的
以下是对您提供的文件内容的总结:

📌多输出神经网络结构

在这里插入图片描述

计算 y ^ 1 \hat{y}_1 y^1:
将输入特征 x 1 x_1 x1 与权重相乘,加上偏置,得到 a 1 a_1 a1
a 1 a_1 a1 与另一组权重相乘,加上偏置,得到 y ^ 1 \hat{y}_1 y^1

计算 y ^ 2 \hat{y}_2 y^2:
将输入特征 x 2 x_2 x2 与权重相乘,加上偏置,得到 a 2 a_2 a2
a 2 a_2 a2 与另一组权重相乘,加上偏置,得到 y ^ 2 \hat{y}_2 y^2

计算 y ^ 3 \hat{y}_3 y^3:
将输入特征 x 3 x_3 x3 与权重相乘,加上偏置,得到 a 3 a_3 a3
a 3 a_3 a3 与另一组权重相乘,加上偏置,得到 y ^ 3 \hat{y}_3 y^3

每个输出 y ^ \hat{y} y^ 是通过对输入特征的不同线性组合并加上偏置来计算的。使得这些输出 y ^ 1 , y ^ 2 , y ^ 3 \hat{y}_1, \hat{y}_2, \hat{y}_3 y^1,y^2,y^3 尽可能接近它们各自的目标值。
偏置使得这些输出尽可能接近它们的目标值,以实现最佳的预测性能。

🎯带有 softmax 的分类

按照上述的设定,分类实际过程是:输入 x,乘上 W,加上 b,通过激活函数 σ,乘上W ′,再加上 b′ 得到向量 yˆ。
但实际做分类的时候,往往会把 yˆ 通过 softmax 函数得到 y′,才去计算 y′ 跟 yˆ 之间的距离。

在这里插入图片描述

📌为什么分类过程中要加上softmax函数

在这里插入图片描述

softmax 的计算如式 (3.28) 所示,先把所有的 y 取一个指数(负数取指数后也会变成正的),再对其做归一化(除掉所有 y 的指数值的和)得到 y′。

📌Softmax 函数及其特性

在这里插入图片描述
在考虑三个类别的情况下,Softmax 函数的应用(图3.33)

Softmax 函数 用于将一个向量或一组实数转换成另一个向量,其中转换后的向量元素值在 0 到 1 之间,并且所有元素的和为 1。
公式为:
y i ′ = exp ⁡ ( y i ) ∑ j exp ⁡ ( y i ) ( 3.28 ) y_i^{\prime} = \frac{\exp\left(y_i\right)}{\sum_j \exp\left(y_i\right)} \qquad (3.28) yi=jexp(yi)exp(yi)(3.28)
其中 y i y_i yi 是输入向量中的第 i i i 个元素, y i ′ y_i^{\prime} yi 是输出向量中的第 i i i 个元素。

🎈特性
  1. Softmax 函数除了进行归一化,使得输出值在 0 到 1 之间并总和为 1 之外,还有将大数值与小数值的差距进一步拉大的效果
  2. 输出值 y i ′ y_i^{\prime} yi 满足 1 > y i ′ > 0 1 > y_i^{\prime} > 0 1>yi>0,并且所有输出值之和为 1。

📌Sigmoid 函数与 Softmax 函数的比较

🎈两分类问题

在处理两个类别的问题时,通常直接使用 Sigmoid 函数 而不是 Softmax。
当只有两个类别时,Sigmoid 函数和 Softmax 函数是等价的

🎈多分类问题

在涉及三个或更多类别的情况下,Softmax 函数是首选,因为它可以处理多类别的输出,并保证输出值的总和为 1。

🎯什么是分类损失

📌损失函数

在分类问题中,损失函数用于衡量模型预测值 y ′ y' y 与实际标签 y y y 之间的差异。

📌均方误差 (MSE)

公式
e = ∑ i ( y i − y i ′ ) 2 ( 3.29 ) e = \sum_i \left(y_i - y_i'\right)^2 \quad (3.29) e=i(yiyi)2(3.29)
计算预测值与实际值之间差的平方和。

📌交叉熵 (Cross-Entropy)

公式
e = − ∑ i y i ln ⁡ y i ′ ( 3.30 ) e = -\sum_i y_i \ln y_i' \quad (3.30) e=iyilnyi(3.30)
衡量实际标签与通过 softmax 转换后的预测值之间的差异。

优点:当预测值与实际值相同时,交叉熵最小化,此时均方误差也最小。

📌使用 softmax 的好处

如图 3.35 所示,有一个三类的分类,网络先输出 y1、 y2 和 y3,在通过 softmax 以后,产生 y1′ 、 y2′ 和 y3′ 。
假设正确答案是 [1, 0, 0]T,要计算 [1, 0, 0]T 跟 y1′ 、 y2′ 和 y3′ 之间的距离 e, e 可以是均方误差或交叉熵。
假设 y1 的变化是从-10 到 10, y2 的变化也是从-10 到 10, y3 就固定设成-1000。因为 y3 的值很小,通过 softmax 以后, y3′ 非常趋近于 0,它跟正确答案非常接近,且它对结果影响很少。

在这里插入图片描述
Softmax 将网络输出转换为概率分布,使得每个类别的预测值在 0 到 1 之间,并且总和为 1。

🎯损失函数的选择对优化的影响

📌交叉熵

  1. 优点:在分类问题中,交叉熵比均方误差更常用,因为它在优化过程中表现更好,尤其是在参数初始化远离最优值时。
  2. 优化难度:使用交叉熵时,即使在损失较大的区域,梯度仍然存在,使得模型可以通过梯度下降法有效地优化。

📌均方误差

  1. 缺点:在损失较大的区域,均方误差可能导致梯度非常小,使得梯度下降法难以优化。
  2. 优化难度:如果没有好的优化器,使用均方误差可能导致模型训练困难。

在这里插入图片描述

图3.35比较了均方误差和交叉熵在损失表面上的差异,以及它们对优化过程的影响。

📌总结

  1. 在分类问题中,交叉熵是首选的损失函数,因为它在优化过程中提供了更好的梯度信息。
  2. 均方误差可能在某些情况下导致优化困难,尤其是在模型初始化远离最优值时。
  3. 选择合适的损失函数对模型的训练效果和优化效率至关重要。

🚩Task 2.3

(实践任务):HW3(CNN)

🎯一键运行Notebook

通过在卷积神经网络(CNN)模型的验证集上实现t-SNE(t分布随机邻域嵌入),可视化学习到的视觉表示,包括顶层和中间层的输出。
绘制特定类别的t-SNE可视化图

🎯实验结果

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值