【深度学习笔记】softmax函数

在深度学习中,我们经常可以在模型最后的输出层看到softmax的身影。
softmax函数定义为 s o f t m a x ( x ) i = e x i ∑ j = 1 n e x j softmax(x)_i = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}} softmax(x)i=j=1nexjexi
softmax函数的输入端是N×1的向量,输出的尺寸也依然是N×1。同时,从定义中我们可以看到,softmax函数是将向量中的各个数值映射到一个定义域为[0,1]的集合中,并且所有映射后的和为1。
我们也可以将这个输出其视作概率,即是某一个分类的概率,之后再通过与真实值比较将误差回传从而进行训练模型。

而对于softmax的损失,则常用交叉熵损失来定义。交叉熵损失,是根据信息论中对熵的相关定义所推演而来。对于信息熵的定义我们都已知,且通常是只有一个概率分布,但是当进行描述损失时,会有两个概率分布(假设为P(x)和Q(x)),即一个是输出的结果,另一个是真实的概率分布,这是我们就要想到用来描述两个分布的差异的KL散度(Kullback-Leibler(KL) divergence): D K L ( P ∣ ∣ Q ) = E x ∼ P [ l o g P ( x ) Q ( x ) ] = E x ∼ P [ l o g P ( x ) − l o g Q ( x ) ] D_{KL}(P\mid\mid Q) = \Bbb{E}_{x \sim P}\left[ log\frac {P(x)} {Q(x)} \right] = \Bbb{E}_{x \sim P}\left[ logP(x) - logQ(x) \right] DKL(PQ)=ExP[logQ(x)P(x)]=ExP[logP(x)logQ(x)]即: D K L ( P ∣ ∣ Q ) = H ( P ( x ) ) − E x ∼ P l o g Q ( x ) D_{KL}(P\mid\mid Q) = H(P(x)) - \Bbb{E}_{x \sim P}logQ(x) DKL(PQ)=H(P(x))ExPlogQ(x)对于第二项我们发现是两个分布都参与进行计算,我们称之为交叉熵,即: H ( P , Q ) = − E x ∼ P l o g Q ( x ) = − ∑ P ( x ) l o g Q ( x ) H(P,Q) =- \Bbb{E}_{x \sim P}logQ(x) = -\sum P(x)logQ(x) H(P,Q)=ExPlogQ(x)=P(x)logQ(x)通常P(x)是真实分布,Q(x)是softmax的输出分布,对于真实分布,通常只有一个一项值为1,其余为0,这也减少了一部分的计算量。

此外,在进行计算时,需要注意到softmax数值上溢或者下溢,即当x取值较大,由于指数计算会出现NAN,当取值为很小的负数,又会出现四舍五入为零的现象。因此我们通常可以将x的softmax(z)函数输入定义为 z = x − c z = x-c z=xc,这样也并不会影响到最后的计算结果: s o f t m a x ( x ) i = e x i ∑ j = 1 n e x j = s o f t m a x ( z ) i = e x i − c ∑ j = 1 n e x j − c softmax(x)_i = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}} = softmax(z)_i = \frac{e^{x_i-c}}{\sum_{j=1}^n e^{x_j-c}} softmax(x)i=j=1nexjexi=softmax(z)i=j=1nexjcexic通常我们选择减去最大的数。

参考:深度学习(花书)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值