线性回归:是利用数理统计中回归分析,来肯定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 html
对于通常训练集:算法
参数系统为:机器学习
线性模型为: 函数
损失函数最小的目标就是求解全局最小值,loss函数定义为学习
目标:min Φ(θ),loss函数最小。估计最优系数(θ0, θ1, θ2, …, θn)。优化
1. 梯度降低法(最速降低法) spa
顾名思义,梯度降低法的计算过程就是沿梯度降低的方向求解极小值。.net
具体过程以下(如图1所示):3d
图1 梯度降低描述(来自于斯坦福大学,《机器学习》公开课[2]) htm
过程2)能够表示为:
其中α为步长。
因为咱们每进行一次参数更新须要计算总体训练数据的梯度,批量梯度降低会变得很慢,而且会遇到内存吃不下数据就挂了。同时批量梯度降低也没法支持模型的在线更新,例如,新的样本不停的到来。
2. SGD (随机梯度降低算法,Stochastic gradient descent)
在梯度降低中,对于θ的更新,全部的样本都有贡献,也就是参与调整θ,其计算获得的是一个标准梯度。若是数据量很是大,那么运算速度很慢。而随机梯度降低算法的随机也就是说我用样本中的一个例子来近似我全部的样本,来调整θ。这样速度更快,可是更容易陷入局部极小。随机梯度降低算法能够表示为:
每次只选用第i个样本,m为样本数量。
3. AdaGrad(自适应梯度,Adaptive Gradient)
自适应梯度与SGD相似,AdaGrad的更新速率是可变的。更新速率必定,不必定适合全部的更新阶段。因此AdaGrad调整的是Gradient,对于全部的参数,随着更新的总距离增多,学习速度随之变缓。能够表示为:
其中(θi)t是t步的参数,ε很小,保证非0。
缺点:学习率单调递减,训练后期学习率很是小;须要手动设置全局学习率;更新 θt时,左右两边单位不统一。
参考文献:Duchi, E. Hazan, and Y. Singer. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization
4. AdaDelta
AdaDelta基本思想是用一阶的方法,近似模拟二阶牛顿法,是对AdaGrad的缺点进行改进。可表示为:
?
5. RMSprop
RMSprop和Adadelta是在差很少的时间各自独立产生的工做,目的都是为了缓解Adagrad的学习速率减小的问题。实际上RMSprop和咱们在Adadelta中推到的第一个更新向量是相同的:
其中,ρ建议取0.9,α建议取0.001。
6. NAG
这个算法严格的说来是凸优化中的算法,具备O(1/t^2)的收敛率,收敛速度比较快。由于 DNN是一个non-convex的model,因此NAG方法并不能达到这个收敛速度。caffe文档中指出,这个方法对于某些deeplearning 的 architecture是很是有效的。与SGD相似,具体更新过程以下:
7. Adam(我的认为通常都合适的caffe的solver方法)
Adaptive Moment Estimation(Adam) 也是一种不一样参数自适应不一样学习速率方法,与Adadelta与RMSprop区别在于,它计算历史梯度衰减方式不一样,不使用历史平方衰减,其衰减方式相似动量,以下[4]:
Wt与Vt分别是梯度的带权平均和带权有偏方差,初始为0向量,Adam的做者发现他们倾向于0向量(接近于0向量),特别是在衰减因子(衰减率)ρ1,ρ2接近于1时。为了改进这个问题,对Wt与Vt进行误差修正(bias-corrected):
最终,Adam的更新方程为:
[1] http://www.cnblogs.com/denny402/
[2] http://open.163.com/movie/2008/1/M/C/M6SGF6VB4_M6SGHFBMC.html
[3] http://blog.sina.com.cn/s/blog_eb3aea990102v41r.html
[4] http://blog.csdn.net/heyongluoyao8/article/details/52478715?locationNum=7