梯度下降
假设预测函数为
其中,θ 是模型参数,x 是输入变量(特征)
该预测函数的损失函数(平方误差函数、代价函数)为
其中,y 是输出变量(目标),J(θ) 是损失,注意这里(x,y)是已知样本,变量是 θ 参数
目标:解出 让 J(θ) 最小化 的 θ (直接求导=0的方法也行,但是多维的不好解甚至可能解不出来,所以可以用梯度下降,不失为一个好方法)
方法:给定一些 θ 的初始值,然后改变 θ 值让 J(θ) 的值变小,不断重复改变 θ 使 J(θ) 变小的过程,直至 J(θ) 约等于最小值。
具体来说:
- 把 J(θ) 看做一座山,我们要下山,到最低点
- 下山最快的方法就是走最“陡峭”的地方,走一步再以更新后的位置为基准,重新找最“陡峭”的地方,当“陡峭程度” =0 的时候就到山下了。
- 最“陡峭”的方向就是该点的 梯度(梯度是高中知识,不懂的话自己复习一下),对每个 θ 求偏导,得到当前这一轮的梯度:
- 我们从梯度相反的地方下山,为什么是相反呢,因为梯度方向是切线向上增长的方向!别混了!得反过来!(这就是下面公式用减号的原因)
- 加上学习率 α (就是一个控制以多大幅度来更新参数的数,太小梯度下降可能很慢,太大可能会越过最低点甚至无法收敛,同样以下山为例,迈的步子太大可能就跨过了最低点),得到梯度下降公式:
- 按照这个公式一直更新 θ 值,直到 θ 不变了收敛了,梯度也为 0 了,到山下了!!
如果涉及了全部的训练样本,即批量梯度下降BGD:
每次更新都遍历训练集中所有的样本,以它们的预测误差之和为依据更新。
缺点:迭代速度很慢,而且计算代价太大啦!
因此进行优化:
随机梯度下降 SGD
方法:在每次更新的时候随机使用一个样本来表示所有样本,而不是用所有样本,进行梯度下降,来调整 θ