本文理论依据王木头的视频:
softmax是为了解决归一问题凑出来的吗?和最大熵是什么关系?最大熵对机器学习为什么非常重要?_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1cP4y1t7cP/?spm_id_from=333.999.0.0&vd_source=ecbdfcacb078d0e3626e61248866cdc7
目录
一、sigmoid
1、定义
2、性质
3、优缺点
4、总结
二、softmax
1、定义
2、推导
3、应用场景
4、优缺点
5、本质
三、sigmoid与softmax的联系
四、最大熵
五、概率分布的特征函数
5.1概率论中的矩
5.2特征函数
六、推导softmax——解决两个问题
1、解决第一个问题
2、解决第二个问题
(1)条件熵定义
(2)求最大熵
七、机器学习的本质
一、sigmoid
1、定义
Sigmoid 函数是一种常见的激活函数,定义为:
Sigmoid 函数的输出范围是 (0, 1),它将输入值映射到 0 到 1 之间。对于较大的正数输入,输出接近 1;对于较大的负数输入,输出接近 0。
2、性质
这个性质在神经网络中非常重要,因为它简化了反向传播时的计算。
3、优缺点
优点:
(i)Sigmoid 函数平滑且连续,能够将任意输入映射到 0 到 1 的范围内,适用于概率估计。
(ii)在某些场景(如二分类)中表现良好。
缺点:
(i)梯度消失问题:对于输入值远离零的情况,Sigmoid 的梯度会变得非常小,导致梯度消失问题,尤其是在深层网络中。
(ii)输出非零中心化:Sigmoid 输出的范围是 (0, 1),这使得其输出并没有以 0 为中心,可能会导致优化过程中的收敛速度变慢。
4、总结
Sigmoid 是一个非常基础且经典的激活函数,广泛应用于二分类问题、逻辑回归以及神经网络等领域。它的输出是一个概率值,适用于描述“是”或“否”的情况。虽然在深度学习中由于梯度消失问题而逐渐被其他激活函数(如 ReLU)取代,但它仍然在很多场景中有其独特的应用价值。
二、softmax
1、定义
Softmax 函数通常用于多分类问题,尤其是在神经网络的输出层中,能够将任意一组实数转化为一组概率。对于一个输入向量 ,Softmax 函数将其转换为一个概率分布 ,使得所有输出值 pip_ipi 都位于 (0, 1) 区间,并且它们的和为 1。
Softmax 的公式定义为:
, 对于
其中:
- 是输入向量的第 iii 个元素。
- 是类别的总数。
- 是类别 iii 对应的概率。
2、推导
目标:
给定一个输入向量 ,我们希望将其转换成一个概率分布,使得每个元素 都满足:
(1)。
(2),即所有概率的和为 1。
每个都代表概率,所以都要在(0,1)之间且为正数。
过程:
(1)指数函数的作用:Softmax 中每个元素的分子是 ,这使得大值的 会映射为较大的概率,而小值的 会映射为较小的概率。这种行为类似于放大和压缩作用,可以增强大值元素的区分度。
(2)归一化:Softmax 的分母是所有 的总和 ,这样做的目的是确保所有输出的概率和为 1,符合概率分布的定义。
3、应用场景
(1)多分类问题
Softmax 最常见的应用场景是在多分类问题中,特别是在神经网络的输出层。假设我们正在做一个图片分类任务,类别总数为 K,网络最后输出一个长度为 K 的向量 。Softmax 函数会将这个向量转换成概率分布,表示每个类别的概率。比如在 10 分类任务(如手写数字识别)中,Softmax 可以输出一个长度为 10 的概率向量,表示图像属于各个数字类别的概率。在这个例子中数据集样本的标签也是一个长度为10向量,每个标签有且仅有一个元素为1,其余9个为0,表示某一个类。
4、优缺点
优点
(1)清晰的概率解释:Softmax 输出的是一个有效的概率分布,可以直观地表示每个类别的预测概率。
(2)适合多分类任务:在多分类问题中,Softmax 是最常用的激活函数,特别适用于神经网络的输出层。
缺点
(1)对大输入值敏感:当某些 值特别大时,Softmax 可能会导致数值溢出或不稳定。通常可以通过对输入进行“缩放”或“标准化”来避免这种问题。
(2)不适合多标签分类:在多标签分类中,通常使用独立的 Sigmoid 激活函数来处理每个标签的预测概率,而不是 Softmax。因为 Sigmoid 允许每个标签的概率独立计算,且可以同时为多个标签分配非零概率,而 Softmax 会强制标签之间的竞争关系,导致标签概率和为 1。
5、本质
表面上,Softmax 的公式是为了满足每个都在0-1之间且加和为1而选定的一种形式,其实并不是如此简单,softmax的公式的形式还有更深层次的含义,本质上是最大熵的一种体现。本文后续有详细的分析。
三、sigmoid与softmax的联系
softmax是sigmoid的扩大版,即sigmoid是只有一种情况下的softmax
sigmoid的公式为:
两种情况的softmax的公式为:
sigmoid表示一种分类,其实也可以说是二分类,分别是属于某类和不属于某类;softmax的二分类为属于类1和属于类2,
本质上,sigmoid是在将数据传入激活函数之前,属于某类和不属于某类的数据分别为和0,取指数后为和1,softmax是在将数据传入激活函数之前,属于1类和属于2类的数据分别为和,取指数后为和,最后再归一化。由于都是二分类,两者都是对立的,固定一个另一个不固定和两个都不固定,在没有数据(即证据)的情况下他们的熵都是一样,都是最大(换句话说,就是战胜 或者 战胜的概率都是 ;同样战胜或者战胜的概率也都是 )。两者的差别仅仅是前面神经网络的参数数值不同,且对分类造不成任何影响。所以两者本质上是相同的。
四、最大熵
在上述的分析中,激活函数的构造只需要满足每个都在0-1之间且加和为1,那么为什么要选择以e为底的指数的形式呢?当然仅符合那两个条件的函数形式有很多种,为什么要选用当前这种形式呢?
神经网络的作用是他能逼近任何一种概率模型,即使那种概率模型写不出来,也能逼近。具体方法就是寻找似然值最大的、或者说交叉熵最小的那种概率模型。从已知的数据集到我们的模型,我们的模型要在数据集上满足似然值最大或交叉熵最小,但数据集是有限的,即模型无法覆盖现实中目标问题的所有信息,在模型要在数据集上满足似然值最大或交叉熵最小就完成了现有信息从数据集到模型,而模型无法从数据集获得的信息就要符合熵最大,从而提高模型的泛化能力。模型的激活函数使用sigmoid或softmax对数据集进行训练,就默认实现了模型无法从数据集获得的信息的熵最大化。最终实现我们的模型既能满足已知的信息,又能对未知的信息熵最大。具体原因在本文后续详解。
下面小例子可以帮助对上面这段话的理解:
让机器判断一个照片是猫还是汽车,当没有任何信息传递到模型时,也就是没有数据集,要让模型泛化能量更大,所以可以让机器判断是猫或者汽车的概率都是 ,这样实现了最大熵。但上述好像没有意义。实际上,神经网络去判断照片是猫或是汽车,并不是完全无知地去猜,即有已知的信息(数据集),对于已知的信息,当然要让模型在信息(数据集)上的似然值最大或交叉熵最小,模型无法从数据集上获得的信息,就要通过最大熵来补齐。在例子中,如果通过数据集得到的信息是有尾巴的是猫,那么这个模型理想情况下就要有以下功能:有尾巴直接判断是猫,没尾巴的情况下是猫或者汽车的概率都是 。
或者王木头视频中的例子,8只球队,直接用最大熵的话,获胜概率都是 ,但如果从已知信息(数据集)中获得了其中一支球队是中国队,且其获胜概率为,那么对其余队伍使用最大熵,即其余七支球队获胜概率都是。
五、概率分布的特征函数(还需更深入的思考)
在上述分析中,完成机器学习模型的建立需要完成两部分内容:(1)让模型符合已知信息。(2)让模型对未知信息的反应的熵最大。
首先,我们无法写出数据集的概率模型,但还想要让数据集的概率模型与我们训练的模型一样。要让模型与已知的数据集建立联系,就要在数据集中抽象出概率模型。
5.1概率论中的矩
任何概率分布都可以用特征函数来描述,首先要了解概率模型的矩
(1)要确定一个均匀分布,需要知道它的什么信息呢?
只需知道它的均值即可。因此,需要 的均值来描述。
(2)要描述一个正态分布,需要均值和方差来描述
其中期望,方差
因此,需要 和 的均值来描述
(3)要描述一个更复杂的概率分布
如图,在均值和方程的基础上,需要再加一个偏度
因此,这个概率模型通过 、 和 的均值来描述
综上,概率模型的特征都与统计量的一次、二次、三次.....n次有关。、、....分布成为概率分布的一阶矩、二阶矩、三阶矩和 n 阶矩。
如图:
5.2特征函数
上图为将特征函数泰勒展开,得知特征函数有概率模型的矩线性描述。
由特征函数的形式可知,特征函数即是概率密度函数的傅里叶变换,如下:
可见概率密度函数的特征函数和傅里叶变换是共轭的,这里只不过是螺旋线的方向不同,本质不变,不做区分。
所以,所有的概率分布都可以由其矩唯一地线性表示。因此,要比较两个概率模型的关系,只需要比较他们的矩即可,如果两个概率模型的矩相等,那么他们就相等。具体如下:
Q是数据集这个概率模型的矩,P是目标模型的矩,所要实现的是让
六、推导softmax——解决两个问题
从上面的分析可知,要实现两个目标,完成机器学习模型的建立需要完成两部分内容:(1)让模型符合已知信息。(2)让模型对未知信息的反应的熵最大。
1、解决第一个问题
第一步要让模型符合已知信息,就要把已知信息的特征提取出来,在本文《五》中提到了让数据集和目标模型的矩相等。
(1)从数据集概括经验概率
接下来就是找数据集的矩,由于数据集并不是一个常见的概率模型,我们可以先从数据集概括经验概率:
(i) ,表示数据集中符合某个特征x和标签y的样本的数量在样本总数的占比。
(ii),表示数据集中符合某个特征x的样本数量在样本总数中的占比。
(2)求数据集的矩
那么如何求矩呢?
要求矩,首先要有随机变量,我们知道了数据集的经验概率(对数据集的信息概括),所以根据经验概率构造随机变量:
这个随机变量是伯努利分布,因此只要知道其一阶矩即可知道这个分布的所以信息。其一阶矩为:
可以发现这个一阶矩就是经验概率值,所以只需经验概率值等于目标模型的相应概率相等,即可保证目标模型在已知信息上与数据集相等,即可解决第一个问题,接下来只剩下最大化目标模型在未知情况下的熵最大。
2、解决第二个问题
我们的目标是得到我们的目标模型,其功能为求。所以模型应该包括数据集样本中的信息,其余数据集样本中没有的信息要保证熵的最大化。
由贝叶斯公式
,即
由上面的 可知,经验概率和是可以从数据集中抽象出来的,那么岂不是确定了,还谈什么最大熵?我们知道经验概率是从数据集中抽象出来的,而训练模型的目的不仅仅是处理数据集中的内容,还要有泛化能力,即中的 可能是未知的目标是求标签 ,因此中一定包含未知信息。
(1)条件熵定义
先来求的熵,在这里是条件熵。
概率分布熵的定义:
那么 的熵 应该如何求呢?
条件熵的定义为:
定义为:
如果了解了熵的本质,这个条件熵的定义很容易理解,就是求这个条件熵的混乱程度,首先求在某个的情况下所有发生的概率的熵,然后再求所有情况下的熵。
(2)求最大熵
的熵:
的最大值,即求
的最小值,
还要满足以下条件:
(i)经验概率和与目标模型中相应的概率相等,即,可写为,其中 表示事件或特征。
(ii)还要满足归一性:
因此,求最大熵即解决优化问题:
Language函数为:
整理:
原问题等价为:求 ,(在本人文章【凸优化第五章对偶】中有解释)
对偶问题为: 求
先来解决
可见,目标模型得出结果得形式为softmax得形式,因此softmax是求最大熵时得出来的。
因此,神经网络选用sigmoid和softmax作为激活函数,就默认了将最大熵作为基本原则。
七、机器学习的本质
在上面求最大熵的过程中,选用求Language对偶问题,只解决了问题,还有没有完成,
当解决了,即确定了参数 ,那么神经网络的所有参数 和 就确定了。但这个极值确定起来非常复杂,且需要人为确定 ,即人为寻找数据集的特征并确定经验概率,即 ,比较麻烦,因此一般选用神经网络(特征不需要人为寻找,在隐藏层自动确定)来解决确定参数这个问题。
综合来说:
确定了目标模型()的形式为,确定了模型的参数。
如图,在进行机器学习时,我们希望模型的适用范围可以扩大,但扩大的过程不能随便扩大,扩大后的相应概率要与训练集的经验概率相同;且要尽量保证,这个点主要体现在训练集的选择上(即训练集要在模型使用范围内没有特异性)。所以这里的扩大归根结底就是扩大了。在训练集外的部分(图中绿色的区域),要保证熵最大。
所以,确定了的形式是指数族的形式(二项伯努利分布、多项伯努利分布、正态分布、泊松分布等很多分布都可以写成指数族的形式),所以,对比两个不知道形式的概率模型时,要保证熵最大,一定逃不出指数族的形式。在训练神经网络时,最后一层的激活函数选用sigmoid或softmax时,就可以保证目标模型的形式就是指数族的形式,即符合最大熵原理。
所以,神经网络中的隐藏层,相对于自动找到了特征;输出层使用sigmoid或softmax,相对于保证最大熵原理。
还要最后一个问题,上图中,左侧一半是Language对偶解决问题是使用的最大熵来确定参数(即),而右侧神经网络则是使用交叉熵(或者说最大似然估计),那么最大熵和极大似然估计等价吗?他们依然是等价的,如下证明:
最大熵:
极大似然估计:
结束撒花。