交叉熵(cross-entropy)损失函数求导过程推导
今天,师兄突然问我关于交叉熵求导的问题,分分钟被难住了,感慨自己读研一年多了,连这种基本问题都不懂。在师兄的帮助下,从头到尾推导了一遍, 决定写篇博客记录一下自己的收获。
1. 什么是交叉熵?
1.1 熵
首先,我们要知道什么是熵(entropy), 熵的物理意义是对体系混乱程度的一种度量方式。后来,香农将熵的概念引入到信息论中,提出了所谓的“信息熵”概念,从概率论的角度来看,就是说某个事件发生的不确定性越大,信息熵就越大。下文中提到的熵都是指“信息熵”。信息熵的公式如下:
公式中的表示的是事件P发生第i类的概率。
1.2 KL散度
在说交叉熵之前,还要提一下KL散度(Kullback-Leibler divergence),大家平时说的KL散度(其实也是一种熵,我们称之为相对熵。KL散度可以用来度量两个分布的相似度,比如在机器学习中,我们就可以用KL散度来衡量样本真实分布与预测分布之间的差异。KL散度的公式如下:
1.3 交叉熵
我们对KL散度进行如下变换:
因为我们知道在机器学习问题中,样本的真实分布是已知的,所以真实分布的熵是固定不变的,的大小只与后面的部分有关。于是,我们把后面的那一部分称为交叉熵,在优化过程中,只要优化这一部分就行了。交叉熵的公式如下:
2. 关于softmax函数
在深度学习中,softmax函数是分类任务中常用的**函数。softmax的公式如下:
其中,表示第j个神经元的输出。有兴趣的同学,推荐看一下link,里面有一副图十分形象。
3. 推导过程
在开始正式的推导之前,我再讲一下容易被大家遗忘的基础知识。
商函数的求导法则:
好了,介绍完所有相关的基础知识,我们接下来就可以开始正式推导的工作了。
3.1 关于softmax的求导
首先,我们对softmax进行求导:
3.2 关于cross-entropy的求导
为了保证符号上的统一,我们在这定义神经网络优化过程中的交叉熵形式为
其中表示预测得到的的样本分布,表示真实的样本分布。
在这里我们令,根据链式法则可做以下推导:
然后,我们将对softmax的求导结果代入到上式中,可得
对交叉熵CE对求导可得
带入到式中,得到
ok,到这里我们的工作就算是正式收工了。其实在写的时候,很多东西我自己也不是特别明白,但是一边写一边想,就感觉自己的思路越来越清晰了。推导过程中还是有很多的细节我没有一一提到,相信大家动手推导一遍就能都能明白。欢迎大家留言交流。HHHH~