chapter 4 Beyond Gradient Desent
英语词汇
intracttable 棘手的,难以解决的
hundle 障碍
内容
主要讲述几种优化算法。
接下来探索局部最小值以及由此在训练网络中可能引起的问题。接着探索由于网络模型过深而引起的误差非凸面化,在这种情况下,小批量梯度下降算法失效。接着将探索非凸优化方法是如何克服这种问题的。
1. 误差曲面的非凸性
有很多的局部最小值,而神经网络需要找到全局最小值
这个是题外话,了解一下阿偶:
* 模型唯一性
对于一个l层,每层有n个神经元的网络,有
n!l
n
!
l
中安排参数的方法,最终网络的输出相同。
解决局部最小值的方法:
mini-batch gradient descent
蒙特卡洛方法
使用随机数(或更常见的伪随机数)来解决很多计算问题的方法,很经典的一个问题:利用投针实验求解圆周率 π π
二阶方法(second-order methods)
2. 学习比率的问题
学习速率调整(learning rate adaptation)
选择正确的学习速率很重要,学习速率过小,收敛速度过慢
学习速率太大, 直接忽略某些局部最小值
学习速率自适应调整(learning rate adaption):在训练过程中适当的修改学习速率来达到更好的收敛性
三个最流行的学习速率自调整算法
AdaGrad
利用每次迭代历史的梯度平方根的和来修改学习速率⨀ ⨀ 是矩阵的点乘, ϵ ϵ 是初始学习速率
r0=0 r 0 = 0
ri=ri−1+gi⨀gi r i = r i − 1 + g i ⨀ g i
θi=θi−1−ϵδ⨁ri−−√⨀g θ i = θ i − 1 − ϵ δ ⨁ r i ⨀ gδ≈10−7 δ ≈ 10 − 7 避免除以0
python tensorflow调用代码:tf.train.AdagradOptimizer( learning_rate, initial_accumulator_valuer=0.1, use_locking=False, name='Adagrad' )
在tensorflow中, δ δ 和initial_accumulator_valuer在一起.
- RMSProp
ri=ρri−1+(1−ρ)gi⨀gi r i = ρ r i − 1 + ( 1 − ρ ) g i ⨀ g i
衰退因子 (decayfactor) ( d e c a y f a c t o r ) ρ ρ 决定对历史梯度的保留程度
python tensorflow调用代码:
tf.train.RMSPropOptimizer( learning_rate, decay=0.9, momentum=0.0, epsilon=1e-10, use_locking=False, name='RMSProp' )
- RMSProp
通过调整momentum来确定是否使用蒙特卡洛方法
RMSProp是一个非常高效的算法,对于很多的资深从业者而言是默认的选择
Adam 将蒙特卡洛和RMSProp结合起来
tf.train.AdamOptimizer( learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8, use_locking=False, name='Adam' )
很先进高效
默认参数下已经表现的很好了,只需要修改参数learning_rate就好了。总结
最流行的算法:
- 误差曲面非凸
1. mini-batch gradient descent
2. mini-batch gradient with momentum
- 学习速率
- RMSProp
- RMSProp with momentum
- Adam
- 学习速率
主要是好的网络结构可以比训练算法有更好的效果,所有好的网络结构更值得花时间构建