softmax及函数求导

softmax

1. 概念

softmax 的核心在于 soft,而 soft 有软的含义,与之相对的是 hard 硬。很多场景中需要我们找出数组所有元素中值最大的元素,是指上都是求的 hardmax。

softmax 定义:
s o f t m a x ( z i ) = e z i ∑ j = 1 n e z j softmax(z_i) = \frac{e^{z_i}}{\sum^n_{j=1}e^{z_j}} softmax(zi)=j=1nezjezi
其中, z i z_i zi 为第i个结点的输出值,n为输出结点的个数,即分类的类别个数。通过 softmax 函数就可以将多分类的输出值转换为范围在[0, 1]和为 1 的概率分布。

- 引入指数形式的优点:

指数函数曲线呈现递增趋势,最重要的是斜率逐渐增大,也就是说在 x 轴上一个很小的变化,可以导致 y 轴上很大的变化。这种函数曲线能够啊ing输出的数值拉开距离。

- 引入指数形式的缺点:

指数函数的曲线斜率逐渐增大虽然能够将输出值拉开距离,但是也带来了缺点,当 z i z_i zi 值非常大的话,计算得到的数值也会变得非常大,数值可能会溢出。通常针对数值溢出的方法,是将每一个输出值减去输出值中的最大值。

2. softmax 函数求导

拥有三个输出结点的 softmax 函数的计算图:

请添加图片描述

对每一项求偏导,其中 i 表示输出结点的编号。
∂ y i ∂ z i = ∂ ∂ z i ( e z i ∑ j = 1 n e z j ) \frac{\partial {{\text{y}}_{i}}}{\partial {{z}_{i}}}=\frac{\partial }{\partial {{z}_{i}}}(\frac{{{e}^{{{z}_{i}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}}) ziyi=zi(j=1nezjezi)

y 1 y_1 y1 为例:
y 1 = e z 1 e z 1 + e z 2 + e z 3 y_1 = \frac{e^{z_1}}{e^{z_1} + e^{z_2} + e^{z_3}} y1=ez1+ez2+ez3ez1

∂ y 1 ∂ z 1 = ∂ ∂ z 1 ( e z 1 ∑ j = 1 n e z j ) \frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}=\frac{\partial }{\partial {{z}_{1}}}(\frac{{{e}^{{{z}_{1}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}}) z1y1=z1(j=1nezjez1)

带分式的求导法则:
∂ y 1 ∂ z 1 = e z 1 ∑ j = 1 n e z j − ( e z 1 ) 2 ( ∑ j = 1 n e z j ) 2 \frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}=\frac{{{e}^{{{z}_{1}}}}\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}-{{({{e}^{{{z}_{1}}}})}^{2}}}{{{(\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}})}^{2}}} z1y1=(j=1nezj)2ez1j=1nezj(ez1)2

提取一个公因式 e z 1 e^{z_1} ez1
∂ y 1 ∂ z 1 = e z 1 ( ∑ j = 1 n e z j − e z 1 ) ( ∑ j = 1 n e z j ) 2 \frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}=\frac{{{e}^{{{z}_{1}}}}(\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}-{{e}^{{{z}_{1}}}})}{{{(\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}})}^{2}}} z1y1=(j=1nezj)2ez1(j=1nezjez1)

拆分成两项乘积:
∂ y 1 ∂ z 1 = e z 1 ∑ j = 1 n e z j    ⁣ ⁣ ⋅  ⁣ ⁣   ∑ j = 1 n e z j − e z 1 ∑ j = 1 n e z j \frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}=\frac{{{e}^{{{z}_{1}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}}\text{ }\!\!\cdot\!\!\text{ }\frac{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}-{{e}^{{{z}_{1}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}} z1y1=j=1nezjez1  j=1nezjj=1nezjez1

p 1 = e z 1 ∑ j = 1 n e z j {{\text{p}}_{1}}=\frac{{{e}^{{{z}_{1}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}} p1=j=1nezjez1 ,则:
∂ y 1 ∂ z 1 = p 1    ⁣ ⁣ ⋅  ⁣ ⁣  (1 -  p 1 ) \frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}={{\text{p}}_{1}}\text{ }\!\!\cdot\!\!\text{ (1 - }{{\text{p}}_{1}}) z1y1=p1  (1 - p1)

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值