回归(三):线性回归的梯度下降法

对于稠密矩阵,进行浮点运算的时间复杂度都是O(n3),从最简单的矩阵乘法,到求逆、SVD、Schur分解都如此,差别仅在于n3前的系数。
但在实际工作中,动辄几百个特征,求逆需要的算力是在实际工作中往往是不可能被满足的。
在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练。

一般线性回归函数的假设函数为:



θ是我们回归后得到的某一组向量,h可以认为是在θ下的“预测值”。

于是我们得到这样一个方程,衡量理论值h与实际值y之间的总残差,称之为损失函数:


下图作为一个二维参数(θ1,θ2)组对应 能量函数的可视化图:

回归(三):线性回归的梯度下降法_第1张图片
对于可解的线性回归问题,能量函数图总是这种碗状结构,它只有一个局部最优解,同时也是全局最优解

梯度下降法的原理:先设置一个曲面上的起始位置,θ_0,然后沿着该点的梯度下降,并设定一定的步长,最终得到一个局部最优解。

下面我们来分析三种梯度下降方法。

批量梯度下降法BGD

我们的目的是要误差函数尽可能的小,即求解weights使误差函数尽可能小。首先,我们随机初始化weigths,然后不断反复的更新weights使得误差函数减小,直到满足要求时停止。这里更新算法我们选择梯度下降算法,利用初始化的weights并且反复更新weights:


这里α代表学习率(也就是每次下降的步长),表示 每次向着J最陡峭的方向迈步的大小。为了更新weights, 我们需要求出函数J的偏导数。首先当我们只有一个数据点(x,y)的时候,J的偏导数是:

回归(三):线性回归的梯度下降法_第2张图片

则对所有数据点,上述损失函数的偏导(累和)为:

回归(三):线性回归的梯度下降法_第3张图片

再最小化损失函数的过程中,需要不断反复的更新weights使得误差函数减小,更新过程如下:

回归(三):线性回归的梯度下降法_第4张图片

伪代码如下:


回归(三):线性回归的梯度下降法_第5张图片

由上图更新公式我们就可以看到,我们每一次的参数更新都用到了所有的训练数据(比如有m个,就用到了m个),如果训练数据非常多的话,是非常耗时的。但是它的优势在于,它的步数比较少。

回归(三):线性回归的梯度下降法_第6张图片
批量梯度下降法的收敛图

你可能感兴趣的:(回归(三):线性回归的梯度下降法)