神经网络中的softmax层为何可以解决分类问题——softmax前世今生系列(3)

本文详细介绍了softmax层在神经网络中的作用及其与分类预测的关系。解释了softmax层如何将输出转化为概率形式,便于理解各类别可能性大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导读:

softmax的前世今生系列是作者在学习NLP神经网络时,以softmax层为何能对文本进行分类、预测等问题为入手点,顺藤摸瓜进行的一系列研究学习。其中包含:

1.softmax函数的正推原理,softmax的代数和几何意义,softmax为什么能用作分类预测,softmax链式求导的过程。

2.从数学的角度上研究了神经网络为什么能通过反向传播来训练网络的原理。

3.结合信息熵理论,对二元交叉熵为何适合作为损失函数进行了探讨。

通过对本系列的学习,你可以全面的了解softmax的来龙去脉。如果你尚不了解神经网络,通过本系列的学习,你也可以学到神经网络反向传播的基本原理。学完本系列,基本神经网络原理就算式入门了,毕竟神经网络基本的网络类型就那几种,很多变种,有一通百通的特点。

网上对softmax或是神经网络反向传播知识的整理,基本都通过一个长篇大论堆积出来,一套下来面面俱到但又都不精细。本文将每个环节拆开,分别进行详细介绍,即清晰易懂,又减轻了阅读负担,增加可读性。本文也借鉴了其他作者的内容,并列举引用,希望大家在学习过程中能有所收获

本章内容提要:

从前两篇文章中,我们了解了softmax函数的基本原理,知道了他为什么叫做softmaxsoftmax函数有什么特性,以及softmax函数的推导过程。

本文基于前两篇文章的基础上,讲一下为什么我们在做分类预测的时候,经常会选择在神经网络的最后一层的输出结果上,加一个softmax层,来对输出结果进行分类。

一、softmax层和神经网络的关系

先看一下神经网络的结构:

                                                             

红色是网络的开端,是输入层。蓝色的部分是网络的隐含层,用于计算。绿色是输出层,输出计算结果 。想了解更多网络内部原理可以参考之前的文章。

那么加上softmax层后的网络形状如下:

                                         

在output layer后多出来的一个黑色的layer,就是用于分类的softmax层。最后紫色的new output层就是经过softmax层后,转换成概率的新输出层。

从这个图上可以看出来,softmax层只是对神经网络的输出结果进行了一次换算,将输出结果用概率的形式表现出来。

二、神经网络各层的内部定义

为了方便后续学习,我们对神经网络中每层节点的概念、及节点之间的计算关系介绍一下。因为输入层只做输入数据用,没有计算,图就去掉了。L1层对应隐含层,L2层对应输出层,L2层后链接的就是softmax层,最后输出的S就是经过softmax层转换后的概率输出。

                                             

(1)

在隐含层L1中,x是L1上一层的输出结果,也是L1层的输入值,有j个神经元节点,记为:

                                                                                                 x_{j}

(2)

L1层和L2之间的W是权重矩阵,它连接L1层与L2层之间的神经元节点,每两个神经元节点之间由一条权重边链接。其中,L1层的第j个神经元节点x,指向L2层的第i个神经元节点z的权重边w,记为:

                                                                                                w_{ij}

(3)

在输出层L2中,z是L1层的输入值x,与两层之间的权重矩阵W,计算后的结果,记为:

                                                                                                 z_{i}

(4)

z,x,w之间的关系为:

                                                                      z_{1} = x_{1} * w_{11} + x_{2} * w_{12} +x_{3} * w_{13}

即如下,(其中b为独立的偏置项,为方便描述,暂不讨论):

                                                                      z_{i} = \sum x_{j}*w_{ij} + b

(5)

softmax层对L2层传来的数值进行一个换算,换算公式如下:

                                                                       softmax = \frac{e^{\eta _{i}}}{\sum_{j=1}^{k}e^{\eta _{j}}}

公式的概念及推导过程请看之前的文章:softmax函数的正推原理——softmax前世今生系列(1)

(6) 

s指L2层中,神经元节点z的值,经过softmax层计算后,转换成的概率值,s与z的关系为:

                                                                       z_{i}\rightarrow softmax(z_{i}) \rightarrow s_{i}

三、softmax表达式和概率的关系

根据常识我们知道:表述一件事情发生的概率时,一般用百分数来表示。一定发生的事情的概率是100%,不会发生的事情概率是0%.不存在大于100%或者小于0%的概率。一件事情的所有可能性的概率之和等于1.

再来观察一下,输出值经过softmax层计算后的结果表达式:

                                                        s_{i} = \frac{e^{z_{i}}}{e^{z_{1}}+e^{z_{2}} +...+e^{z_{i}}+...+e^{z_{k}}}

显然有:

                                                                          s_{i}\in [0\%,100\%]

对所有神经元s求和,可以得到一个结果:

                                                      \sum_{i=1}^{k}s_{i} = \frac{e^{z_{1}}+e^{z_{2}} +...+e^{z_{i}}+...+e^{z_{k}}}{e^{z_{1}}+e^{z_{2}} +...+e^{z_{i}}+...+e^{z_{k}}}

即:

                                                                                  \sum_{i=1}^{k}s_{i} = 1

由此可知,输出层的数据,经过softmax函数转换后的结果,即可满足概率表达式的特性。

因此,输出层的数据转化成概率表达式后的输出值,就有了新的意义。对分类问题来说,不同大小的概率值表示,这个结果属于不同类别的可能性大小。

四、示例

引用一张网上的原理图,该图描述了softmax对输出结果的计算过程:

                                             

神经网络的输出向量为:

                                                                               output=\begin{bmatrix} 3\\ 1\\ -3 \end{bmatrix}

带入softmax计算公式:

                                                softmax(3) = \tfrac{e^{3}}{e^{3}+e^{1}+e^{-3}} \approx \frac{20}{20+2.7+0.05} \approx0.88

                                                softmax(1) = \tfrac{e^{1}}{e^{3}+e^{1}+e^{-3}} \approx \frac{2.7}{20+2.7+0.05} \approx0.12

                                                softmax(-3) = \tfrac{e^{-3}}{e^{3}+e^{1}+e^{-3}} \approx \frac{0.05}{20+2.7+0.05} \approx 0

通过softmax转换:

                                                                        newoutput = \begin{bmatrix} 0.88\\ 0.12\\ 0 \end{bmatrix}

通过softmax转换后,结果表达的意思是:这个T向量属于“第一类”的概率是88%,属于“第二类”的概率是12%,属于“第三类”的概率是0%.这就是softmax层在神经网络中,解决分类问题的基本原理。通过softmax函数,将神经网络的输出结果转化成概率表达式。找到最大概率项,为其分类。

五、总结

通过本文学习,我们知道了softmax在神经网络中分类的原理。softmax适用于解决多分类问题,当分类情况只有两种的时候,softmax就转换成了回归问题,也就是二分类问题/逻辑回归/logistic回归。

干脆我们顺手推导一番,当分类结果只有x1和x2两种情况时:

                                               softmax(x) = \tfrac{e^{x_{1}}}{e^{x_{1}}+e^{x_{2}}} = \tfrac{e^{x_{1} }\div e^{x_{1} }}{e^{x_{1}} \div e^{x_{1} }+e^{x_{2}}\div e^{x_{1} }} = \tfrac{1}{1+e^{x_{2}-x_{1}}}

我们来对比一下logistic回归的函数表达式:

                                                 logistic(x) = \frac{1}{1+e^{-x}} 

咦?突然发现不知不觉中我们竟然把逻辑回归的知识也给学了。不仅如此,其实你马上就要在不知不觉中学会神经网络了。呵呵呵,让我们继续走下去。

通过三篇文章的学习,此时对于softmax函数的概念和基本原理,我们已经基本理清楚了。但实践出真知,softmax函数到底应该怎么用呢?在BP神经网络中,它扮演着什么样的角色?当我们预测的概率结果和正确结果对比有差异时,我们要如何取修正这个神经网络,使得预测的概率更加准确?

当你在思考这些问题时,你已经一只脚踏进了BP神经网络的大门。下一篇文章我们会学习一个叫做交叉熵的东西,我们会明白交叉熵如何帮助我们判断预测结果是否准确,以及如何根据预测结果来修正神经网络参数。

此处是一个小阶段的完结,但也是一个新的开始。有什么问题可以留言问我,如有错误欢迎指正。

相关链接:

softmax函数的正推原理——softmax前世今生系列(1)

softmax函数名字的由来(代数&几何原理)——softmax前世今生系列(2)

六、附学习笔记如下:

知识积累同时被 2 个专栏收录54 篇文章订阅专栏YOLO模型相关33 篇文章订阅专栏系列文章地址YOLO系列基础合集——小白也看得懂的论文精解-CSDN博客YOLO系列基础(一)卷积神经网络原理详解与基础级结构说明-CSDN博客YOLO系列基础(二)Bottleneck瓶颈原理详解-CSDN博客YOLO系列基础(三)从ResNet残差网络到C3-CSDN博客YOLO系列基础(四)归一化(BN)的前世今生!-CSDN博客YOLO系列基础(五)从神经元共适应性到模型Dropout-CSDN博客YOLO系列基础(六)YOLOv1原理详解原理如此清晰-CSDN博客YOLO系列基础(七)从数据增强到图像线性变换-CSDN博客YOLO系列基础(八)从坐标直接预测到锚框偏移量-CSDN博客YOLO系列基础(九)YOLOv2论文及原理详解(上)-CSDN博客YOLO系列基础(十)YOLOv2论文及原理详解(下)Darknet-19网络结构-CSDN博客目录系列文章地址卷积神经网络原理及卷积核详解一、卷积神经网络原理二、卷积与卷积核详解卷积核的作用卷积核的设计卷积样例与代码说明:卷积核的实际应用三、池化(Pooling Layer)池化的作用池化的设计池化的代码示例 四、全连接(Fully Connected Layer)全连接的作用全连接的设计代码示例 一个简单的卷积神经网络构建示例卷积神经网络原理及卷积核详解卷积神经网络(CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一,在自然语言处理和图像领域中有广泛的应用。本文将详细讲解卷积神经网络原理,并重点探讨卷积、池化、全连接的基础级结构的说明。一、卷积神经网络原理卷积神经网络的核心操作是卷积操作,它通过对输入数据进行局部感知和特征提取,实现高效的特征表示。卷积操作可以看作是一种类似于加权运算的操作,在图像处理中,针对图像的像素矩阵,卷积操作就是用一个卷积核来逐行逐列地扫描像素矩阵,并与像素矩阵做元素相乘,以此得到新的像素矩阵。卷积神经网络通常由多个卷积、池化、全连接等组成。卷积用于提取输入数据的局部特征池化用于降低特征图的维度和减少计算量全连接用于将特征图映射到输出类别二、卷积与卷积核详解卷积核(convolutional kernel)是卷积神经网络中的核心组件,它是一种可学习的参数,用于从输入数据中提取特征。卷积核可以从输入数据中提取出特定的特征,例如边缘、角点、纹理等。它通过卷积操作对输入数据进行局部感知和特征提取。卷积操作可以看作是一种类似于加权运算的操作,使用一个卷积核(也称为滤波器)在输入数据上进行滑动窗口式的局部加权求和,以此得到新的特征图。卷积核的作用特征提取:卷积核通过滑动窗口的方式在输入数据上进行局部感知,提取出输入数据的局部特征。这些特征可以是边缘、角点、纹理等。参数共享:卷积神经网络中的卷积核是共享的,即在整个网络中使用同一个卷积核。这种参数共享可以大大减少网络的参数数量,降低过拟合的风险。稀疏连接:每个卷积核只与输入数据的一小部分相连,这种稀疏连接可以减少网络的计算量,提高网络的计算效率。局部感知:卷积核通过局部感知的方式提取输入数据的特征,这种方式符合人类观察物体的习惯。人类观察物体时,也是从局部开始认识,然后逐渐扩展到整体。卷积核的设计大小:卷积核的大小决定了卷积的感受野大小。常用的卷积核大小有1x1、3x3、5x5等。较小的卷积核可以提取出更加局部的特征,而较大的卷积核可以提取出更加全局的特征。数量:卷积核的数量决定了输出特征图的通道数。多个卷积核可以提取出输入数据中的不同特征。初始化:卷积核的初始化可以影响网络的训练效果。常用的初始化方法有随机初始化、Xavier初始化、He初始化等。步幅(Stride):卷积核在输入数据上滑动时每次移动的像素数,决定了输出特征图的尺寸。填充(Padding):在输入数据的边界上填充额外的像素值,以控制输出特征图的尺寸。卷积样例与代码说明:​import torchimport torch.nn as nn # 定义一个简单的卷积,输入通道数为3、输出通道数为16、卷积核大小为3*3、步长为2、填充数为1# 填充是为了保持输入和输出数据的空间维度一致(在stride=1且kernel_size为奇数时)。conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1) # 创建一个随机输入张量(假设输入图像大小为32x32,通道数为3)input_tensor = torch.randn(1, 3, 32, 32) # 应用卷积output_tensor = conv_layer(input_tensor)print(output_tensor.shape) # 输出形状应为[1, 16, 32, 32](假设stride=1, padding=1)卷积核的实际应用卷积核在图像处理、计算机视觉、自然语言处理等领域都有广泛的应用。图像处理:卷积核可以用于图像的边缘检测、模糊与平滑、锐化等操作。例如,Sobel算子是一种常用的边缘检测卷积核,它可以通过计算亮度梯度来识别图像中的边缘信息。计算机视觉:卷积神经网络在目标检测、图像分类、图像分割等任务中取得了显著的效果。卷积核通过提取图像的特征,实现了对图像的高效表示和分类。自然语言处理:卷积核也可以用于自然语言处理中的文本分类、情感分析、命名实体识别等任务。通过提取文本中的n-gram特征,卷积核可以实现对文本的高效表示和分类。三、池化(Pooling Layer)池化(Pooling Layer)是卷积神经网络(CNN)中的关键组件之一,它紧随卷积之后,用于进一步处理特征图,以降低数据的维度、减少计算量,并增强网络的鲁棒性。以下是对池化的作用、设计以及有效性的详细说明。常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。通过一个滑动窗口来获取滑动窗口内的值,并选取最大值 or 求平均池化的作用降维:通过下采样操作减少特征图的尺寸。用以增加计算效率特征不变性:池化操作保留了输入数据中最显著的特征,增强了网络对输入数据局部变化的鲁棒性。减少过拟合:通过减少特征图的维度和参数数量,池化有助于降低模型对训练数据的过拟合风险。这提高了模型在未见过的数据上的表现能力。池化的设计池化类型:常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化选取池化窗口中的最大值作为输出,而平均池化则计算池化窗口中的平均值作为输出。此外,还有一些其他类型的池化操作,如随机池化(Stochastic Pooling)等,但它们在实际应用中相对较少。池化窗口:池化窗口的大小决定了每次下采样操作覆盖的输入特征区域。常见的池化窗口大小有2x2、3x3等。较小的池化窗口可以保留更多的细节信息,而较大的池化窗口则可以进一步降低特征图的维度。步幅:步幅决定了池化窗口在输入特征图上滑动的距离。当步幅等于池化窗口的大小时,池化操作将不重叠地应用于输入特征图。较大的步幅可以更快地降低特征图的尺寸。池化的代码示例 # 定义一个最大池化,卷积核大小为2*2,步长为2,最大池化选取2*2大小中最大的数值作为代表max_pool_layer = nn.MaxPool2d(kernel_size=2, stride=2) # 应用池化到卷积的输出pooled_output = max_pool_layer(output_tensor)print(pooled_output.shape) # 输出形状应为[1, 16, 16, 16](假设输入形状为[1, 16, 32, 32],kernel_size=2, stride=2)四、全连接(Fully Connected Layer)原理:全连接位于CNN的末端,用于将卷积和池化提取的特征映射到输出类别或回归值。每个神经元都与前一的所有神经元相连,因此参数数量通常较大。全连接的作用特征整合:全连接的主要作用是对前面卷积或池化提取到的特征进行整合。它通过将每个神经元与前一的所有神经元相连,实现了对全局特征的全面利用。这种整合有助于网络学习到更加复杂和抽象的特征表示。分类与回归:在神经网络的末端,全连接通常用于输出分类结果或回归值。通过引入非线性激活函数(如Softmax或Sigmoid),全连接可以将特征向量映射到类别标签或回归值上,从而实现最终的预测任务。
04-07
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日拱一两卒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值