神经网络的几种参数更新方法

  • 本文总结自《深度学习入门:基于Python的理论与实现》一书,对于后两个方法,笔者还不太理解,所以仅仅介绍概念,或许以后会添加新的理解
  • 本文默认读者有深度学习基础,所以不再解释公式的具体含义

method 1:Stochastic Gradient Descend

在这里插入图片描述

  • SGD 的缺点是,如果函数的形状各向异性(anisotropic),比如呈延伸状,搜索的路径就会非常低效。因此,我们需要比单纯朝梯度方向前进的 SGD 更聪明的方法。
  • SGD 低效的根本原因是,梯度的方向并没有指向最小值的方向

method 2 :Momentum 物理模拟

在这里插入图片描述

  • 这里新出现了一个变量v ,对应物理上的速度。式(6.3)表示了物体在梯度方向上受力,在这个力的作用下,物体的速度增加这一物理法则。Momentum 方法给人的感觉就像是小球在地面上滚动。

  • αv:在物体不受任何力时,该项承担使物体逐渐减速的任务(α 设定为 0.9 之类的值),对应物理上的地面摩擦或空气阻力。

  • 初始化时,v 中什么都不保存,但当第一次调用 update() (就是参数更新的一个函数)时,v 会以字典型变量的形式保存与参数结构相同的数据

  • 更新路径就像小球在碗中滚动一样。和 SGD 相比,“之”字形的“程度”减轻了。这是因为虽然 x 轴方向上受到的力非常小,但是一直在同一方向上受力,所以朝同一个方向会有一定的加速。反过来,虽然 y 轴方向上受到的力很大,但是因为交互地受到正方向和反方向的力,它们会互相抵消,所以 y 轴方向上的速度不稳定。因此,和 SGD 时的情形相比,可以更快地朝 x 轴方向靠近,减弱“之”字形的变动程度

理解:

  • 这个v变量很关键,它是参数矩阵移动的速度,整个参数矩阵就像一个小球,那么小球在下坡时速度是从0开始增长的,到达坡底时速度最大。这个v它其实本质上就是控制了参数每一步走的距离,因为开始速度小,所以距离小,速度大时,距离就大,这就类似于小球的物理运动。
  • 可以看到,总体上,每个参数点的距离都比SGD小太多,这样小距离的好处就是,能及时更新方向,而且在更新的时候要加上速度矩阵,因为梯度是实时的,就像加速度,但运行方向会由于惯性,受到速度矩阵的影响所以总结就是,参数更新会受到梯度(加速度,就是当前受到的力)和速度的同时影响,那么这就非常像物理运动了。其实梯度就是参数在这个斜面的受力,是导数,导数就是参数的加速度,是变化率
  • 这就解释了为什么到达下面这个点时,为什么不往红点处走(因为红点方向是梯度方向),而是往右,就是因为速度的影响,假设这里速度=0,那么就会朝红点方向走了
    在这里插入图片描述

method 3 :AdaGrad 学习率衰减

  • 在关于学习率的有效技巧中,有一种被称为学习率衰减(learning rate decay)的方法,即随着学习的进行,使学习率逐渐减小。实际上,一开始“多”学,然后逐渐“少”学的方法,在神经网络的学习中经常被使用
    • 逐渐减小学习率的想法,相当于将“全体”参数的学习率值一起降低。而 AdaGrad 进一步发展了这个想法,针对“一个一个”的参数,赋予其“定制”的值
  • AdaGrad 会为参数的每个元素适当地调整学习率,与此同时进行学习(AdaGrad 的 Ada 来自英文单词 Adaptive,即“适当的”的意思)
    在这里插入图片描述
  • 这里新出现了变量h ,如式 (6.5) 所示,它保存了以前的所有梯度值的平方和(式(6.5)中的 圆点 表示对应矩阵元素的乘法)。然后,在更新参数时,通过乘以 1/根号h,就可以调整学习的尺度
  • 这意味着,参数的元素中变动较大(被大幅更新)的元素的学习率将变小。也就是说,可以按参数的元素进行学习率衰减,使变动大的参数的学习率逐渐减小
  • AdaGrad 会记录过去所有梯度的平方和。因此,学习越深入,更新的幅度就越小。实际上,如果无止境地学习,更新量就会变为 0,完全不再更新。所以,该方法还有替换方案,这里就不说了。

method 4 :Adam 融合前两个的方法

  • 感觉不用深究了。。tai nan le!

  • Adam 是 2015 年提出的新方法。它的理论有些复杂,直观地讲,就是融合了 Momentum 和 AdaGrad 的方法。通过组合前面两个方法的优点,有望实现参数空间的高效搜索。此外,进行超参数的“偏置校正”也是 Adam 的特征。这里不再进行过多的说明,详细内容请参考原作者的论文

对比

在这里插入图片描述

  • 只看这个图的话,AdaGrad 似乎是最好的,不过也要注意,结果会根据要解决的问题而变。并且,很显然,超参数(学习率等)的设定值不同,结果也会发生变化。
  • 那么用哪种方法好呢?非常遗憾,(目前)并不存在能在所有问题中都表现良好的方法。这 4 种方法各有各的特点,都有各自擅长解决的问题和不擅长解决的问题。
  • 很多研究中至今仍在使用 SGD。Momentum 和 AdaGrad 也是值得一试的方法。最近,很多研究人员和技术人员都喜欢用 Adam。

代码实现:待更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值