构建人工神经网络解决分类问题时,选取softmax激活+交叉熵损失函数组合详解

引例

引自知乎专栏:https://zhuanlan.zhihu.com/p/35709485

输入一个动物图像,来判别所属的动物类别,有三种可能,分别为猫、狗、猪。

我们想要通过构建人工神经网络去处理这个三分类问题,当从最后一层隐藏层向输出层前进时,这个时候我们得到了输出层的输入,我们采用softmax激活函数来获得输出层的输出。softmax激活函数本质上运用了机器学习中的逻辑回归算法。以该问题为例,x表示输出层获得输入, A 1 . A 2 . A 3 A_1.A_2.A_3 A1.A2.A3分别代表该图像是猫、狗、猪。我们希望将输入x映射到[0,1]的范围内,并保证映射之后的输入之和为1。以此来将映射之后的结果作为 A 1 , A 2 , A 3 A_1,A_2,A_3 A1,A2,A3发生的概率。以概率论的知识去理解,我们就是将隐藏层向输出层的输入转换为 p { A 1 ∣ x } , p { A 2 ∣ x } , P { A 3 ∣ x } p\{A_1|x\},p\{A_2|x\},P\{A_3|x\} p{A1x},p{A2x},P{A3x}。在求得概率之后,我们在输出独热码时将概率最大的那一位置1,对应于一种特定的动物。

有了模型之后,我们需要通过定义损失函数来判断模型在样本上的表现了,并以此来指导我们反向传播的过程来更新权重,使得其输出的准确率更高。那么我们可以定义哪些损失函数呢?

在老师给出的手写数字识别例子中,使用的是sigmoid分类器加均方误差作为损失函数的组合。但是这在训练过程中并不会经常使用,原因就在于在分类问题中,使用sigmoid/softmx得到概率,配合MSE损失函数时,采用梯度下降法进行学习时,会出现模型一开始训练时,学习速率非常慢的情况。

因此我们选取一个机器学习分类问题和信息论中一个非常重要的函数:交叉熵损失函数来作为我们损失函数。

如果你想要充分了解交叉熵损失函数,请移步博客:

https://blog.csdn.net/b1055077005/article/details/100152102

前面已经通过softmax求解出图像属于某一种动物的概率,也得到了最终的预测结果的独热编码形式。我们要做的就是让属于每一种动物的概率乘上他对应的独热编码(0或者1)并求和取负,来得到我们最终的损失函数。

但是我们要知道的是,通常一次训练样本数量绝对不会只有1个,也就是通常会输入多张图片。因此完整的交叉熵损失函数对应如下:
L = − 1 N ∑ i ∑ c = 1 M y i c l o g ( p i c ) L = -\frac{1}{N} \sum_i \sum_{c=1}^{M} y_{ic}log(p_{ic}) L=N1ic=1Myiclog(pic)
其中:M是所要区分的类别数量,即输出层的神经元数量。该问题是3个。

y i c y_ic yic代表如果样本i的识别结果属于第c个类别,则为1,否则为0

p i c p_{ic} pic代表样本i属于第c个类别的概率。

如果还是不太理解,我们继续结合具体的例子。

在这里插入图片描述

以该问题为例,它的损失函数计算过程如下:

在这里插入图片描述

以上就是输出层到损失函数的完整过程。可以通过一张图片来概括:

在这里插入图片描述

注意:这张图片在理解上存在些许问题,再求解完概率之后,就已经获得了独热编码,并且损失函数值的计算也需要用的独热编码,而不是通过损失函数模块获取独热编码,因此我认为将独热编码放于损失函数模块之前更为合适一些。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值