假设我们提供了这样的数据样本(样本值取自于y=3*x1+4*x2):
x1 x2 y
1 4 19
2 5 26
5 1 19
4 2 29
x1和x2是特征,y是预测目标,我们需要以一条直线来拟合上面的数据,待拟合的函数如下(也就是建立的模型):

h(θ)=θ1x12x2

我们的目的就是要求出θ1和θ2的值,让h(θ)尽量逼近目标值y。

梯度下降法原理:

我们首先确定损失函数:

随机梯度算法python 随机梯度类算法_损失函数

  其中,J(θ)是损失函数,m代表每次取多少样本进行训练,如果采用SGD进行训练,那每次随机取一组样本,m=1;如果是批处理,则m等于每次抽取作为训练样本的数量。θ是参数,对应θ1和θ2。求出了θ1和θ2,h(x)的表达式就出来了:

随机梯度算法python 随机梯度类算法_迭代_02

我们的目标是让损失函数J(θ)的值最小,根据梯度下降法,首先要用J(θ)对θ求偏导:

随机梯度算法python 随机梯度类算法_梯度下降法_03

由于是要最小化损失函数,所以参数θ按其负梯度方向来更新:

随机梯度算法python 随机梯度类算法_随机梯度算法python_04

示例:

BGD(Batch gradient descent)批量梯度下降法:每次迭代使用所有的样本。每次迭代都需要把所有样本都送入,这样的好处是每次迭代都顾及了全部的样本,做的是全局最优化。