梯度下降法
梯度下降的思想:我们随机选择一个参数组合()计算代价函数,然后我们寻找下一个能让
代价(损失)函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum) , 因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选
择不同的初始参数组合,可能会找到不同的局部最小值,下面就开始探讨梯度下降法
假设:
参数:
代价(损失)函数:
处理步骤:
其中:
m是样本数据的个数,是参数下标
随机梯度下降算法(stochastic gradient)
把全部的样本带入训练的时候,我们把這样的梯度下降称为:批量梯度下降算法(batch gradient descent)。
很容易知道它没迭代一次的复杂度为O(m(n+1)),为了减少复杂度,我们会选择一部分样本。选择样本一部分数据代入训练的时候,我们称之为随机梯度算法。
随机梯度算法和批量梯度算法优劣
1、如果优化的函数不是只有一个最大(小)值,那么就容易出现局部最优的情况,如下图,有多个极值大(小)点,那么就容易出现局部最优点
2、批量梯度下降可以保证一定有解,但是负责度高,如果数据不多的话,应该使用批量梯度下降。
MATLAB实现梯度下降
%梯度下降法
X=[1 4;2 5;5 1;4 2];
y=[19,26,19,20];
theta = [0 0];
a=0.005;
loss = 1;
iters = 1;
eps = 0.0001;
while iters<100
loss = 0;
for i = 1:length(y)
h = theta(1)*X(i,1)+theta(2)*X(i,2);
theta(1)=theta(1)+a*(y(i)-h)*X(i,1);
theta(2)=theta(2)+a*(y(i)-h)*X(i,2);
err = theta(1)*X(i,1)+theta(2)*X(i,2)-y(i);
loss = loss+err*err;
end
iters = iters+1;
end
iters
theta