Sigmod/Softmax变换
softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布。多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。
sigmoid函数/Logistic 函数
取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
sigmoid函数性质
1 ”对称”:1−σ(s)=σ(−s)
2 “导数”:σ′(s)=σ(s)(1−σ(s))
3 sigmoid 原函数及导数图形如下:
Note: 从导数表达式可知,logit梯度最大为0.25。
logistic函数用于数据归一化
新数据=1/(1+e^(-原数据))
P(i)=1/1+exp(−θ'x)
这个函数的作用就是使得P(i)在负无穷到0的区间趋向于0,在0到正无穷的区间趋向于1。同样,函数(包括下面的softmax)加入了e的幂函数正是为了两极化:正样本的结果将趋近于1,而负样本的结果趋近于0。这样为多类别分类提供了方便(可以把P(i)看作是样本属于类别i的概率)。
logit(P) = log(P / (1-P)) = a + b*x 以及 probit(P) = a + b*x
这两个连接函数的性质使得P的取值被放大到整个实数轴上。
事实上可以把上面的公式改写一下:
P = exp(a + b*x) / (1 + exp(a + b*x)) 或者 P = pnorm(a + b*x)(这个是标准正态分布的分布函数)
Note: 上半部分图形显示了概率P随着自变量变化而变化的情况,下半部分图形显示了这种变化的速度的变化。可以看得出来,概率P与自变量仍然存在或多或少的线性关系,主要是在头尾两端被连接函数扭曲了,从而实现了[0,1]限制。同时,自变量取值靠近中间的时候,概率P变化比较快,自变量取值靠近两端的时候,概率P基本不再变化。这就跟我们的直观理解相符合了,似乎是某种边际效用递减的特点。
[logistic回归的一些直观理解(1.连接函数 logit probit)]
神经网络中的激活函数:sigmoid函数/Logistic 函数-软饱和和硬饱和
[神经网络中的激活函数 ]
逻辑回归中的sigmod函数
[Machine Learning - VI. Logistic Regression逻辑回归 (Week 3) ]
数据的标准化(normalization)和归一化中的应用
Softmax函数
Softmax函数是logistic函数的一种泛化。Softmax - 用于多分类神经网络输出。二类分类当然也可以用,但是如果只输出一个神经元可以使用sigmod函数。
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的Softmax值就是
也就是说,是该元素的指数,与所有元素指数和的比值。
举个例子来看公式的意思:
就是如果某一个 zj 大过其他 z, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。
为什么要取指数?
第一个原因是要模拟 max 的行为,所以要让大的更大;第二个原因是需要一个可导的函数。
被称为 softmax 函数,因为它表示“ max ”函数的一个平滑版本。这是因为,如果对于所有的 j != k 都有 a_k ≫ a_j ,那么 p(C k | x) ≃ 1 且 p(C j | x) ≃ 0 。
通过softmax函数,可以使得P(i)的范围在[0,1]之间。在回归和分类问题中,通常θ是待求参数,通过寻找使得P(i)最大的θi作为最佳参数。
此外Softmax函数同样可用于非线性估计,此时参数θ可根据现实意义使用其他列向量替代。
Softmax函数得到的是一个[0,1]之间的值,且∑Kk=1P(i)=1,这个softmax求出的概率就是真正的概率,换句话说,这个概率等于期望。
带温度T的softmax概率
比之前的softmax多了一个参数T(temperature),T越大产生的概率分布越平滑。
softmax代码实现
1 torch实现
输入输出是tensor
torch实现
torch.softmax(tensor0, dim=-1)
torch.nn.Softmax(dim=-1)(tensor0)
当然tensorflow中也有这个函数。
2 scipy实现
from scipy.special import softmax
a = [1,2,3,4,-3,-4,-2, -10000]
b = softmax(a)
[scipy.special.softmax¶]
Sigmoid 和 Softmax 区别
sigmoid
将一个real value映射到(0,1)的区间,用来做二分类。或者将一个k维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….),其中 bi 是一个 0~1 的常数,但是输出神经元之和不为 1.0。
softmax
把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。
[常用激活函数比较]
对于二分类问题
(如果最后一层输出层logit是1元的)sigmoid 和 softmax 是(完全)一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题。
(如果最后一层输出层logit是2元的)sigmoid 和 softmax 是(等价)一样的。
多类分类multi_label classification和多分类multi classification
多类分类multi_label classification和多分类multi classification的区别
softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布。多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。
示例
result = torch.sigmoid(logits) if is_multi_label else torch.nn.functional.softmax(logits, dim=1)
其中logits = (batch_size, label_size)
result:
对于多类分类来说,每个样本的label_size个预测值都在0-1之间,但是和不为1。
对于多分类来说,每个样本的label_size个预测值都在0-1之间,且和不为1。
当然使用的loss也不一样
[BCELoss,BCEWithLogitsLoss和CrossEntropyLoss的区别]
from: Sigmod/Softmax变换_sigmoid变换_-柚子皮-的博客-CSDN博客
ref:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)