2021李宏毅机器学习(3):类神经网络训练不起来怎么办

2021李宏毅机器学习(3):类神经网络训练不起来怎么办

  • 1 任务攻略
    • 1.1 如果在训练集上的 loss 始终不够小
    • 1.2 如果 loss 在训练集上小,在测试集上大
    • 1.3 任务攻略的示意图
  • 2 局部最小值 (local minima) 与鞍点 (saddle point)
  • 3 批次(batch)与动量(momentum)
    • 3.1 批次(batch)
    • 3.2 动量(momentum)
  • 4 自动调整学习率 (Learning Rate)
    • 4.1 最常见的一种修改学习率的方法是均方根
    • 4.2 可以自己调整现在的gradient的重要性——RMSProp
    • 4.3 Adam: RMSProp + Momentum
    • 4.4 Learning Rate Scheduling
    • 4.5 总结
  • 5 损失函数 (Loss) 也可能有影响
  • 6 批次标准化(Batch Normalization)

1 任务攻略

1.1 如果在训练集上的 loss 始终不够小

  • 情况一:model bias(模型本身有很大限制)——构造更复杂的模型
  • 情况二:优化问题(使用的优化方法始终没办法优化到 loss 最小值)——更有效的优化方法

如何判断是哪种情况?

  • 首先在更容易优化的浅层网络上训练
  • 如果深层网络不能在训练集上得到比上面更小的 loss,则是情况二

1.2 如果 loss 在训练集上小,在测试集上大

  • 情况一:overfitting——最简单的解决方法就是增加训练数据Data augmentation:
    2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第1张图片
    可以对原有数据进行处理,得到新的可以添加进训练集的数据:上面的第一幅图是原图,第二、三幅图是对原图进行反转和局部放大。而第四幅图是图片颠倒,这会让模型识别变得更困难,所以第四幅图的方法是不行的。
    第二种方法是给模型增加限制,比如说模型一定要是二次曲线,但是要注意限制也不要过多。
    如何选择模型?
    2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第2张图片
  • 情况二:mismatch
    overfitting可以通过增加训练集的数据来解决,但是mismatch的training和testing的分布不一样,不能那样解决
    2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第3张图片

1.3 任务攻略的示意图

2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第4张图片

2 局部最小值 (local minima) 与鞍点 (saddle point)

当 loss 无法下降时,可能梯度已经接近0了,这是,局部最小值 (local minima) 与鞍点 (saddle point)都有可能,它们统称为critical point。2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第5张图片
此时,我们需要判断属于哪种情况,计算Hessian即可:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第6张图片
举例:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第7张图片
如果是鞍点 (saddle point),还可以寻找下降的方向继续训练。
在这里插入图片描述
但是其实这种情况很少见。

3 批次(batch)与动量(momentum)

3.1 批次(batch)

小的batch size有更好的结果。
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第8张图片
有很多文章想要鱼与熊掌兼得:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第9张图片

3.2 动量(momentum)

有了动量,就不会停留在critical point,而是会继续向下:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第10张图片
以前的梯度下降是这样的:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第11张图片

加上动量以后,就是加上了对前一个动作的考虑,则下一个动作就是前一个动作与前一个动作相结合的结果。
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第12张图片
下面的红线是梯度,蓝虚线是动量,蓝实线是前两者结合的结果,可以看到,甚至可能翻越小丘,到达真正的 loss 最小值。
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第13张图片

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

前面在 loss 不下降的时候,我们说可能是critical point,但是也有可能是下面这种情况:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第14张图片
learning rate应该为每一个参数特制化:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第15张图片
原来的参数的第 t + 1 t+1 t+1 次迭代种中,学习率 η \eta η 是不变的;而我们修改之后, η \eta η 变成了 η σ i t \frac{\eta}{\sigma^t_i} σitη,这样修改之后,学习率就是 parameter independent 的了,同时也是 iteration independent 的(参数独立、迭代独立)。

4.1 最常见的一种修改学习率的方法是均方根

2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第16张图片
这种方法被用在Adagrad里面:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第17张图片
当梯度较小时,计算出来的 σ i t \sigma^t_i σit 就小,则学习率就大;反之学习率变小。

4.2 可以自己调整现在的gradient的重要性——RMSProp

这种方法通过设置 α \alpha α 来调整现在的梯度的重要性:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第18张图片
如下图所示:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第19张图片
可以调整 α \alpha α 比较小,让 σ i t \sigma^t_i σit 更依赖 g i t g^t_i git,这样,当梯度突然由平滑变陡峭的时候, g i t g^t_i git 变大, σ i t \sigma^t_i σit 也变大,就会使这时的步伐变得小一点;同理,梯度再次转为平滑的时候, σ i t \sigma^t_i σit 就会迅速变小,步伐就会变大。
其实就是让每一步能够根据变化的情况快速反应过来。

4.3 Adam: RMSProp + Momentum

2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第20张图片

4.4 Learning Rate Scheduling

使学习率 η \eta η 随时间变化:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第21张图片

4.5 总结

加上前面的3.2,我们采用了三种方法来改进梯度下降:动量、调整学习率的大小、学习率随时间变化。
m i t m^t_i mit σ i t \sigma^t_i σit 不会相互抵消,因为 m i t m^t_i mit 包括了方向,而 σ i t \sigma^t_i σit 只有大小。
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第22张图片

5 损失函数 (Loss) 也可能有影响

2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第23张图片
在分类中,通常会加上softmax:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第24张图片
如果是分类成两类,则更常用sigmoid,但其实这两者的方法结果是一样的。

下面是损失函数:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第25张图片
事实上,交叉熵在分类中是最常用的,在PyTorch中,CrossEntropyLoss这个函数已经包含了softmax,这两者是绑定在一起的。

为什么?
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第26张图片
从图中可以看出,当 loss 很大时,MSE很平坦,不能梯度下降到 loss 小的地方,卡住了;但是交叉熵可以一路梯度下降下去。

6 批次标准化(Batch Normalization)

希望对于不同的参数,对 loss 的影响范围都比较均匀,像下面的右图:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第27张图片
方法是特征归一化(Feature Normalization):
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第28张图片
归一化之后,每个维度的特征的平均值为0,方差为1。
一般来说,特征归一化使梯度下降收敛更快。

后一步的输出同样也需要归一化,这些归一化都是针对于一个Batch的:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第29张图片
为了让输出的均值不为0,方差不为1,就会加上 β \beta β γ \gamma γ
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第30张图片
β \beta β γ \gamma γ 这两个向量初始值分别是0和1,然后一步步在网络中学习更新,所以一开始的时候,dimension的分布是接近的,后续error surface的表现比较好之后,才会把 β \beta β γ \gamma γ 加进去。

在Testing中:将train的参数用进test中。
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第31张图片
一些比较有名的Normalization:
2021李宏毅机器学习(3):类神经网络训练不起来怎么办_第32张图片

你可能感兴趣的:(机器学习,深度学习,机器学习,神经网络,深度学习,人工智能)