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

1 任务攻略

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

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

如何判断是哪种情况?

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

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

  • 情况一:overfitting——最简单的解决方法就是增加训练数据Data augmentation:
    在这里插入图片描述
    可以对原有数据进行处理,得到新的可以添加进训练集的数据:上面的第一幅图是原图,第二、三幅图是对原图进行反转和局部放大。而第四幅图是图片颠倒,这会让模型识别变得更困难,所以第四幅图的方法是不行的。
    第二种方法是给模型增加限制,比如说模型一定要是二次曲线,但是要注意限制也不要过多。
    如何选择模型?
    在这里插入图片描述
  • 情况二:mismatch
    overfitting可以通过增加训练集的数据来解决,但是mismatch的training和testing的分布不一样,不能那样解决
    在这里插入图片描述

1.3 任务攻略的示意图

在这里插入图片描述

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

当 loss 无法下降时,可能梯度已经接近0了,这是,局部最小值 (local minima) 与鞍点 (saddle point)都有可能,它们统称为critical point。在这里插入图片描述
此时,我们需要判断属于哪种情况,计算Hessian即可:
在这里插入图片描述
举例:
在这里插入图片描述
如果是鞍点 (saddle point),还可以寻找下降的方向继续训练。
在这里插入图片描述
但是其实这种情况很少见。

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

3.1 批次(batch)

小的batch size有更好的结果。
在这里插入图片描述
有很多文章想要鱼与熊掌兼得:
在这里插入图片描述

3.2 动量(momentum)

有了动量,就不会停留在critical point,而是会继续向下:
在这里插入图片描述
以前的梯度下降是这样的:
在这里插入图片描述

加上动量以后,就是加上了对前一个动作的考虑,则下一个动作就是前一个动作与前一个动作相结合的结果。
在这里插入图片描述
下面的红线是梯度,蓝虚线是动量,蓝实线是前两者结合的结果,可以看到,甚至可能翻越小丘,到达真正的 loss 最小值。
在这里插入图片描述

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

前面在 loss 不下降的时候,我们说可能是critical point,但是也有可能是下面这种情况:
在这里插入图片描述
learning rate应该为每一个参数特制化:
在这里插入图片描述
原来的参数的第 t + 1 t+1 t+1 次迭代种中,学习率 η \eta η 是不变的;而我们修改之后, η \eta η 变成了 η σ i t \frac{\eta}{\sigma^t_i} σitη,这样修改之后,学习率就是 parameter independent 的了,同时也是 iteration independent 的(参数独立、迭代独立)。

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

在这里插入图片描述
这种方法被用在Adagrad里面:
在这里插入图片描述
当梯度较小时,计算出来的 σ i t \sigma^t_i σit 就小,则学习率就大;反之学习率变小。

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

这种方法通过设置 α \alpha α 来调整现在的梯度的重要性:
在这里插入图片描述
如下图所示:
在这里插入图片描述
可以调整 α \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

在这里插入图片描述

4.4 Learning Rate Scheduling

使学习率 η \eta η 随时间变化:
在这里插入图片描述

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 只有大小。
在这里插入图片描述

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

在这里插入图片描述
在分类中,通常会加上softmax:
在这里插入图片描述
如果是分类成两类,则更常用sigmoid,但其实这两者的方法结果是一样的。

下面是损失函数:
在这里插入图片描述
事实上,交叉熵在分类中是最常用的,在PyTorch中,CrossEntropyLoss这个函数已经包含了softmax,这两者是绑定在一起的。

为什么?
在这里插入图片描述
从图中可以看出,当 loss 很大时,MSE很平坦,不能梯度下降到 loss 小的地方,卡住了;但是交叉熵可以一路梯度下降下去。

6 批次标准化(Batch Normalization)

希望对于不同的参数,对 loss 的影响范围都比较均匀,像下面的右图:
在这里插入图片描述
方法是特征归一化(Feature Normalization):
在这里插入图片描述
归一化之后,每个维度的特征的平均值为0,方差为1。
一般来说,特征归一化使梯度下降收敛更快。

后一步的输出同样也需要归一化,这些归一化都是针对于一个Batch的:
在这里插入图片描述
为了让输出的均值不为0,方差不为1,就会加上 β \beta β γ \gamma γ
在这里插入图片描述
β \beta β γ \gamma γ 这两个向量初始值分别是0和1,然后一步步在网络中学习更新,所以一开始的时候,dimension的分布是接近的,后续error surface的表现比较好之后,才会把 β \beta β γ \gamma γ 加进去。

在Testing中:将train的参数用进test中。
在这里插入图片描述
一些比较有名的Normalization:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值