李宏毅机器学习-网络设计的技巧

局部极小值(Local Minima)与鞍点(Saddle Point)

Critical Point:梯度(gradient)为0的点

  • local minima:局部极小值
    如果卡在local minima,那可能就没有路可以走了。
  • saddle point:鞍点
    如果卡在saddle point,saddle point旁边还是有路可以走的。
    在这里插入图片描述

判断

如何判断?

  • 考察 θ \theta θ附近Loss的梯度→泰勒展开→海塞矩阵 H H H

在这里插入图片描述

  • 第一项中, L ( θ ′ ) L(\theta') L(θ),当 θ \theta θ θ ′ \theta' θ很近的时候, L L L很靠近。
  • 第二项中, g g g代表梯度(一阶导数),可以弥补 L ( θ ′ ) L(\theta') L(θ) L ( θ ) L(\theta) L(θ)之间的差距。 g i g_i gi表示 g g g的第 i i i个component,就是 θ θ θ的第 i i i个component对 L L L的微分。
  • 第三项中, H H H表示海塞矩阵,是 L L L的二阶导数。

在Critical point附近时:第二项为0,根据第三项来判断→则只需考察H的特征值
在这里插入图片描述

  • 如果所有eigen value(特征值)都是正的,H是positive definite(正定矩阵),此时就是local minima
  • 如果所有eigen value都是负的,H是negative definite,此时是local maxima
  • 如果eigen value有正有负,那就代表是saddle point

在这里插入图片描述
例:
在这里插入图片描述
如果走到鞍点,可以利用H的特征向量确定参数的更新方向。
在这里插入图片描述

  • 令特征值小于0,得到对应的特征向量 u u u,在 θ ′ \theta' θ的位置加上 u u u,沿着 u u u的方向做update得到 θ \theta θ,就可以让loss变小。

在这里插入图片描述

  • Local Minima比Saddle Point少

在这里插入图片描述
Loss在一个维度很高的空间中时,往往只会遇到鞍点而几乎不会遇到局部极小值点⇒从上图可以看出,正特征值的数目最多只占所有特征值的60%,这就说明剩余40%-50%的维度都仍然“有路可走”。


批次(Batch)与动量(Momentum)

Optimization with Batch

  • 根据计算梯度的样本个数,可分为批量梯度下降(全部样本,batch size=N)小批量梯度下降(分为batch个数的样本)随机梯度下降(单个样本,batch size=1)

  • 所有的 batch 经过一遍,叫做一个epoch

在这里插入图片描述

Small Batch v.s. Large Batch

在这里插入图片描述

  • 左边蓄力时间长,但是精准有效
  • 右边冷却时间短,但是比较noisy(其实noisy的gradient反而可以帮助 training)

在这里插入图片描述
如果考虑“并行计算”,large batch size的梯度下降并不一定时间比较长。
在这里插入图片描述
现象

  • batch size从1到1000,each update所需要的时间几乎是一样的。
  • 增加到 10000,乃至增加到60000的时候,一个batch(一次update)所要耗费的时间,确实随着batch size的增加而逐渐增长。

原因

  • 有GPU可以做并行运算。
  • GPU并行运算的能力还是有极限的,当batch size非常非常巨大的时候,GPU在跑完一个 batch计算出gradient所花费的时间,还是会随着batch size的增加而逐渐增长。
对总时间的影响

在这里插入图片描述

  • for one update:small batch size更快
  • for one epoch:large batch size更快(因为有GPU可以做并行运算)
small batch size的优势
small batch size优势1:在更新参数时会有noisy⇒有利于训练

在这里插入图片描述

  • 不同的batch求得的Loss略有差异,有时候可以避免局部极小值“卡住”
small batch size优势2:可以避免Overfitting⇒有利于测试(Testing)

在这里插入图片描述
对于一个Flat Minima来说,在 Training和Testing上面的结果不会差太多;对于一个Sharp Minima来说,一差就可以天差地远。
large batch size每次顺着规定update,容易陷入Sharp Minima。
small batch size由于每次update的方向可能不太一样,比较容易跳出Sharp Minima。
在这里插入图片描述

Batch总结
  • batch size是一个需要调整的参数,它会影响训练速度与优化效果。

在这里插入图片描述

Optimization with Momentum

在这里插入图片描述

Vanilla Gradient Descent(普通梯度下降)
  • 只考虑梯度的方向,向反方向移动。

在这里插入图片描述

Gradient Descent+Momentum(考虑动量)
  • 综合梯度+上一步的方向。

所谓的Momentum,update 的方向不是只考虑现在的gradient,而是考虑过去所有gradient的总和
在这里插入图片描述
在这里插入图片描述
到达Critical Point时,“惯性”会推着小球继续运动。
在这里插入图片描述


自动调整学习速率(Learning Rate)

  • 问题1training stuck ≠ small gradient⇒Loss不再下降时,未必说明此时到达Critical Point,梯度可能还很大。

在这里插入图片描述

  • 问题2:如果使用“固定的”学习率,即使是在“凸面体”的优化,都会让优化的过程非常困难⇒需要客制化“学习率” ⇒不同的参数需要不同的学习率。
    • 较大的学习率:Loss在山谷的两端震荡而不会下降。
    • 较小的学习率:梯度较小时几乎难以移动。

在这里插入图片描述

客制化“学习率”

在这里插入图片描述
根据参数此时的实际情况,调整 σ i t \sigma^t_i σit的大小,实现对参数 θ i \theta_i θi的更新。

  • 基本原则
    • 某一个方向上gradient的值很小,非常平坦⇒learning rate调一点,
    • 某一个方向上非常陡峭,坡度很大⇒learning rate可以设得一点
  • 求取 σ \sigma σ的方式:Root Mean Square(均方根)
Adagrad(自适应学习率梯度下降)
  • 考虑之前所有的梯度大小⇒对本次及之前计算出的所有梯度求均方根,然后每个参数的学习率都除上该均方根。

普通梯度下降为:
g t = ∂ L ( θ t ) ∂ w g^t =\frac{\partial L(\theta^t)}{\partial w} gt=wL(θt)
η t = η t t + 1 \eta^t =\frac{\eta^t}{\sqrt{t+1}} ηt=t+1 ηt
w t + 1 ← w t − η t g t w^{t+1} \leftarrow w^t -η^tg^t wt+1wtηtgt

  • w w w 是一个参数

Adagrad可以做的更好:
w t + 1 ← w t − η t σ t g t w^{t+1} \leftarrow w^t -\frac{η^t}{\sigma^t}g^t wt+1wtσtηtgt

  • σ t \sigma^t σt :对本次及之前所有梯度求得的均方根。对于每个参数都是不一样的。
    在这里插入图片描述
    在这里插入图片描述
  • 矛盾:在 Adagrad 中,当梯度越大的时候,步伐应该越大,但下面分母又导致当梯度越大的时候,步伐会越小。
  • 缺陷:不能“实时”考虑梯度的变化情况。
RMSProp
  • 调整当前梯度历史梯度权重

添加参数 α \alpha α

  • α设很小趋近于0,就代表这一步算出的 g i g_i gi相较于之前所算出来的gradient而言比较重要。
  • α设很大趋近于1,就代表现在算出来的 g i g_i gi比较不重要,之前算出来的gradient比较重要。
    在这里插入图片描述
最常用的策略:Adam=RMSProp+Momentum
Learning Rate Scheduling⇒让Learning Rate与 “训练时间”有关
  • Learning Rate Decay:随着时间不断进行,随着参数不断update, η η η越来越小
  • 黑科技:Warm Up⇒让learning rate先变大后变小。
    在这里插入图片描述

解释 σ \sigma σ指示某一个方向它到底有多陡/多平滑,这个统计的结果,要看足够多的数据以后才精准,所以一开始我们的统计是不精准的。一开始learning rate比较小,是让它探索收集一些有关error surface的情报,在这一阶段使用较小的learning rate,限制参数不会走得离初始的地方太远。等到 σ \sigma σ统计得比较精准以后再让learning rate慢慢爬升。

  • 补充:RAdam

将Error Surface“铲平”⇒Batch Normalization(批次标准化)

在这里插入图片描述

  • 不同的参数发生变化,引起Loss变化的程度不同。

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

  • x 1 x_1 x1的值很小时,当参数 w 1 w_1 w1有一个很小的变化,对 y y y的影响很小,从而对Loss的影响也比较小。
  • x 2 x_2 x2的值很大时,当参数 w 2 w_2 w2有一个同样大小的变化,对 y y y的影响则大得多,从而对Loss的影响也比较大。
标准化:类似于标准正态分布过程,将这组数据处理成均值为0,方差为1。。

在这里插入图片描述
x i r ~ = x i r − m i σ i \tilde{x^r_i} = \frac{x^r_i-m_i}{\sigma_i} xir~=σixirmi

  • 在深度学习中,每一层都需要一次Normalization。

在这里插入图片描述

x ~ \tilde{x} x~经过 W 1 W_1 W1矩阵后, a a a z z z数值的各维度分布仍然有很大的差异,要train第二层的参数 W 2 W_2 W2也会有困难。所以需要对 a a a或者 z z z进行Normalization。

  • 如果选择的是 Sigmoid,那可能比较推荐对 z z z做Feature Normalization,因为Sigmoid在0附近斜率比较大,所以如果你对 z z z做Feature Normalization,把所有的值都挪到0附近算gradient的时候,算出来的值会比较大。
  • 通常而言,Normalization放在activation function之前或之后都是可以的。
    在这里插入图片描述
Batch Normalization:实际上做Normalization时,只能考虑有限数量的数据⇒考虑一个Batch内的数据⇒近似整个数据集。
  • Batch Normalization适用于batch size比较大时。其中data可以认为足以表示整个数据集的分布,从而,将对整个数据集做Feature Normalization这件事情,改成只在一个batch中做Feature Normalization作为近似。

  • “还原”引入向量 γ , β \gamma,\beta γβ,将原本被标准化到 m = 0 , σ = 1 m=0,\sigma=1 m=0σ=1的各维度数据恢复到某一分布。
    在这里插入图片描述

  • 做Normalization以后 z ~ \tilde{z} z~平均就一定是 0,可以视作是给network一些限制,也许这个限制会带来什么负面的影响,因而进行“还原”操作,让模型自己学习 γ \gamma γ β \beta β

  • 训练时:初始将 γ \gamma γ设为全为1的向量, β \beta β设为全为0的向量。在一开始训练的时候,让每一个dimension的分布比较接近。训练够长的一段时间后,已经找到一个比较好的error surface,走到一个比较好的地方以后,再把 γ \gamma γ β \beta β 慢慢加进去。

问题:Testing开始的时候没有足够的数据,无法得到 μ \mu μ σ \sigma σ,也就无法进行Normalization。
在这里插入图片描述
解决:在training的时候,每一个 batch 计算出来的 μ \mu μ σ \sigma σ 都拿出来算moving average,最后以training得到的 μ ˉ \bar{\mu} μˉ σ ˉ \bar{\sigma} σˉ代替testing中的 μ \mu μ σ \sigma σ去进行Normalization


Loss of Classification

Classification as Regression

在这里插入图片描述
Regression就是输入一个向量,然后输出一个数值,我们希望输出的数值跟对应的label,也就是我们要学习的目标,越接近越好。

  • 有一个可能,我们其实可以把Classification当作是Regression来看
  • 这个方法只适合定序数据,即数字可以表示个体在有序状态中所处的位置,比如此时的假设意味着class1跟class2比较像,跟class3比较不像。但不适合定类数据,即数字仅用于区分类别,没有序次关系。

Class as one-hot vector

  • 在做分类问题的时候,比较常见的做法是把Class用one-hot vector来表示。

在这里插入图片描述

  • 其中,任何两个分类的距离都相同

产生多个数值

  • 怎么产生多个数值呢?⇒把本来output一个数值的方法重复多次。

在这里插入图片描述

Classification with softmax

  • 我们的目标只有0和1,而 y y y有任何值,我们就使用softmax先把它Normalize到0到1之间,这样才好跟label计算相似度。

在这里插入图片描述
经过计算后:

  • 输出值变成0到1之间。
  • 输出值的和为1。
  • 原本大的值和小的值之间的差距更大

如果只有两个class⇒既可以直接套用softmax这个function,但更常用的是sigmoid(这两件事情是等价的)。

Loss of Classifacation

在这里插入图片描述

  • MSE,Cross-entropy都可以减小 y ^ \hat{y} y^ y ′ y' y之间的差距 e e e
  • Cross-entropy比MSE更加适用于分类问题
  • 在Pytorch中,softmax被内建在Cross-enrtopy损失函数中(捆绑使用)。

在这里插入图片描述
从优化角度出发进行讨论:

  • 使用MSE时,左上角的位置虽然Loss很大,但梯度平坦(趋近于0),就无法用gradient descent顺利走到右下角,难以优化。
  • Cross-entropy则更易收敛⇒改变Loss函数,可以影响训练的过程,改变optimization的难度。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值