Softmax函数的简单粗略的理解

随便想的,主要好理解一些吧?

普通的变量占比

假设我们班总共十个人,第 i i i 人身上有 m i m_i mi元,我想知道每个人身上的钱占总钱数的比例是多少,
那么设第 i i i 个人money占的比例为 P i P_i Pi
则有 p i = m i ∑ j = 1 n m j p_i = \frac{m_i}{\sum_{j=1}^{n} m_j} pi=j=1nmjmi
这个东西可以很好的表现每个人的money占总体的比例

但是,这个比例是线性的,也就是 p i = k × m i , k = 1 ∑ j = 1 n m j p_i = k \times m_i, k = \frac{1}{\sum_{j=1}^{n} m_j} pi=k×mi,k=j=1nmj1

softmax(开始一本正经的扯淡)

如果我想通过这些数据知道我们班上不同人的富有情况,我肯定希望钱少的人占的比例尽量更小,有钱的人占的比例尽量更大(也就是能把量级的分化变得更明显),(反正我觉得我讲的听玄学的_滑稽)则此时,我们需要softmax函数

S i = e m i ∑ j = 1 k e m j S_i = \frac{e^{m_i}}{\sum_{j=1}^{k} e^{m_j}} Si=j=1kemjemi
也就是在每个元素变成了其的e次方,根据指数的爆炸性增长,我们可以想象一下……

比如当m为[1, 2, 3]时(小数据)
用普通的比例求出来P为[0.166667, 0.333333, 0.500000]
用softmax求出来的P为 .[0.090031, 0.244728, 0.665241]
明显(个P),用softmax计算出来,我们能更肯定,1号同学是个穷X,更应该抱住3号同学的大腿 (雾~~)

然后因为引入了指数级别运算,写代码很容易爆炸,也就是溢出,所以这里将每个元素减去他们的最大值,这样所有元素都小于0,而且函数值不会变:

l a r g e s t = m a x ( r 1 , r 2 , . . . , r n ) largest = max (r_1,r_2,...,r_n) largest=max(r1,r2,...,rn)

S i = e r i ∑ j = 1 k e r j S_i = \frac{e_{r_i}}{\sum_{j=1}^{k} e^{r_j}} Si=j=1kerjeri

= e − l a r g e s t × e r i e − l a r g e s t × ∑ j = 1 k e r j = \frac{e^{-largest} \times e_{r_i}}{e^{-largest} \times \sum_{j=1}^{k} e^{r_j}} =elargest×j=1kerjelargest×eri

= e r i − l a r g e s t ∑ j = 1 k e r j − l a r g e s t = \frac{e_{r_i - largest}}{\sum_{j=1}^{k} e^{r_j - largest}} =j=1kerjlargesterilargest

所以,现在就这么多吧,softmax设计的初衷,是希望特征对概率的影响是乘性的。然后这个东西还有很多优点啊比如避免了0分母之类的等等……

————————————————————补充————————————————————
softmax,其中的soft和max,可以牵强的理解为软化的max,这个函数有max的趋势,也就是让其中大的更大,小的更小,这样可以更好的激励学习(效率更高),在知乎上看到一个很生动的举例:

好比考试错了,老师轻轻骂你两句,或换成softmax两巴掌扇上去,你说那个学习效率高?

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值