神经网络的训练

神经网络的训练

李新在《为有源头活水来》说:“要结合实际工作和革命斗争的需要来学;学以致用;并且勤学苦学。”

神经网络训练中障碍-局部最小值点与鞍点

在《三体》中有一个片段涉及多维空间的问题。三维封闭空间,可能对四维时空就是开放的,比如二维画一个圈,二维生物可能就困在了里面,但三维生物可以从圈上方跨过去。这么说来,被孙悟空地上画个圈就困住的唐僧可能是二维生物。这里主要说到的一个现象是,鞍点就是在某一方向上不能再下降的点,但其他方向还是可以继续下降的,而且在训练神经网络时,我们遇到的最多驻点就是鞍点。如下图所示,在训练到一个关键点时,其中局部最小值数量占一半的情况还是比较少的,多数情况是鞍点占很大部分。

image-20220525221445295

其中这里最重要的部分是对关键点类型分类的数学原理,在关键点对Loss函数进行二阶泰勒展开,可以通过其中二阶偏导,来判断关键点类型。

image-20220525221722630

因为在关键点处,一阶导数为0,所以周围点与中心点大小的关系可以从第二部分的正负求得,其实第二部分我看起来像一个二次多项式。这里的关键点在于判断其中海参矩阵特征值是否全正,如果全为正,那么第二项就必定是正值,如果有正有负,那么就是鞍点。

这里是不是可以通过二次平方配方来证明?

image-20220525222239528

那么在训练一个神经网络时,感觉就是在一个个鞍点向下滑,这么跟滑梯还真类似。

批次与动量

批次大小是一个超参数,又是超参数!超参数多的意思就是这个模型很看运气。

批次大小

在使用训练数据计算梯度时,一般不会使用全部数据一次计算梯度,而是将数据分为很多batch,然后每个batch计算梯度,然后更新参数。计算完所有batch后,这个训练称为一个epoch。这种训练流程如下:

image-20220525205350785

一般逻辑想的是,一个batch数据量越大的话,计算单个batch也就越耗时,但实际情况却不是这样。当一个batch数据量在1到1000时,由于GPU的并行能力,其实耗时是没有太大差异的,训练耗时发生较大变化是在数据量大于1w时,此时一个batch训练时间会有较大增长。

在相同数据量时,one epoch训练时间=Time(one batch)*(N(all data)/n(one batch)),由于在batch大小很小时,看完所有数据需要看非常多次,导致其训练一个epoch反而是最多的。而一个大batch时训练时间却最小。

image-20220525210417148

但小batch有自身的好处,即它可以降低泛化误差,目前解释是小batch训练数据的随机性有利于在训练过程中跳出陡峭的局部最小点,而是使参数大概率落在平滑的局部最小值,这样就算测试数据有一点变化,那么造成的误差改变也不会很大。总结来说,小batch训练神经网络模型有利于训练出较为“平滑”的模型。

image-20220525205140325

image-20220525212718468

如何冲出局部最小值-动量法

动量法是在更新当前梯度时,将本次batch数据计算的梯度和上次梯度进行相加,即考虑了训练的惯性,将上次更新的更新也考虑在了本次更新内。感觉像是说,如果这是一个小坑,小球从很高的地方下降下来,那么如果坑的另一边没有对应很高的壁,那就可以越过这个坑,但就怕越过后,对面的坑还不如当前的坑底。这可能就是为什么说训练神经网络都是玄学。因为这里面太多东西没有研究到了。

image-20220525213123388

自适应调节学习率

总结来说,这一节主要讲做神经网络训练时如何更新参数,从更新的部分可以看到,优化学习率调节的方法包括调节下降的方向,学习率常数的大小及本次学习率取多大比例三个方面。

image-20220525231322182

Adagrad算法的学习率是设为一个常量,然后计算历史平均梯度大小和当前梯度大小的比例,按这个比例来调整学习率。这样的效果是视当前梯度和历史梯度同等重要。

image-20220525231708709

RMSProp进阶的改良版是将当前影响和历史影响的重要程度视为不同,用一个参数来调节。

image-20220525230818565

那么将改良的Adagrad ,RMSProp(学习率调节)与动量法结合(梯度下降的方向),就是Adam算法。这两个都是用梯度作为依据来进行调整。

image-20220525230113950

最后是学习率常量本身的调整,这里主要分为两种,一个是递减的学习率,和经验有类似的地方,即在调节一个仪器时,先粗调再细调。

另一种是先从小往大调学习率,达到某一个极大值再往小调。这个方法称为warm up,很多神经网络是需要这种方法才能训练的。

image-20220525230907350

损失函数的影响

这节损失函数主要讲了分类模型的损失函数调整,可能在数值模拟的模型中loss基本取均方根误差就可以,分类模型的损失函数一般会用soft-max操作和交叉熵操作。

image-20220525232143092

Loss函数为什么能影响训练能,我的理解是,Loss函数本身就决定了代价函数的分布,如果代价函数分布是一个“好”训练的分布,那么训练难度就低,反之则容易陷在一些无法训练的点上。好训练的Loss给人的感觉就是比较平滑连续,能在任意一个地方都走到谷底,那自然是最好的Loss形式。

image-20220525232542745

批次标准化

这里的批次标准化的意思是说,在每一层输出值,都做下减去均值除以方差的操作。

image-20220525232826240

最后说批次标准化带来更好的训练可能是一种偶然的现象,可能没有直接关联,再次说明神经网络是一种玄学。

image-20220525233421404

参考

李宏毅《机器学习/深度学习》2021课程(国语版本,已授权)_哔哩哔哩_bilibili

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值