从零开始学人工智能(19)--数学 · 神经网络(三)· 损失函数

浏览: 1710

作者:射命丸咲    Python 与 机器学习 爱好者

知乎专栏:https://zhuanlan.zhihu.com/carefree0910-pyml 

个人网站:http://www.carefree0910.com 

往期阅读:

机器学习综述

从零开始学人工智能(17)--数学 · 神经网络(一)· 前向传导

从零开始学人工智能(18)--数学 · 神经网络(二)· BP(反向传播)

关于损失函数宽泛而准确的数学定义,我感觉我不会说得比 Wiki 更好,所以这一章主要还是介绍一些神经网络中常用的损失函数。然而即使把范围限制在 NN,如何选、为何选相应的损失函数仍然是一个不平凡的数学问题。囿于时间(和实力)、这一章讲的主要是几个损失函数的定义、直观感受和求导方法。

从名字上可以看出,损失函数是模型对数据拟合程度的反映,拟合得越差、损失函数的值就应该越大。同时我们还期望,损失函数在比较大时、它对应的梯度也要比较大,这样的话更新变量就可以更新得快一点。我们都接触过的“距离”这一概念也可以被用在损失函数这里,对应的就是最小平方误差准则(MSE):

image.png

其中G是我们的模型、它根据输入矩阵X输出一个预测向量G(X)

这个损失函数的直观意义相当明确:预测值G(X)和真值Y的欧式距离越大、损失就越大,反之就越小。它的求导也是相当平凡的:

image.png

其中 w 是模型G中的一个待训练的参数

由于 MSE 比较简单、所以我们能够从一般意义上来讨论它。为便于理解,以下的部分会结合 NN 这个特定的模型来进行阐述。回顾 BP 算法章节中的式子:

image.png

这里的image.png其实就是G(X)。在 NN 中,我们通过最后一层的 CostLayer 利用image.png和真值Y得出一个损失、然后 NN 通过最小化这个损失来训练模型

注意到上式的最后除了损失函数自身的导数以外、还有一项激活函数(https://en.wikipedia.org/wiki/Activation_function)的导数。事实上,结合激活函数来选择损失函数是一个常见的做法,用得比较多的组合有以下四个:

  • Sigmoid 系以外的激活函数 + MSE

    • MSE 是个万金油,它不会出太大问题、同时也基本不能很好地解决问题。这里特地指出不能使用 Sigmoid 系激活函数,是因为 Sigmoid 系激活函数在图像两端都非常平缓、从而会引起梯度消失的现象。MSE 这个损失函数无法处理这种梯度消失、所以一般来说不会用 Sigmoid 系激活函数 + MSE 这个组合。以 Sigmoid 函数为例:

      image.png


      上面这张图对应的情况是输入为v、预测为但真值为 0。可以看到,即使此时预测值和真值之间的误差几乎达到了极大值,但由于太小、最终得到的梯度image.png也会很小、导致收敛速度很慢


  • Sigmoid + Cross Entropy

    • Sigmoid 激活函数之所以有梯度消失的现象是因为它的导函数形式为

      。想要解决这个问题的话,比较自然的想法是定义一个损失函数、使得它的分母上有这一项。经过数学家们的工作,我们得到了 Cross Entropy 这个(可能是基于熵理论导出来的)损失函数,其形式为:

    image.png

    • 它的合理性较直观:当y=0时、起作用的只有,此时越接近0、C就越小;y=1的情况几乎同理。下面给出其导数形式:

    image.png

    可见其确实满足要求

  • Softmax + Cross Entropy / log-likelihood

    • 这两个组合的核心都在于前面用了一个 Softmax。Softmax 不是一个损失函数而是一个变换,它具有相当好的直观:能把普通的输出归一化成一个概率输出。比如若输出是 (1, 1, 1, 1),经过 Softmax 之后就是 (0.25, 0.25, 0.25, 0.25)。它的定义式也比较简洁:

      image.png

      注意,这里的通常是一个线性映射:

      image.png

      亦即 Softmax 通常是作为一个 Layer 而不是一个 SubLayer
      之所以要进行这一步变换,其实和它后面跟的损失函数也有关系。Cross Entropy 和 log-likelihood 这两个损失函数都是用概率来定义损失的、所以把输出概率化是一个自然的想法。Cross Entropy 上面已有介绍,log-likelihood 的定义则是:

      image.png

      亦即预测概率输出中yi对应的类概率的负对数。当预测概率输出中yi类概率为的1话、损失就是0;当概率趋于0时、损失会趋于无穷

    • Cross Entropy 的求导上面也说了,下面就给出 Softmax + log-likelihood 的求导公式:

      image.png

      其中

      image.png


      从而

      image.png


以上、大概讲了一些损失函数相关的基本知识。下一章的话会讲如何根据梯度来更新我们的变量、亦即会讲如何定义各种 Optimizers 以及会讲背后的思想是什么。可以想象会是一个相当大的坑……

希望观众老爷们能够喜欢~



公众号后台回复关键词学习

回复 人工智能          揭开人工智能的神秘面纱

回复 贝叶斯算法      贝叶斯算法与新闻分类

回复 机器学习          R&Python机器学习

回复 阿里数据          阿里数据系列课程

回复 Python            Python机器学习案例实战

回复 Spark              征服Spark第一季

回复 kaggle             机器学习kaggle案例

回复 大数据             大数据系列视频

回复 数据分析         数据分析人员的转型

回复 数据挖掘         数据挖掘与人工智能

回复 机器学习         R&Python机器学习

回复 阿里数据         阿里数据系列课程

回复 R                     R&Python机器学习入门

推荐 0
本文由 人工智能爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册