上一篇文章了解了代价函数,现在问题来了,如何让代价最小呢?解决了代价最小问题,就获得了模型的参数,机器学习的目的就是根据经验数据求取模型参数,如果代价函数是连续可导的,那我们就可以采用下陡坡算法-梯度下降的方法找到最小值,从而求解。
首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的陡坡方向-梯度,沿着陡坡方向-梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置陡坡方向-梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。
从上面的解释可以看出,下陡坡算法不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,下陡坡算法得到的解就一定是全局最优解。
怎么找呢?就是猜,按照规律猜:
1.f'(x)>0,函数单调增加,增大x函数值也会变大,我们想找最小值肯定比在当前这个点 小。那么我们让x 小一点。
2.f'(x)<0,函数单调递减,增大x函数值也会变小,我们想找最小值肯定比在当前这个点大。那么我们让x 大一点。
3.重复上面的猜测,进行到底,直到f'(x)的值接近0,就找到了我们需要的x值
对于多元函数,把倒数换做偏导数就可以了。
梯度下降就是要找到取最小值得参数点,记住不是最小值,因为损失函数的最小值恒为0(全拟合)
机器学习算法就是要找到合适的代价函数,能反映模型预测准确与否,而代价函数则要求倒数好求,便于计算,训练
下陡坡算法-梯度下降法的代数方式描述
1. 先决条件: 确认优化模型的假设函数和损失函数。
2. 算法相关参数初始化:主要是初始化θ0,θ1...,θnθ0,θ1...,θn,算法终止两步距离差ε以及步长α。在没有任何先验知识的时候,我喜欢将所有的θθ初始化为0, 将步长初始化为1。在调优的时候再 优化。
3. 算法过程:
1)确定当前位置的损失函数的陡坡方向梯度
2)用步长乘以损失函数的陡坡方向-梯度,得到当前位置下降的距离
3)确定是否所在的陡坡方向-梯度下降的距离都小于ε,如果小于ε则算法终止,当前所有的θi(i=0,1,...n)即为最终结果。否则进入步骤4.
4)更新所有的θ,对于θi,其更新表达式如下。更新完毕后继续转入步骤1.