当前位置: 首页 > news >正文

卷积神经网络基础(五)

6.3 Softmax-with-Loss 层

我们最后介绍输出层的softmax函数,之前我们知道softmax函数会将输入值正规化之后再输出。在手写数字识别的例子中,softmax层的输出如下:

输入图像通过Affi ne层和ReLU层进行转换,10个输入通过Softmax层进行正 规化。在这个例子中,“0”的得分是5.3,这个值经过Softmax层转换为0.008 (0.8%) ;“ 2”的得分是10.1,被转换为0.991(99.1%)

softmax函数会将输入值正规化,即输出值的和为1之后再进行输出。手写数字的分类有10个,所以softmax层输入也有十个,输出也是10个,代表各类别的概率。

神经网络中进行的处理有推理(inference)和学习两个阶段。神经网络的推理通常不使用Softmax层。比如,用上面的网络进行推理时, 会将最后一个Affine层的输出作为识别结果。神经网络中未被正规化的输出结果(上图中Softmax层前面的Affine层的输出)有时被称为“得分”。也就是说,当神经网络的推理只需要给出一个答案的情况下,因为此时只对得分最大值感兴趣,所以不需要Softmax层。 不过,神经网络的学习阶段则需要Softmax层。

我们接下来来实现softmax层,由于这里也包含作为损失函数的交叉熵误差(cross entropy error),所以也被称为soft-max-Loss层,其计算图如下:

由于这个计算图较为复杂,我们只给出结果,不进行推理计算,下面是简化后的计算图:

我们假设这里进行三类的分类,接受前面层的三个输入a1 a2和a3,softmax层对输入值进行正规化后输出y1 y2和y3,传递给交叉熵误差层,结合教师标签t,输出损失L。

特别注意在这个计算图中的反向传播中,输入数据的导数为y-t,y是softmax层输出,t是监督数据,所以y-t是输出和教师标签的差分。神经网络的反向传播会把这个差分表示的误差传递给前面的层,这是神经网络学习中的重要性质。

神经网络进行学习的目的就是通过调整权重参数,使神经网络输出softmax层输出y和教师标签t尽可能接近,即输入a的导数值接近0。因此我们需要将y-t这样的误差高效地传递给前面的层。

这里考虑一个实例,教师标签是(0,1,0),softmax层输出为(0.3,0.2,0.5)的情况,softmax层的反向传播的误差是(0.3,-0.8,0.5)这样的,因为这个大的误差会向前面的层传播,所以softmax前面的层会从这个大的误差中学习到“大”的内容。

PS:使用交叉熵误差作为softmax函数的损失函数后,反向传播得到 (y1 − t1,y2 − t2,y3 − t3)这样 “漂亮”的结果。实际上,这样“漂亮” 的结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉 熵误差函数。回归问题中输出层使用“恒等函数”,损失函数使用 “平方和误差”,也是出于同样的理由(3.5节)。也就是说,使用“平 方和误差”作为“恒等函数”的损失函数,反向传播才能得到(y1− t1, y2 − t2, y3 − t3)这样“漂亮”的结果。

再举一个例子,比如思考教师标签是(0,1,0),Softmax层的输出是(0.01, 0.99, 0)的情形(这个神经网络识别得相当准确)。此时Softmax层的反向传播 传递的是(0.01,−0.01,0)这样一个小的误差。这个小的误差也会向前面的层 传播,因为误差很小,所以Softmax层前面的层学到的内容也很“小”。

接下来进行softmax-with-Loss层的实现:

Class SoftmaxwithLoss:def __init__(self):self.loss = None #损失self.y = None #softmax输出self.t = None #监督数据def forward(self,x,t):self.t = tself.y = yself.loss = cross_entropy_error(self.y,self.t)return self.lossdef backward(self,dout=1)batch_size = self.t.Shape[0]dx = (self.y - self.t) / batch_sizereturn dx

这里直接使用了之前已经实现过的softmax和cross_entropy_error函数。所以实现起来十分简单,在反向传播中,要将传播的值除以批大小后再传递给前面的层才是单个数据的误差。

相关文章:

  • MySQL 表的内外连接
  • 数学复习笔记 3
  • 空间内任意点到直线和平面的距离推导
  • [Survey]Remote Sensing Temporal Vision-Language Models: A Comprehensive Survey
  • vue+tsc+noEmit导致打包报TS类型错误问题及解决方法
  • 【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
  • Redis面试 实战贴 后面持续更新链接
  • Linux系统之shell脚本基础:条件测试、正整数字符串比较与if、case语句
  • C# Winforms 本地化 多语言支持 字符串资源
  • 如何管理两个Git账户
  • Android第六次面试总结之Java设计模式篇(一)
  • 使用VMware Workstation pro 17.5.1在Windows上安装Ubuntu 24.04.2的 详细步骤
  • 结合Hutool 突增突降检测的算法
  • javascript Map 和对象使用
  • 安卓基础(点击按钮动态添加视图到容器)
  • 单片机-STM32部分:5、STM32CubeMX实现HAL点灯
  • Leetcode Hot 100字母异位词分词
  • Vue 项目中使用 EJS 模板动态注入环境变量
  • 哪些岗位需要考取城市客运安全员证?
  • SCINet 训练代码修改
  • 秦洪看盘|受阻回落,蓄积新做多能量
  • 川大全职引进考古学家宫本一夫,他曾任日本九州大学副校长
  • 长三角铁路五一假期发送旅客超2000万人次,同比增幅超一成
  • 秦洪看盘|涌现新逻辑,A股放量回升
  • 这 3 种食物,不要放进微波炉!第 1 个就大意了
  • 三亚回应“买水果9斤变6斤”:反映属实,拟对流动摊贩罚款5万元