2021年1月1日 / 98次阅读 / Last Modified 2021年1月5日
神经网络
梯度下降算法的核心,是寻找出一个对应神经网络的weight和bias梯度vector的delta vector,这个vector有2个目的:
这个vector的选择,取巧的方法就是直接使用梯度vector(由所有w和b的偏导数构成的向量),这个选择带来数学上计算的简便,计算相当于做梯度vector的平方,这个值一定是正,然后选择一个eta,即Learning Rate,这个数一定是负数,这样就保证了delta cost是个负数,可以让cost变小一些。(这恐怕就是梯度下降 gradient descent 名称的由来,选择一个与梯度共线但反方向的vector)
Learning Rate 不能很大,其实原因很简单。微分公式中的delta,都是近似,delta y = derivative * delta x,这个关系式,只有在 delta x 很小的时候才成立!!如果 delta x 很大,得到的 delta y 已经毫无意义,已经失去了微分本来的意义。
想清楚了这些,会发现,当选择梯度vector配合learning rate的计算方式时,只能让learning rate小一些,以防止无意义的计算发生,防止震荡。但是,个人认为,整体也许能够在比较小的learninig rate下继续优化,但是局部参数可能得到的 delta w 或 delta b依然很大。
是否有可能换一种更新 w 和 b 的计算模式?让每一个独立的 w 和 b 都能够在一个合理的范围内被update。比如:是否可以给每一个 w 和 b 一个独立的 learning rate?另一个思路:不直接取梯度vector,而是取梯度vector的正负号,保持正负号相同,配合一个learning rate,也能够得到一个负的 delta cost?......
其实,已经有很多其它的计算方法,我还需要继续研究...
-- EOF --
本文链接:https://www.pynote.net/archives/3066
《为什么Learning Rate不能很大?》有2条留言
前一篇:哥伦布(Golomb)压缩编码
后一篇:不稳定的梯度
©Copyright 麦新杰 Since 2019 Python笔记
Learning Rate太大,梯度爆炸... [ ]
梯度下降算法如果有BackPropagation的加持,神经网络依然在冰河期。 [ ]