梯度下降(线性回归为例)
0. 相关工作
0.1 线性回归模型
其中,$n$ 为 $x$ 的特征数量。
转为矩阵相乘形式:
其中,$X$ 为样本矩阵,个人喜欢行数代表样本数量 $m$,列数代表特征维度 $n$。$\theta$ 为参数矩阵,大小为 $n * 1$。
若行数代表特征维度 $n$,列数代表样本数量 $m$,可写为:
0.2 定义损失函数
采用均方误差损失函数$Mean Square Error(MSE) $ 。
某个样本的损失函数定义如下:
整个训练集的损失函数为:
我们要求的就是使得$J(\theta)$最小的$\theta$。
0.3 定义梯度公式
梯度就是由多维变量偏导数的向量。
可知$J(\theta)$ 是一个复合函数,求导时采用链式法则,$J$ 对每个维度的参数的偏导,定义为:
其中$X_j^i$是第$j$个属性之前的系数。表示第i个样本第j个维度的特征值。
矩阵相乘形式:
$X_j^T$表示样本矩阵第j个维度的所有特征值。
由此进一步推导出:
1. 批量梯度下降
1 | import numpy as np |
2. 随机梯度下降
随机梯度下降是指,在进行梯度更新时,随机选取某一个样本来更新梯度,而非对整个样本数据集求梯度。
1 | def stochastic_gradient_descent(W,x,y,alpha,iterations = 1000): |
3. 小批量梯度下降(mini-batch)
小批量梯度下降指:每一步的梯度计算,既不是基于整个训练集(如批量梯度下降)也不是基于单个实例(如随机梯度下降),而是基于一小部分随机的实例集也就是小批量,来进行梯度的更新。
1 | def mini_batch_gradient_descent(W,x,y,alpha=0.01,itera=1000,batch_size=10): |
4. 动量梯度下降
$\alpha$ 即学习率。$\gamma$ 是动量系数。
1 | def momentum_gradient_descent(W,x,y,alpha=0.01,mini_batch=20,itera=1000): |
5. AdaGrad
算法简介:
在参数空间更为平缓的方向,该算法会取得更大的进步(因为平缓,所以历史梯度平方和较小,作为分母。对应学习下降的幅度较大),并且能够使得陡峭的方向变得平缓,从而加快训练速度。同时,每次迭代时,学习率也在不断改变,全局学习率逐参数的,除以历史梯度平方和的平方根,使得每个参数的学习率不同。
6. RMSprop
算法简介:
相比于之前的AdaGrad,采用了指数加权平均来更新每个参数的历史梯度(近期的梯度比重较大,历史梯度指数减小),增加了一个衰减系数来控制历史信息的获取多少。