1. 交叉熵理论
交叉熵与熵相对,如同协方差与方差。
熵考察的是单个的信息(分布)的期望:
交叉熵考察的是两个的信息(分布)的期望:
详见 wiki Cross entropy
y = tf.placeholder(dtype=tf.float32, shape=[None, 10])
.....
scores = tf.matmul(h, w) + b
probs = tf.nn.softmax(scores)
loss = -tf.reduce_sum(y*tf.log(probs))
2. 交叉熵代价函数
x 表示原始信号, z 表示重构信号,以向量形式表示长度均为 d ,又可轻易地将其改造为向量内积的形式。
3. 交叉熵与 KL 散度(也叫相对熵)
- Intuitively, why is cross entropy a measure of distance of two probability distributions?
- 熵、交叉熵、相对熵(KL 散度)意义及其关系
- 机器学习基础(五十八)—— 香农熵、相对熵(KL散度)与交叉熵
所谓相对,自然在两个随机变量之间。又称互熵,Kullback–Leibler divergence(K-L 散度)等。设 p(x) 和 q(x) 是 X 取值的两个概率分布,则 p 对 q 的相对熵为:
(在稀疏型自编码器损失函数的定义中,基于 KL 散度的惩罚项常常定义成如下的形式:
其中: ρ^=1k∑i=1khi (遍历的是层内的所有输出, ∑mj=1 则是遍历所有的层))
4. 神经网络中的交叉熵代价函数
为神经网络引入交叉熵代价函数,是为了弥补 sigmoid 型函数的导数形式易发生饱和(saturate,梯度更新的较慢)的缺陷。
首先来看平方误差函数(squared-loss function),对于一个神经元(单输入单输出),定义其代价函数:
其中 a=σ(z),z=wx+b ,然后根据对权值( w )和偏置(
根据偏导计算权值和偏置的更新:
无论如何简化,sigmoid 型函数的导数形式 σ′(z) 始终阴魂不散,上文说了 σ′(z) 较容易达到饱和,这会严重降低参数更新的效率。
为了解决参数更新效率下降这一问题,我们使用交叉熵代价函数替换传统的平方误差函数。
对于多输入单输出的神经元结构而言,如下图所示:
我们将其损失函数定义为:
其中 a=σ(z),z=∑jwjxj+b
最终求导得:
就避免了 σ′(z) 参与参数更新、影响更新效率的问题;