神经网络——损失函数&反向传播
原创约 992 字大约 4 分钟
神经网络——损失函数&反向传播
在 神经网络基本概念 中已经介绍了神经网络的基本模型,而在构造好这个模型之后,对于一个完整的训练过程,我们还需要如下工作:
- 进行正向计算,得到原始数据通过神经网络得到的输出结果;
- 根据损失函数计算结果与实际结果之间的差异,并将差异给到优化函数;
- 优化函数通过反向传播层层更正权重参数,完成一轮训练;
- 重复上述过程直到损失值降到一个可接受范围得到最终模型。
本文将关注神经网络中的损失函数和反向传播过程,来了解神经网络是如何进行学习的。
损失函数
- 和其他模型一样,神经网络的损失函数选取方案也有很多,这里我们取集中常见的进行介绍
MAELoss/L1Loss
即平均绝对值误差,表达式为
即真实值和预测值的差值绝对值,该函数的优点是计算简单,不会导致梯度爆炸问题。但显然该函数并不光滑,转折点不能求导所以会导致不适用梯度下降算法。
MSELoss/L2Loss
MSE(均值平方误差)函数也是我们常用的损失函数,表达式为
该函数处处连续可导,但由于平方的存在会放大差异,可能导致梯度爆炸。
SmoothL1Loss
也叫HuberLoss,在L1Loss的基础上引入的更为光滑的函数,表达式为
可以看到这个函数不仅仅是在L1Loss的基础上的光滑改版,当预测值与真实值差别较小时,其实就是L2Loss,所以该函数结合了L1Loss和L2Loss的综合优点。
CELoss
- CE代表交叉熵(Cross Entropy),该内容可以参考 多标签学习 中对交叉熵的介绍。
反向传播
Back Propagation反向传播是神经网络中一个很重要的概念。对于正向传播即数据从输入层经过隐藏层到输出层得到结果。而对于反向传播,则是将结果和真实值得误差从输出层反向传播到输入层,更正网络中的参数。
上面我们已经介绍了损失函数,此时我们想知道某个权重是如何影响总误差的(即确定权重的影响来调整权重值),例如对于
我们设总误差为,可以通过求偏导的方式计算某个权重对总误差的影响,例如对于权重,我们可以通过链式法则得到偏导
其中代表节点的输出值,代表节点的输入加权和,即通过激活函数前的值。
最终我们便可以使用梯度下降利用这个值更新,有
其中为学习率。同理我们可以从后向前更新所有神经元的权重参数,完成一次训练。
这里要注意反向传播和梯度下降的区别,反向传播指的是如何从输出层向前计算梯度,也就是链式法则。具体更新权重的算法依然是梯度下降部分的内容。