大家在学习深度学习时,肯定会遇到softmax这个知识点,初学者大都一知半解,没有理解透彻,很多文章直接讲述softmax公式及求导,忽略了其中的因果缘由。初学者通过此文可以梳理知识结构,高手可直接查看公式推导来巩固知识。

softmax公式及理解

softmax主要用于深度学习多分类,作用是将输出层的数值映射为概率,且所有输出节点概率累加为1。 为什么要把数值转为概率呢?因为多分类模型中,输出值为概率更利于反向推导和模型的迭代(比如minist手写数字识别,对应的是0-9的概率,概率与概率可以更好的比较,数值与概率无法计算差距,从而也无法反向推导)。

接下来我们看一下softmax的公式:

如下图所示,(3,1,-3)经过softmax计算后变为概率(0.88,0.12,0),大家可以亲自计算一下,充分理解softmax公式。

求概率为什么要用e的指数?

通过e的指数图像我们可以看到:1、可以把输入为负数的值转为正数;2、指数函数曲线呈递增趋势,斜率逐渐增大,这样x轴上很小的变化反映到y轴可以看到很大的变化,所以它可以将差距大的值拉的更大。ps:其实不一定是e的指数,还有很多其他数的指数也同样适用,这里为了方便后面的计算,选用e。

补充一个知识点,softmax中,当输入值非常大时,softmax会更大,可能会溢出,所以在TensorFlow中,一般将softmax与交叉熵函数统一实现,因为TensorFlow会启用一些优化机制。

为什么softmax求导如此重要

深度学习的核心就是误差逆传播(error BackPropagation,简称BP)算法,算法中最核心的是损失函数对权重和阈值求导,在这里我们用经常与softmax使用的交叉熵损失函数为例,进行推导:

交叉熵损失函数公式(交叉熵函数中的对数,有的以e为底,有的以2为底,此处是以e为底)如下,其中 y_{i} 表示第i维度的实际值, s_{i} 表示第i维度的预测值:

这里我们用 表示 z_{i} 的输入,v表示前一层节点的数量, 表示前一层第u个节点到 z_{i} 节点的权重, 表示前一层第u个节点到 z_{i} 节点的阈值。我们的目标是求 z_{i} 节点对前一层第q个节点权重的偏导数)和 z_{i} 节点对前一层第q个节点阈值的偏导数),可推导为

根据 可以推导出 为0或x, 为0或1,所以当前核心问题转换为求 ,根据softmax公式(公式1)和 交叉熵公式(公式2),我们可以把 转换为:

利用交叉熵公式(公式2),我们求L对 的偏导数(利用对数函数的导数公式: ,lne=1)可以推导出:

有些同学对累加求导不太明白的,可以看一下知乎上的这个解释: https://www.zhihu.com/question/67307437 ,例如公式6中当i不等于p时,L对 的偏导数为0,所以公式演化为

所以交叉熵对权重和阈值的求导公式只剩 未知,即对softmax求导。

softmax求导公式推导

接下来我们对softmax求导,为了承接上面的 (第p个节点的softmax对u个节点的输入求偏导数),我们先用p代替softmax中的i,公式意义没有任何改变,所以softmax公式变为:

我们把softmax中的 表示(为了公式计算中书写简便,看起来更直观),则softmax公式变为:

根据基本公式 ,我们可以得到:

当 u=p 时:

当 u!=p 时:

PS:为了避免公式中字母一样导致的歧义,我对公式上某些字母进行了修改,但公式意义没有任何改变。

扩展:交叉熵求导

家下来我们将softmax求导结果(公式6)带入交叉熵求导(公式5),可得:

将公式9和公式10带入公式11,把公式11拆分为u=p和u!=p的累加的相加,即:

接着往下推导:

到这里推导全部完成。

大家在学习深度学习时,肯定会遇到softmax这个知识点,初学者大都一知半解,没有理解透彻,很多文章直接讲述softmax公式及求导,忽略了其中的原因。初学者通过此文可以梳理知识结构,高手可直接查看公式推导来巩固知识用来面试手推。 softmax公式及理解 在深度学习反向传播算法中,为什么softmax求导如此重要 softmax求导公式推导 ...
Softmax 函数用于多分类,他将多个神经元的输出的值映射到(0,1)区间内的一个值,,并且映射的所有值相加为1,这些值可以 理解 为输出的概率,输出概率较大的一般作为预测的值 分子:fyi 表示第i个类别指数值 分母求和fj 所有元素的指数和 softmax 作用过程:假如对于神经元的输出值3,1,-3通过 softmax 函数,映射成为(0,1)之间范围的值,而这些值的累和为1, P(3∣score)=e3/(e3+e1+e-3)=0.88 P(1∣score)=e1/(e3+e1+e-3)=0.12 P(-3∣score)=e-3/(e3+e1+e-3)=0 计算 softmax
row_max = x.max(axis=axis) # 每行元素都需要减去对应的最大值,否则求exp(x)会溢出,导致inf情况 row_max = row_max.reshape(-1, 1) x = x - row_max # 计算e的指数次幂 x_exp = np.exp(x) x_sum = np (1)只对样本的硬性类别感兴趣,即属于哪个类别; (2)希望得到软性类别,即得到属于每个类别的概率。 这两者的界限往往很模糊。其中的一个原因是,即使只关心硬类别,仍然需要使用软类别的模型。 3.4.1. 分类问题 当分类问题类别间存在自然顺序可以用数值代表每个类别,一般的分类问题并不与类别之间的自然顺序有关,可以使用独热编码。 独热编码是一个向量,它的分量和类别一样多。类别对应的分量设置为1,其他所有分量设置为0
每个激活函数的输入都是一个数字,然后对其进行某种固定的数学操作。激活函数给神经元引入了非线性因素,如果不用激活函数的话,无论神经网络有多少层,输出都是输入的线性组合。 激活函数的发展经历了Sigmoid -> Tanh -> ReLU -> Leaky ReLU -> Maxout这样的过程,还有一个特殊的激活函数 Softmax ,因为它只会被用在网络中的最后一层,用来进行最后的分类和归一化。 Sigmoid 值范围[0,1] 输入实数值并将其“挤压”到0到1范围内,适合输出为概率.
1、多类分类和多标签分类的区别 多标签分类:一个样本可以属于多个类别(或标签),不同类之间是有关联的,比如一个文本被被划分成“人物”和“体育人物”两个标签。很显然这两个标签不是互斥的,而是有关联的 多类分类: 一个样本属于且只属于多个分类中的一个,一个样本只能属于一个类,不同类之间是互斥的,比如一个文本只能被划分成“人物”,或者被划分成“文化”,而不能同时被划分 成“人物”和“文化”,“文...
逻辑回归(Logistic Regression)是 机器学习 中的一种分类模型,由于 算法 的简单和高效,在实际中应用非常广泛。本文作为美团 机器学习 InAction系列中的一篇,主要关注逻辑回归 算法 的数学模型和参数求解方法,最后也会简单讨论下逻辑回归和贝叶斯分类的关系,以及在多分类问题上的推广。 实际工作中,我们可能会遇到如下问题: 预测一个用户是否点击特定的商品 机器学习 的问题大致可以分为分类问题和回归问题。分类问题是数据属于哪一个类别的问题。比如,区分图像中的人是男性还是女性的问题就是分类问题。而回归问题是根据某个输入预测一个(连续的)数值的问题。比如,根据一个人的图像预测这个人的体重问题是回归问题(类似“57.4kg”这样的预测)。 输出层所用的激活函数,根据求解问题的性质决定。一般,回归问题可以用恒等函数,二元分类问题可以用sigmoid函数,多元分类问题可以用 softmax 函数。 恒等函数:输出=输入 softmax 函数:输出为一个函数 其中exp
softmax 函数和sigmoid函数都是常用的激活函数,用于神经网络中的非线性变换。 softmax 函数是一种多元分类的激活函数,将多个输入值映射到一个概率分布上,使得每个输出值都在0到1之间,并且所有输出值的和为1。在神经网络中, softmax 函数常用于输出层,用于将神经网络的输出转化为概率分布,以便进行分类任务。 sigmoid函数是一种常用的二元分类的激活函数,将输入值映射到0到1之间的一个值,表示输入值为正例的概率。在神经网络中,sigmoid函数常用于隐藏层和输出层,用于将神经元的输出转化为概率值,以便进行分类任务或回归任务。 总的来说, softmax 函数和sigmoid函数都是常用的激活函数,用于神经网络中的非线性变换,但是它们的应用场景不同, softmax 函数适用于多元分类任务,而sigmoid函数适用于二元分类任务。