机器学习的目的是让机器自主从数据集中学习出一种规律,这种规律应该尽可能近似数据中客观的真实规律,然后用这种规律来完成回归、分类任务。
如何评价机器自己学到的规律跟客观规律的近似程度?
在训练中对比机器的预测结果和真实的结果之间的误差。
如何衡量误差?
使用损失函数(Loss Function),通过损失函数得到误差后,目标就很明显了,就是想办法最小化损失函数的输出值。
如何最小化损失函数的输出值?
一般地,损失函数是一个与模型中参数w相关的函数 J(w),此时就只需要找到一个(组)参数w,使得损失函数的输出值最小。
如何求解w使得损失函数的输出值最小?
一般的使用梯度下降法来找到 w ,对于线性回归模型而言也可以使用正规方程。
梯度:给定w时,函数值增加最快的方向。
梯度下降法原理:
由于损失函数是与模型参数w相关的函数,故更新w可以使得损失函数的值直接发生变化。为了让损失变小,需要找到让函数值变小的方向,让参数w沿这个方向更新就有可能可以找到最小值。
通过找到给定w时的梯度,就可以让w沿着梯度的反方向进行更新(即让w沿着函数值变小的方向更新),就可以让函数值变小。
梯度怎么求?
损失函数对w求偏导,就是给定w时,损失函数输出值增大最快的方向。
公式: $$ \mathcal{w}{new}=\mathcal{w}{old}-\eta \frac{\partial E}{\partial w_{old}} $$
BGD:批量梯度下降(Batch Gradient Descent)
在每次更新参数w时,会计算这一个batch中所有样本上损失函数的梯度并求和
缺点:计算量大,迭代缓慢
优点:全局最优
SGD:随机梯度下降(Stochastic Gradient Descent)
在每次更新参数w时,只采样一个样本,计算在这一个样本上损失函数的梯度
缺点:准确度下降,存在噪音,非全局最优
优点:训练速度快,支持在线学习
MBGD:小批量梯度下降(Mini-batch Gradient Descent)
在每次更新参数w时,随机选取一小部分样本来计算梯度
缺点:准确度不如BGD,非全局最优
优点:相对BGD更高效,相对SGD更准确,支持在线学习
在网络的训练中经过前向传播后得到的最终结果与训练样本的真实标签值总是存在一定的误差,这个误差用损失函数来反映,目的是最小化损失函数的输出值(模型预测的更准确)。
对于神经网络而言,每个w分布在不同的层中,需要找到每个w的位置,才能进行更新。需要使用损失函数的输出值Loss,从后往前依次求各个参数的偏导,这个过程就是反向传播。