在机器学习中 我们要训练得到的模型,其实 是一个【 学习拟合 自变量和因变量 关系】的一个过程,关于 到底 是怎么拟合 学习的呢,分两种,一种是通晓了公式秘籍 一步到位的,一种是 以迭代方式 步步为营 不断逼近的方式。不论哪种方式 都可以有效抵达 最优点 ,或许是局部最优点。
那我们说 现实意义上 模型终归只是一个模型而已 他是抽象的一个黑盒子的参数集合,他是 现实世界 在抽象计算机上的一个映射。哪怕可以解释 ,他只是 无限 接近 无限 拟合,哪怕 Predict 是 100%。
只要 模型存在 ,那么就会有误差存在,如果Predict是100% 正确,我们就说 误差 为0,自然 Predict 很难 100%,对于回归问题,每一条 rawdata 向量化feature 对应y target 的都有误差,那么误差 的 汇总【不一定是 误差值求和,也可能是 误差绝对值 求和,也可能是误差平方和 相加】就是 这个模型的损失,一个模型 要从大局上来看损失,这个损失程度就是 这个模型评估优劣的一项标准。模型越好 损失越小,模型越差 损失越大。
那么怎么评价损失呢,朴素来说我们 期待试用 拟合的残差来作为 损失 ,但是 拟合来说有正有负,最后汇总起来,假如一个很烂的模型,有一半残差都是正值很大,有一半残差都是负值也很大,但是假如有可能汇总相加在一起就是0了,也可能是负值,我们能说这个模型超级棒嘛,当然是有问题的。那我们再来考虑使用 绝对值,绝对值总体上来说 不会出现 负值,但是 计算起来不够友好,另外对模型 的真正拟合程度反映不够直观,不能 突出异常值存在。好 就剩 平方和了,平方和的优点在于 能够体现 放大 模型的 拟合效果,如果 残差有一个很大,就会被无限放大,影响模型的拟合效果,模型就不算是最优的,需要继续训练找到最佳的。所以来说 平方和的损失函数 更对异常值 敏感。∑(y^ --y)^2
所以在回归问题上 我们大对数的损失函数都是 平方和 形式的累加和。
好了既然我们 确定了 损失函数了,那我们 最关键的一步就是 模型的参数估计。
拿线性回归函数来说 y= ß1.X1+ß2.X2+ß3.X3+....+ßn..Xn+b
我们 如何 去 估计 ß1 ß2 ß3 的取值呢。
这个从源函数是不容易找打答案的,我们来看损失函数
L(f)=∑(ß1.X1+ß2.X2+ß3.X3+....+ßn..Xn+b--y^),
想要求得参数 就得 求ß i 的偏导
∂L(f)/∂ßi=∆∑(ß1.X1+ß2.X2+ß3.X3+....+ßn..Xn+b--y^)/∆ßi
当其值为0时求得 ß i的 最优解。
这样一来 由公式就可以各个击破 ,每个参数的值了。这个是一部到位
下面来看梯度下降 ,
所谓的梯度下降,我们优先考虑三维数据,在三位数据中 我们得到的函数所映射的面可能不是一个平面,可能是多个光滑的曲面,可能会非常的有没。那么 我们的损失函数有时候 就是代表这么的一个多个曲面的集合。我们想要找到损失函数的最小值,可能就是这个 曲面集合的【低洼地带】 有的时候 低洼地带可能只是一个局部最小值,所以需要谨慎,那我们是怎么去逼近这个低洼地带的呢,就是 靠着梯度下降,我们假设低洼地带的梯度为0,从任一点开始,只要 梯度是不断下降的趋势我们就像做电梯一样往下走,当然找到梯度下降最快的方向,我们 迭代的次数就越少,就越省力。
梯度下降法的缺点是到最小点的时候收敛速度变慢,并且对初始点的选择极为敏感,其改进大多是在这两方面下功夫
什么是梯度方向 就是 某一维数据的偏导 的导数,等于是求二次导数,对每个 偏导的导数 做比较,查看 到底是哪一维 下降是最多的, 这样一来 梯度下降很难是一条直线,碰碰撞撞下就达到了低洼地带。
导数与梯度
梯度的定义如下:
梯度的提出只为回答一个问题:
函数在变量空间的某一点处,沿着哪一个方向有最大的变化率?
梯度定义如下:
函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。
这里注意三点:
1)梯度是一个向量,即有方向有大小;
2)梯度的方向是最大方向导数的方向;
3)梯度的值是最大方向导数的值。
导数与向量
提问:导数与偏导数与方向导数是向量么?
向量的定义是有方向(direction)有大小(magnitude)的量。
从前面的定义可以这样看出,偏导数和方向导数表达的是函数在某一点沿某一方向的变化率,也是具有方向和大小的。因此从这个角度来理解,我们也可以把偏导数和方向导数看作是一个向量,向量的方向就是变化率的方向,向量的模,就是变化率的大小。
那么沿着这样一种思路,就可以如下理解梯度:
梯度即函数在某一点最大的方向导数,函数沿梯度方向函数有最大的变化率。
梯度下降法
既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化目标函数的时候,自然是沿着负梯度方向去减小函数值,以此达到我们的优化目标。
如何沿着负梯度方向减小函数值呢?既然梯度是偏导数的集合,如下:
同时梯度和偏导数都是向量,那么参考向量运算法则,我们在每个变量轴上减小对应变量值即可,梯度下降法可以描述如下:
以上就是梯度下降法的由来,大部分的机器学习任务,都可以利用Gradient Descent来进行优化。
其中 α 就是 机器学习中的学习率 ,超参数 ,一般来说,α 刚开始 稍微大点,容易较快逼近,越到最后 α 越小 ,不然容易震荡,无法找到最优点
参考资料
https://blog.csdn.net/walilk/article/details/50978864
参考书:
《高等数学》
《简明微积分》
参考链接:
梯度
https://zh.wikipedia.org/zh-cn/%E5%81%8F%E5%AF%BC%E6%95%B0
方向导数和梯度
http://blog.csdn.net/wolenski/article/details/8030654