1 序
机器学习方法都是由模型,策略和算法构成,即机器学习方法由三要素构成,可以简单地表示为:方法=模型+策略+算法; 机器学习首先考虑的问题便是选择什么样的模型,常见的模型有SVM(support vector machine),CNN(convolution neural network),RNN(recurrent neural network),感知机…等。策略即是指按照什么样的准则学习或者选择最优模型,策略部分最重要的可以说是确定损失函数(loss function)与代价函数(cost function)。本文使用的损失函数为 l ( y ^ , y ) = − ( y log y ^ + ( 1 − y ) log ( 1 − y ^ ) ) l(\hat y,y)=-(y\log\hat y + (1-y)\log (1-\hat y)) l(y^,y)=−(ylogy^+(1−y)log(1−y^))其中 y y y 为实际输出, y ^ \hat y y^ 为模型预测的输出,我们的目的是想让实际输出与模型预测的输出越接近越好,所以损失函数越小越好。其对应的代价函数为 J ( w , b ) = 1 n ∑ i = 0 n l ( y ^ i , y i ) J(w,b)=\frac1n\sum_{i=0}^n l(\hat y_i,y_i) J(w,b)=n1i=0∑nl(y^i,yi) 损失函数表示的是单个训练样本的误差,由公式容易看出代价函数表示的即是n个样本的误差和,其中w,b即是模型中的参数,我们的目的便是找到合适的参数使得代价函数 J ( w , b ) J(w,b) J(w,b)取值最小。找w,b最小值的过程,便是三要素中的算法。这样监督学习问题就变成了代价函数的最优化问题,这时代价函数是最优化的目标函数。而本文的主角,梯度下降法便是求解最优化问题的常用的算法。
2 梯度下降法
2.1 简介
由上文可知,梯度下降法的目的是找到目标函数的最小值 m i n J ( w , b ) min J(w,b) minJ(w,b) 。梯度是一个向量,目标函数在具体某点沿着梯度的相反方向下降最快,一个形象的比喻是想象你下山的时候,只能走一步下山最快的方向即是梯度的相反方向,每走一步就相当于梯度下降法的一次迭代更新。如图一所示,横轴b与纵轴w表示目标函数中的两个参数(为了方便展示此处只有两个参数,通常情况下有多个参数),蓝线即是梯度下降的路径,w,b 的初始值根据经验任意选取。
![](https://i-blog.csdnimg.cn/blog_migrate/27592f5f2105c8ee0e0f3008efc33901.png)
梯度下降法中参数每次的迭代更新公式如下,其中符号 : = := := 表示赋值, α \alpha α 指每次更新的步长
p : = w − α ∂ ∂ p J ( P ) p:=w-\alpha \frac{\partial}{\partial p}J(P) p:=w−α∂p∂J(P)
2.2 实例
以下为对线性回归模型使用梯度下降算法进行一次迭代的具体实例,此处涉及的知识有链式求导,反向传播原理。
![](https://i-blog.csdnimg.cn/blog_migrate/9d6774ae79bd148d3f0fc173981d67e2.png)
J = 0, dw_1 = 0, dw_2 = 0, db = 0 ; #初始化参数与代价函数值为0
for i=1 to m: # m个样本
Z[i] = w_1*x_1[i] + w_2*x_2[i] + b #图二中 Z 的表达式
a[i] = σ(Z[i]) #a[i]即模型预测的输出值
J += L(a[i],y[i]) #L(a,y)表达式见图二,累加损失函数
dz[i] = a[i] - y[i] #上面求导的结果
dw_1 += x_1[i]*dz[i] #累加m个样本的导数,最后求平均值
dw_2 += x_2[i]*dz[i]
db += dz[i]
J /=m, dw_1 /=m, dw_2 /=m, db /=m #各除以m得到m个样本的平均梯度
# 以步长α对参数w_1,w_2,b进行一次更新
w_1 = w_1 - α*dw_1
w_2 = w_2 - α*dw_2
b = b - α*db
实际工程中在大量数据的情况下使用 显式 for 循环跑梯度下降算法严重影响效率,所以通常是使用 向量化技术 ,但是看懂上面代码可以加深对梯度下降法的理解。
2.3 总结
以上只是最基础的梯度下降算法,根据训练数据的采集情况又分为批量梯度下降法,随机梯度下降法,小批量梯度下降法等,简单来说梯度下降法分为以下几个步奏:
- 取参数初始值
- 计算目标函数梯度表达式
- 带入训练数据计算具体梯度,若梯度 ||g|| < ϵ \epsilon ϵ 时,停止迭代,当前位置即为目标函数最小值(局部最小值)
- 根据表达式 p : = w − α ∂ ∂ p J ( P ) p:=w-\alpha \frac{\partial}{\partial p}J(P) p:=w−α∂p∂J(P) 更新参数
- 完成一次迭代,转 3
在基础梯度下降法的基础上,出现了很多优化的梯度下降法,可加快梯度下降的速度,下面是一些优化的梯度下降法,有兴趣可以继续深入了解
- 冲量梯度下降法(momentum optimization)
- NAG(Nesterov Accelerated Gradient)
- AdaGrad
- RMSprop
- Adam
3 参考资料
- 李航.统计学习方法[M].北京:清华大学出版社,2012.3
- Andrew Ng 人工智能公开课
- Andrew Ng 斯坦福大学公开课