![fde97f7bf525b3e8a4d9691f89926661.png](https://i-blog.csdnimg.cn/blog_migrate/e8741e215c1e6fdfe9df968e8e1b2836.jpeg)
现在,有一个分类问题:
- feature是2维的向量
- 目标类别有3种
- 一共有4个样本:
我们准备用一个只有一层的全连接神经网络来解决这个问题(使用多层神经网络推导太复杂,并且不利于理解,多层神经网络不是讲清此问题的关键)。
首先,我们需要使用one-hot来表示目标类别(为什么使用one-hot是另一个问题),所以,全连接神经网络的最后一层有三个数字。
哎呀!样本数太多了写起来很复杂,在计算loss时,只是简单地对多个样本产生的损失求均值,所以下面我们改一下问题:假设只有一个样本,这个样本的特征为
不妨设这个样本的类别为1,它的one-hot真实向量为(1,0,0)。
其实,在最后一层输出的时候,我们需要使用softmax把
下面看平方误差:
再看交叉熵误差:
其中,
对于平方误差:
我们想知道的是什么?我们想知道的是
记绝对误差
因为我们使用了one-hot,所以
当
当
此式中,
这个函数长啥样子?
import
![8b8d30ff80445df2fc9248d64309acfb.png](https://i-blog.csdnimg.cn/blog_migrate/34a0cc65cc28730786597ae7fb223dfa.png)
随着绝对误差的增大,权值需要调整的幅度先变大后变小,这就导致当绝对误差很大时,模型显得“自暴自弃”不肯学习
对于交叉熵误差:
可以看到,使用交叉熵之后,绝对误差和需要调整的幅度成正比。
我们回过头来比较平方损失和交叉熵损失的区别,会发现:
- 平方损失的“罪魁祸首”是sigmoid函数求导之后变成
,平白无故让曲线变得非常复杂,如果前面能够产生一个
把后面多余项“吃掉”多好
- 交叉熵的优势就是:它求导之后只提供了一个
去中和后面的导数。
以上都只是理论推导,那么实际上到底是不是这么回事呢?我们可以做个实验:
import
![fa0d2aa56f950e1d7604b64fab39e3e2.png](https://i-blog.csdnimg.cn/blog_migrate/2a489d7afa11ac8e484714359c700caa.png)
参考资料
简单的交叉熵损失函数,你真的懂了吗?www.jianshu.com![0fbe54e420b297e5d4fb136d5d52eeee.png](https://i-blog.csdnimg.cn/blog_migrate/f7badede9384a031b88f4b3a2b1cc501.jpeg)
![bb20646f1b77e29e51b21e486a74ceac.png](https://i-blog.csdnimg.cn/blog_migrate/6a05fad1af77e7cfd1d4ffe264a638e9.jpeg)
![cab61ce84a2d44622c980ba0b53de9dd.png](https://i-blog.csdnimg.cn/blog_migrate/49475a229e9322161692d57ad0f14a2f.jpeg)