均方差损失函数和交叉熵损失函数的关系

简介

在前两篇文章手写一个全连接神经网络用于MNIST数据集全连接神经网络之反向传播算法原理推导中,我们讨论了全连接神经网络是如何应用梯度下降算法来学习权重和偏置,以及反向传播算法的工作原理。在些例子中,我们都使用了均方差损失函数,因为它的形式非常直观,直接刻画了期望输出与真实值之间的差值。但是它也有一些弊端,本文将重点讨论均方差损失函数存在的问题,并引出交叉熵损失函数。


均方差损失函数

先回忆一下均方差损失函数的定义:

图1

这里的w代表的是网络中所有权重的集合,b是所有的偏置,n是训练输入数据的个数,y(x)是输入x对应的标签,a是表示当输入为x时神经网络输出的向量,求和则是在总的训练输入x上进行的。
再回忆一下,随机梯度下降算法中权重和偏置更新的方程,如下:

通过上式可以知道,权重的更新跟损失函数的偏导数\frac {\partial C}{\partial w_k}\frac {\partial C}{\partial b_l}有关系。在学习率一定的情况下,偏导数越大,权重和偏置更新的越快。反之,越慢。
再根据全连接神经网络之反向传播算法原理推导提及到的反向传播的四个方程,如下:

我们可以看到偏导数\frac {\partial C}{\partial w_k}\frac {\partial C}{\partial b_l}又和误差\delta ^l有关,而误差\delta ^l又与激活函数\sigma的导数\sigma '有关系。费了这么多口舌,其实是想说明权重和偏置的更新最终会和激活函数的导数\sigma '有关系。而这会导致一个什么问题呢?
先看下激活函数\sigma(x) = \frac {1}{1+ e^{-x}}的图像:
Sigmoid函数图像

对Sigmoid函数求导得:

\sigma ' (x)的图像如下:

Sigmoid导数图像

可以看到,当输入x较大或者较小的时候,\sigma (x)的值趋向于1或者0,此时\sigma '(x)的值就非常小,接近于0。这会导致梯度消失的问题,下面以一个小例子来说明。
a_i =\sigma(z_i) = \sigma(w_i*x_i \ + \ b_i),以下图的神经网络结构为例,它每一层只包含一个神经元:

我们可以求得C对偏置b_1的偏导数如下:

根据Sigmoid导数的图像可知,\sigma '(z)的最大值为0.25,而一般随机初始化的权重w和偏置b一般都小于1,随着层数的增加,上式中的链式求导连乘也会越来越深,则\frac {\partial C}{\partial b_1}的值将会越来越小,导致越靠近输入层的神经元的权重和偏置越难得到更新,即便网络训练完了,这些神经元的权重和偏置还是跟初始值差不多,那么此时的深度神经网络就只相当于后几层的浅层学习网络结构了。
当然解决这个问题的办法有很多,常见的就是换成Relu激活函数,但这不是本文讨论的重点,本文将从损失函数的角度来解决这个问题。


交叉熵损失函数

如何来解决上一节提出问题呢?先给出结论,我们可以使用交叉熵损失函数来代替均方差损失函数,定义如下:
交叉熵损失函数定义

其中n是训练样本的总数,求和是在所有的训练输入x上进行的,yx对应的输出,a是神经元的输出,a = \sigma(z),其中z = \sum_j w_jx_j +b
不同于均方差损失函数的定义,我们可以一眼看出来它就是衡量了期望输出与实际输出之间的误差,交叉熵损失函数貌似不太能看出来它是如何衡量期望输出和实际输出之间的误差的。下面详细解释一下,主要有2点:

  1. 它是非负的,可以看到求和符号中的每一项都是负数,累加起来之后仍然是负数,最后再添加一个负号,所以最后的结果是非负的。
  2. 如果a = y = 1a = y = 0,那么C趋近于0,如果a = 0,y = 1a = 1, y = 0,那么C会变得很大。即,神经元输出与真实值相近,交叉熵趋于0,反之,趋于无穷大,这很符合直觉。

那它是如何解决因梯度消失而导致的参数学习缓慢的问题呢?我们来求一下C关于权重的偏导数:

注意上式证明的过程中,用到了(1)式的结论。

可以看到,在使用交叉熵损失函数之后,计算C对权重w的偏导数的时候,最终的式子里面没有再出现\sigma '(z),并且可以看出,偏导数受到(\sigma (z) - y)的影响,即真实输出与实际输出的差值。当差别越大时,偏导数越大,权重学习速度就会越快。避免了均方差损失函数中因为\sigma '(z)导致的学习缓慢。
同理,C关于偏置b_j的偏导数如下:


交叉熵损失函数与均方差损失函数之间关系

上一节直接给出了交叉熵的定义,而并没有描述它是如何得出的,它究竟表示什么,最开始的研究者是如何想到这个概念的呢?

我们先以一个简单的只包含一个神经元的网络结构开始,如下:

同样采用均方差损失函数,定义如下:

其中a=\sigma(z)是神经元的输出,y是目标输出。分别对wb求偏导得:

既然我们发现了权重学习缓慢的原因是因为\sigma '(z)的值过小,那么我们何不直接去掉上面两个偏导数中包含的\sigma '(z)呢,那么可以得到:

如果我们选择的损失函数对权重和偏置的偏导数为上式所示,那么它们就具备了很简单直观的特性。即,误差越大,偏导数越大,神经元就学习得越快,这正是我们所需要的。我们来反向推导一下,首先有:

a=\sigma (z), 由(1)式可知\sigma'(z) = \sigma(z)(1- \sigma(z)),将其带入(2)式得:

又我们令\frac {\partial C}{\partial b } = (a-y),故结合起来可得:

对上式进行积分:

其中C_1是一个常量。上式是一个单独的训练样本x对损失函数C的贡献,为了得到整个损失函数,需要对全部训练样本进行平均,得到;

这个形式就跟我们上一节给出的交叉熵损失函数定义很相似了。可以看到,交叉熵损失函数不是凭空得来的,而是以一种自然而然的方式计算出来的。


交叉熵函数的正向推导

上一节给出了交叉熵损失函数与均方差损失函数的关系。通过改进均方差损失函数的偏导数,然后通过不定积分反向推导出新的损失函数,即交叉熵损失函数。
下面从概率的角度来推导一下交叉熵损失函数。
我们的识别手写数字的神经网络的输出层会通过激活函数\sigma\sigma函数函数的输出在0~1之间,这个输出可以认为是一个概率值,即代表了预测当前神经元为真的可能性。值越大,代表当前神经元输出为真的可能性越大。比如第1个神经元输出的值最大,则代表神经网络认为这个数字是“0”。
即对于输出层的某个神经元,我们用\hat y来代表该神经元预测为真的概率:

同理,神经元预测为假的概率为:

将这两种情况写在一起,有如下形式:

式(11)只不过是聚合了式(9)和(10),本质上是一样的。我们希望P(y|x)的概率越大越好,为了计算方便,我们对式(11)引入log函数,这并不会改变其单调性,有:

我们的目的是希望P(y|x)越大越好,先在上式前添加一个负号,变成-logP(y|x),则现在的目的就变成了希望它越小越好,这么做更加符合直觉。接着我们可以定义损失函数C

由于这只是针对单个训练样本x的损失函数,对于全体n个训练样本而言,我们可以累加起来求平均,得到如下形式:

这与上面提及的交叉熵损失函数是一致的。

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容