introdction
个人理解,梯度下降的元素
- 梯度方向
- 步长
梯度下降的种类
根据计算梯度时候,用的数据量的不同,分为三类.数据量不同,决定了准确度和耗时的trade-off
批量gd
随机gd
minibatch gd
吸取了两者的优点
挑战
mini-batch gd 不能保证收敛,而且提出了一些挑战
- 很难选择学习率
- 第二点没懂
- 所有参数的学习率都相同.如果数据很稀疏,并且特征出现频率差异很大,我们不能相同程度低更新,而应该对很少见的特征,更新幅度更大
- 避免落入次优局部点.Dauphin认为,鞍点比局部极小点跟困难
GD优化算法
动量法
vt=rvt1+nδθJ(θ)
θ=θ−vt
Nesterov accelerated gradient
动量法,使得模型盲目地冲下slope.模型需要聪明一些,在斜坡变缓之前就慢下来.
NAG有一些先知.
动量法:先用当前的位置的梯度,更新一个文字,然后再加上上一步的动量,这样有个问题,两个子步骤是独立的,没有修正的过程.
NAG的做法,是先用上一步的方向,到一个新位置,然后计算这个新位置的梯度,然后修正.优点是第二个子步骤和第一个子步骤相关的,第二子步骤修正第一个子步骤.
Adagrad
θt+1,i=θt−ηGt,ii+ϵ‾‾‾‾‾‾‾√⋅gt,i
Gt 是一个对角矩阵,每个元素 gi,i 是 θi 到现在的每步梯度的平方的累加
优点:不需要自己调学习率
缺点:学习率不断下降直到不能学到任何新知识
Adadelta
是Adagrad的修正
还有好几个AdaXXX,后面填坑
并行和分布式SGD
Hogwild
前提是输入必须是稀疏的.这样每次只会更新一部分参数.
Downpour SGD
这个不太懂
延时容忍算法
是在AdaGrad基础上发展的.不太理解