跳至主要內容

神经网络——损失函数&反向传播

原创Xenny约 992 字大约 4 分钟深度学习深度学习神经网络

神经网络——损失函数&反向传播

  • 神经网络基本概念 中已经介绍了神经网络的基本模型,而在构造好这个模型之后,对于一个完整的训练过程,我们还需要如下工作:

    1. 进行正向计算,得到原始数据通过神经网络得到的输出结果;
    2. 根据损失函数计算结果与实际结果之间的差异,并将差异给到优化函数;
    3. 优化函数通过反向传播层层更正权重参数,完成一轮训练;
    4. 重复上述过程直到损失值降到一个可接受范围得到最终模型。

    本文将关注神经网络中的损失函数和反向传播过程,来了解神经网络是如何进行学习的。

损失函数

  • 和其他模型一样,神经网络的损失函数选取方案也有很多,这里我们取集中常见的进行介绍

MAELoss/L1Loss

  • 即平均绝对值误差,表达式为

    L=i=1ny(i)h(x(i)) L = \sum_{i=1}^{n}|y^{(i)} - h(x^{(i)})|

    即真实值和预测值的差值绝对值,该函数的优点是计算简单,不会导致梯度爆炸问题。但显然该函数并不光滑,转折点不能求导所以会导致不适用梯度下降算法。

MSELoss/L2Loss

  • MSE(均值平方误差)函数也是我们常用的损失函数,表达式为

    L=12i=1n(y(i)h(x(i)))2 L = \frac{1}{2}\sum_{i=1}^n(y^{(i)} - h(x^{(i)}))^2

    该函数处处连续可导,但由于平方的存在会放大差异,可能导致梯度爆炸。

SmoothL1Loss

  • 也叫HuberLoss,在L1Loss的基础上引入的更为光滑的函数,表达式为

    L=1ni=1n{0.5(y(i)h(x(i)))2,y(i)h(x(i))<1y(i)h(x(i))0.5,other L = \frac{1}{n}\sum_{i=1}^n\begin{cases} 0.5\cdot (y^{(i)} - h(x^{(i)}))^2, &|y^{(i)} - h(x^{(i)})| < 1\\ |y^{(i)} - h(x^{(i)})| - 0.5, &other \end{cases}

    可以看到这个函数不仅仅是在L1Loss的基础上的光滑改版,当预测值与真实值差别较小时,其实就是L2Loss,所以该函数结合了L1Loss和L2Loss的综合优点。

CELoss

  • CE代表交叉熵(Cross Entropy),该内容可以参考 多标签学习 中对交叉熵的介绍。

反向传播

  • Back Propagation反向传播是神经网络中一个很重要的概念。对于正向传播即数据从输入层经过隐藏层到输出层得到结果。而对于反向传播,则是将结果和真实值得误差从输出层反向传播到输入层,更正网络中的参数。

    上面我们已经介绍了损失函数,此时我们想知道某个权重是如何影响总误差的(即确定权重的影响来调整权重值),例如对于

    神经网络
    神经网络

    我们设总误差为Et=Eo1+Eo2E_{t} = E_{o1} + E_{o2},可以通过求偏导的方式计算某个权重对总误差的影响,例如对于权重w5w5,我们可以通过链式法则得到偏导

    Etw5=EtOo1Oo1Neto1Neto1Oo1 \frac{\partial E_{t}}{\partial w5} = \frac{\partial E_t}{\partial O_{o1}}\cdot\frac{\partial O_{o1}}{\partial Net_{o1}}\cdot\frac{\partial Net_{o1}}{\partial O_{o1}}

    其中Oo1O_{o1}代表o1o1节点的输出值,Neto1Net_{o1}代表o1o1节点的输入加权和,即通过激活函数前的值。

    反向传播
    反向传播
  • 最终我们便可以使用梯度下降利用这个值更新w5w5,有

    w5=w5ηEtw5 w5^{'} = w5 - \eta\cdot \frac{\partial E_{t}}{\partial w5}

    其中η\eta为学习率。同理我们可以从后向前更新所有神经元的权重参数,完成一次训练。

  • 这里要注意反向传播和梯度下降的区别,反向传播指的是如何从输出层向前计算梯度,也就是链式法则。具体更新权重的算法依然是梯度下降部分的内容。