梯度下降法
在求解机器学习算法模型参数的时候,梯度下降法(gradient descent)和最小二乘法(least squares)是最经常使用的方法,由于梯度下降法衍生出的分支较多,所以在这里对梯度下降法单独做一个总结。
梯度下降法详解
梯度
梯度是在微积分中对多元函数的各个参数求偏导数,并且把求得的各个参数的偏导数用向量的形式表达出来。
例如函数$L(\omega,b)$,分别对$\omega$和$b$求偏导数,梯度向量就是$({\frac{\partial{L}}{\partial{\omega}}},{\frac{\partial{L}}{\partial{b}}})^T$,简称$grad{L(\omega,b)}$或者$\nabla{L(\omega,b)}$。对于某个具体的点$(\omega_i,b_i)$的具体梯度向量就是$({\frac{\partial{L}}{\partial{\omega_i}}},{\frac{\partial{L}}{\partial{b_i}}})^T$或者$\nabla{L(\omega_i,b_i)}$,如果是多参数的函数则是$({\frac{\partial{L}}{\partial{x}}},{\frac{\partial{L}}{\partial{y}}},{\frac{\partial{L}}{\partial{z}}})^T$。
梯度下降法和梯度上升法
在机器学习算法中,如果需要最小化目标函数时,则可以通过梯度下降法一步一步的迭代求解,得到最小化的目标函数和模型参数值;如果要最大化目标函数时,则可以通过梯度上升法迭代求解。
梯度下降算法和梯度上升法之间也可以互相转化,可以通过梯度下降迭代最小化目标函数,同时也可以反向梯度上升迭代最小化目标函数;同理也可以反向梯度下降迭代最大化目标函数。
梯度下降
假设我们处在某座不知名的大山上的某处位置,由于我们不知道该怎么下山,于是决定走一步算一步,即每走到一个位置的时候便求解当前位置的梯度,沿着梯度的负方向即当前最陡峭的位置向下走一步,然后继续求解当前位置的梯度……直到我们认为我们已经到了山脚才停下来。从下图可以看出,通过该方法我们有可能走到了这座大山的某一个局部的最低处(山腰处),而没有走到真正的山脚。
从下山这个实例中可以得出:梯度下降不一定能够找到全局的最优解,有可能会找到局部最优解。
但是如果代价函数为凸函数的时候梯度下降得到的则一定是全局最优解。
相关概念
步长
步长决定了梯度下降迭代的时候每一步沿梯度负方向前进的长度,下山实例中则表示每一步的长度。
如果步长过长,则可能会错过最优解;如果步长过小,迭代速度会变慢,很长时间算法都不会结束。因此可以从大到小的尝试步长的大小,如果目标函数值在变小,说明取值有效,否则需要增大步长。