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

导读:

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

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

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

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

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

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

本章内容提要:

softmax函数常用在解决多分类的问题上,就是如何将一批数据分成多个不同的类。在刚学习softmax函数时,网上资料一上来就是下面这个公式,

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

于是很费解这个奇怪的公式时从何而来,为什么这样的一个公式就可以做多分类的概率预测函数?让我们来一起研究一下他的数学意义,并将其推导出来。

一、定义一个分类模型

在探讨多分类问题时,我们首先要引入一个重要的分类模型,就是形如下面这个向量

                                                                                     T=\begin{vmatrix} 0\\ 0\\ 1\\ 0\\ 0 \end{vmatrix}

如果你学过onehot code编码的话就会知道,这个T向量代表一个“东西”有“五种分类”的可能,分别对应向量中的五个位置,哪个位置上的数字是1,就说明这个东西属于哪一类。一个向量中只有一位可以为1,其他位置都为0. 那么显然,上图T对应的“东西”就属于“第三类”,因为只有三号位置上的值为1,其余位置上都为0.

利用这个模型,就很容易的把逻辑上的分类问题转换成数学上的向量问题了。

我们给向量中的每个元素定义一个通项式,

                                                                                           T_{(y)i}

对于T向量中的每个元素来说,表达式就是

                                                                                     \left\{\begin{matrix} T_{(y)1} = 0\\ T_{(y)2} = 0\\ T_{(y)3} = 1\\ T_{(y)4} = 0\\ T_{(y)5} = 0 \end{matrix}\right.

二、定义一个概率模型

有了一个可以对分类问题进行描述的数学模型T,我们再来构建一个可以用于计算分类的概率模型。

结合文章第一部分的例子,对于一个“东西”来说,他有五种分类可能,属于“第一类”的概率为\Phi _{1}、属于“第二类”的概率为\Phi _{2}、……属于”第五类“概率为\Phi _{5},即:

                                                     P( y = i ) = \Phi _{i}

那么根据常识有:

                                                     \Phi _{1}+\Phi _{2}+\Phi _{3}+\Phi _{4}+\Phi _{5} = 1

于是我们可以推出描述一个“东西”属于k种类型中的某一类的概率表达式:

                                                     \sum_{i=1}^{k}\Phi _{i} = \Phi _{1} + \Phi _{2} + \Phi _{3} +......+ \Phi _{k-1} + \Phi _{k} =1 

很好理解,一个“东西”肯定属于几种分类中的一种,那么所有分类的概率之和则为1,即:

                                                     \sum_{i=1}^{k}\Phi _{i} = 1

结合文章第一部分和第二部分的两个例子:

                                                     \Phi _{i}表示的是向量T中,第T_{(y)i}个元素等于1的概率。

因此可以求得期望E:

                                                     E[T_{(y)i}] = T_{(y)1}*\Phi _{1} + T_{(y)2}*\Phi _{2} + T_{(y)3}*\Phi _{3} + T_{(y)4}*\Phi _{4} + T_{(y)5}*\Phi _{5}

而向量T中只有第三项为1,其余均为0,所以:

                                                     E[T_{(y)i}] = 0*\Phi _{1} + 0*\Phi _{2} + 1*\Phi _{3} + 0*\Phi _{4} + 0*\Phi _{5} = \Phi _{3}

即期望值等于概率分布:

                                                     E[T_{(y)i}] = P(y=i) = \Phi _{i}

 

三、引入一个指示函数概念

此时我们要引入一个指示函数 I  的概念:

                                                            

这个函数的意义是,当 I 函数括号内表达式为真时,I 函数值为1。当 I 数括号内表达式为假时,I 函数值为0。所以,T 向量中的某个元素T_{(y)i}的值还可以表示成:

 

                                                               
即当y=i时:

                                                                I(y=i) = I(i = i) = 1  

利用这个概念,我们将多项式分布转换为指数分布族表达式,这一堆东西看起来很复杂,其实并不难理解。看不懂也没关系,继续往下看后面的注释

                                       

其中:

                                                       \eta = \begin{bmatrix} \eta _{i} = log_{e}\frac{\Phi _{1}}{\Phi _{k}}\\ \eta _{i} = log_{e}\frac{\Phi _{2}}{\Phi _{k}}\\ .\\ .\\ .\\ \eta _{i} = log_{e}\frac{\Phi _{k-1}}{\Phi _{k}} \end{bmatrix}

因此我们得到一个很有用的表达式:

                                                      \eta _{i} = log_{e}\frac{\Phi _{i}}{\Phi _{k}}

这里补充一下:

多项式分布为什么能转换为指数分布族表达式?我们知道指示函数I 只有两个结果,即0或1,

                                                         I = \left\{\begin{matrix} 0\\ 1 \end{matrix}\right.

又因为指数计算有如下基本定义:

                                                                \left\{\begin{matrix} n^{0} = 1\\ n^{1} = n \end{matrix}\right.

所以当y = i时,有:

                                                     P(y,\Phi ) = \Phi _{1}^{I\left \{ y = 1 \right \}} * \Phi _{2}^{I\left \{ y = 2 \right \}} * ..... *\Phi _{i}^{I\left \{ y = i \right \}} *...... * \Phi _{k}^{I\left \{ y = k \right \}}

                                                     P(y,\Phi ) = \Phi _{1}^{0} * \Phi _{2}^{0} *...* \Phi _{i}^{1} * ......* \Phi _{i}^{0}

                                                     P(y,\Phi ) = 1 * 1 *...* \Phi _{i}^{1} * ......* 1 = \Phi _{i}

可以看出二者是等价的关系,这就是多项式分布能转换为指数分布的原理。

参考文献:https://www.cnblogs.com/wallacup/p/6024855.html?utm_source=itdadao&utm_medium=referral

四、通过概率模型和分类模型推导softmax表达式

此时我们得到一个指数分布族表达式:

                                                                        \eta _{i} = log_{e}\frac{\Phi _{i}}{\Phi _{k}}

我们对其进行变换,变换过程如下:

                                                          

对1式,我们对两边同时求和:

                                                          

根据文中第二部分结论 \sum_{i=1}^{k}\Phi _{i} = 1 得出:

                                                          

因为1式中 \Phi _{k} * e^{\eta _{i}} = \Phi _{i} ,联立两式的:

                                                                        \left\{\begin{matrix} \Phi _{k} = \frac{\Phi _{i}}{e^{\eta _{i}}}\\ \Phi _{k} = \frac{1}{\sum_{j=1}^{k}e^{\eta _{j}}} \end{matrix}\right.

得出:

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

上式就是我们推导出来的softmax函数表达式,即:

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

根据第二部分我们知道, \Phi _{i}表示的是向量T中,第T_{(y)i}个元素等于1的概率。因此softmax计算出的最后结果为:

                                                                        softmax = \begin{bmatrix} \Phi _{1}\\ \Phi _{2}\\ \Phi _{3}\\ \Phi _{4}\\ \Phi _{5} \end{bmatrix}

\Phi _{i}代表的是一个概率值,对于一个分类问题来说,softmax函数的结果,表示一个“东西”属于每个类别的可能性。这也就是为什么softmax函数适用于解决分类问题的原因。

五、总结

看完本文,基本对softmax函数的表达式究竟是怎么来的有了一个清楚的认识。

1.我们本意是想构建一个数学模型,用来表示一个已知“东西”属于很多类中的哪一类,于是我们提出了一个T向量。

2.后来我们又延伸了想法,对于一个未知的“东西”,我们怎么判断他属于哪一类事物?于是我们引入了一个概率模型φ。

3.但是向量T和概率φ之间并没有关联关系,于是我们引入了一个“指示函数I”,通过I的特性,将向量T和φ之间构建了一个关系表达式。这个表达式就是我们的softmax函数,它描述了概率和分类之间的关系。

4.那这个表达式为什么叫softmax?为啥不叫hardmax?不叫softmin?或者其他的什么?下一篇文章我们来解析一下这个问题。

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

 

六、附学习笔记如下:

 

 

参考文献:

https://www.cnblogs.com/90zeng/p/softmax_regression_introduction.html

https://blog.csdn.net/ITleaks/article/details/80337855

https://blog.csdn.net/hejunqing14/article/details/48980321

<think>好的,我现在需要回答用户关于Fast R-CNN中softmax函数的作用及实现的问题。首先,我需要回忆一下Fast R-CNN的相关知识,并结合用户提供的引用内容来组织答案。 首先,用户提到的引用[2]和引用[5]都提到了Fast R-CNN使用softmax作为分类器,损失函数是交叉熵损失。引用[2]中的公式显示分类损失是负对数概率,而引用[5]详细说明了损失函数的结构,包括分类和回归损失。 接下来,我需要解释softmax在Fast R-CNN中的作用。softmax通常用于多分类问题,将网络的原始输出转换为概率分布。在Fast R-CNN中,候选区域经过CNN提取特征后,通过全连接得到每个类别的得分,softmax将这些得分转化为概率,使得每个类别的概率在0到1之间,总和为1。这样,模型可以选择概率最高的类别作为预测结果。 然后,关于实现部分,用户提供的引用[5]提到特征矩阵的维度,例如2000×4096,这可能对应候选区域的特征向量。经过全连接后,得到每个类别的得分,再应用softmax。同时,损失函数使用交叉熵,结合softmax的输出计算分类损失,如引用[2]中的公式所示。 需要注意的是,Fast R-CNN与R-CNN的区别,比如引用[4]提到R-CNN使用SVM分类器,而Fast R-CNN改用softmax,这可能提升效率和准确性。此外,引用[3]提到RPN的输出结构,但可能更多与Faster R-CNN相关,不过用户的问题集中在Fast R-CNN,所以需要区分。 可能需要进一步确认softmax的具体实现步骤,比如输入是什么,输出如何影响损失函数。例如,候选区域的特征经过全连接后的输出,经过softmax得到概率,然后计算交叉熵损失。同时,引用[5]提到边界框回归使用smooth L1损失,这部分与softmax无关,但需要明确分类和回归是分开的。 总结结构:先解释softmax的作用,将得分转为概率,用于分类;然后说明实现步骤,包括网络结构中的位置,损失函数的计算;最后可能比较与其他方法(如R-CNN的SVM)的不同,突出优势。 需要确保使用确的中文术语,并引用用户提供的参考文献。例如,在说明损失函数时引用[2]和[5],在对比时引用[4]。 可能的问题点:是否混淆了Fast R-CNN和Faster R-CNN?用户的问题是关于Fast R-CNN,而引用[3]提到了RPN,这可能属于Faster R-CNN的部分。需要确认,但用户的问题可能不需要涉及RPN,所以可以忽略引用[3]的内容,除非有相关部分。 最终,答案应结构清晰,分点说明作用和实现,并引用确的文献。</think>### Fast R-CNN中Softmax函数的作用及实现 #### 一、Softmax函数的作用 1. **概率转换** Softmax函数将全连接输出的原始类别得分(logits)转换为归一化的概率分布[^2]。对于每个候选区域的特征向量$f_i$,全连接输出的K个类别得分为$s_1, s_2, ..., s_K$,Softmax通过以下公式计算每个类别的概率$p_u$: $$p_u = \frac{e^{s_u}}{\sum_{k=1}^{K} e^{s_k}}$$ 这使得所有类别的概率总和为1,且每个概率值在0到1之间,便于后续分类决策[^1]。 2. **分类任务的核心组件** Fast R-CNN使用Softmax替代传统R-CNN中的SVM分类器[^4]。通过Softmax输出的概率$p_u$,模型直接预测候选区域属于各个类别的置信度,最终选择概率最高的类别作为分类结果。 3. **交叉熵损失计算** 分类损失函数基于Softmax输出的概率与真实标签计算交叉熵: $$L_{cls}(p, u) = -\log p_u$$ 其中$u$为真实类别,$p_u$为对应类别的预测概率[^2][^5]。该损失函数动模型提高确类别的预测概率。 --- #### 二、Softmax的实现流程 1. **特征提取** 输入图像通过卷积网络(如VGG)提取特征图,再通过RoI池化将候选区域映射为固定长度的特征向量(如4096维)[^4]。 2. **全连接处理** 特征向量输入全连接,生成每个类别的得分$s_k$。例如,若目标检测任务包含20个类别,则输出维度为20。 3. **Softmax概率转换** 对全连接输出应用Softmax函数,得到归一化的概率分布。例如: ```python import torch.nn as nn scores = fc_layer(roi_features) # 全连接输出 probabilities = nn.Softmax(dim=1)(scores) # 概率转换 ``` 4. **损失计算与反向传播** 结合真实标签计算交叉熵损失,并通过反向传播优化网络参数。代码示例如下: ```python criterion = nn.CrossEntropyLoss() loss_cls = criterion(probabilities, true_labels) ``` --- #### 三、与R-CNN的对比 | 方法 | 分类器 | 实现效率 | 端到端训练 | |--------------|-------------|----------|------------| | R-CNN | SVM | 低 | 否 | | Fast R-CNN | Softmax | 高 | 是 | Fast R-CNN通过Softmax实现端到端训练,避免了R-CNN中特征存储与SVM分步训练的复杂性[^5]。 ---
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

日拱一两卒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值