梯度下降
方向导数
设三元函数(f)在点(p_0(x_0, y_0, z_0))的某领域(U(P_0)subset mathbf{R}^3)有定义,(l)为从点(P_0)出发的射线,(P(x, y, z))为(l)上且含于(U(P_0))内任一点,以( ho)表示(P)与(P_0)两点间的距离,若极限
存在,则称此极限为函数(f)在点(P_0)沿方向(l)的方向导数,记作
若函数(f)在点(P_0(x_0, y_0, z_0))可微,则(f)在点(P_0)沿任一方向(mathcal{l})的方向导数都存在,且
其中(cosalpha, coseta, cosgamma)为方向(l)方向余弦。
梯度
若(f(x, y, z))在点(P_0(x_0, y_0, z_0))存在对所有自变量的偏导数,则称向量((f_x(P_0), f_y(P_0), f_z(P_0)))为函数(f)在点(P_0)的梯度。记作
向量(grad;f)的长度(或模)为
若记(l)方向上的单位向量为
于是方向导数公式又可写成
这里( heta)是梯度向量(grad;f(P_0))与(l_0)的夹角。
因此当( heta = 0)时,(f_l(P_0))取最大值(|grad; f(P_0)|)。这就是说,当(f)在点(P_0)可微时,(f)在点(P_0)的梯度方向是(f)的值增长最快的方向,并且沿这一方向的变化率是梯度的模;而当(l)与梯度向量反方向( heta = pi)时,方向导数取得最小值(-|grad;f(P_0)|)。
梯度下降
由于我们的拟合函数是这样子的:$$h_{ heta}(x) = heta_0 + heta_1x_1 + heta_2x_2 + ldots + heta_nx_n$$
为了方便,设置初始值(x_0=1),那么得到拟合函数
这是损失函数,用来表示拟合程度的好坏。现在要确定一组( heta_1, heta_2,ldots, heta_n)使得到的拟合函数(h(x)=sum_{i=0}^n heta_ix_i)让损失函数(J( heta))尽可能小。
为了确定( heta_0, heta_1, ldots, heta_n)的值,可以先对其赋一组初值,然后改变( heta)的值,使得(J( heta))最小,由上面的梯度性质可以知道,函数(J( heta))在其负梯度方向下降最快,所以只要使得每个参数( heta)按函负梯度方向改变,则(J( heta))将得到最小值,即
其中(alpha)表示步长,即每次往下降最快方向走多远。
当只有一组数据时,由于
所以
当有(m)组数据时
每迭代一步,都要遍历到所有的训练数据,此时为批梯度下降算法,当(m)非常大的时候,此时算法收敛的得非常慢。所以在进行迭代的时候,让( heta_i = heta_i - alpha(h_ heta(x^{(j)})-y^{(j)})x_i^{(j)})来进行更新迭代,即每次随机选择一个数据集来更新,这样的算法叫做随机梯度算法。