《动手学深度学习 Pytorch版》 3.4 softmax回归

3.4.1 分类问题

整节理论知识,详见书本。

3.4.2 网络架构

整节理论知识,详见书本。

3.4.3 全连接层的参数开销

整节理论知识,详见书本。

3.4.4 softmax运算

整节理论知识,详见书本。

3.4.5 小批量样本的向量化

整节理论知识,详见书本。

3.4.6 损失函数

整节理论知识,详见书本。

3.4.7 信息论基础

整节理论知识,详见书本。

以下为结合视频《“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”》对交叉熵的理解:

  1. 为什么香农要把信息量定义为 logP(j)

    香农如此定义当然并非一时兴起。

    假设有一事件的概率为 P,该事件可拆分为两个小事件,这两个小事件的概率分别为 P1P2。那么显然 P=P1×P2

    我们假设信息量为 f(P(j))(自变量为概率),则为了保持量纲需要满足 f(P)=f(P1)+f(P2)

    为了满足以上两个式子,顺理成章的想到给 f(P(j)) 应该是对数运算,即 f(P(j))=log(P(j))

    又为了满足概率越大信息量越小的直观感受,可在给对数运算取负值,至此即得出信息量的定义 f(P(j))=logP(j)

  2. 何为熵?

    熵的定义式如下:

    H(P)=jP(j)logP(j)

    显而易见,=j×,也就是说熵实际上就是事件信息量的期望。

  3. 什么是交叉熵?为什么交叉熵能当损失函数?

    为了计量的是真实值与估计值之间的差距,在这里自然的使用真实值与估计值的信息量的均差,称之为 KL 散度:

    (1)DKL(y|y^)=j=1qyj(f(y^j)f(yj))(2)=j=1qyj((logy^j)(logyj))(3)=j=1qyj(logy^j)j=1qyj(logyj)(4)=

    吉布斯不等式知,KL 散度的前项一定大于后向,即 DKL(y|y^)0

    因此便可以取交叉熵作为真实值与估计值之间的差距,且最小化交叉熵即可最小化损失。

3.4.8 模型预测和评估

整节理论知识,详见书本。

练习

(1)我们可以更深入地探讨指数族与 softmax 之间的联系。

a. 计算 softmax 交叉熵损失 l(y,y^) 的二阶导数。

b. 计算 softmax(o) 给出的分布方差,并与上面计算的二阶导数匹配。

a. 由 3.5.6 2 知道:

l(y,y^)oj=exp(oj)k=1qexp(ok)yj=softmax(o)jyj

则二阶导为:

(5)2l(y,y^)oj2=exp(oj)k=1qexp(ok)yjoj(6)=exp(oj)k=1qexp(ok)exp2(oj)(k=1qexp(ok))20(7)=exp(oj)k=1qexp(ok)(1exp(oj)k=1qexp(ok))(8)=softmax(o)j(1softmax(o)j)

b.先求均值:

(9)softmax(o)¯=1qj=1qsoftmax(o)j(10)=1qj=1qexp(oj)k=1qexp(ok)(11)=1qj=1qexp(oj)k=1qexp(ok)(12)=1q

方差为:

(13)V ar(o)=1qj=1q(softmax(o)jsoftmax(o)¯)2(14)=1q[(softmax(o)11q)2+(softmax(o)21q)2++(softmax(o)q1q)2](15)=1q(1q+j=1qsoftmax2(o)j2qj=1qsoftmax(o)j)(16)=1q(1q2q+j=1qsoftmax2(o)j)(17)=1q2+1qj=1qsoftmax2(o)j

上式与二阶导数式匹配为:

(18)V ar(o)=1q2+1qj=1qsoftmax2(o)j(19)=1q21q(1j=1qsoftmax2(o)j)+1q(20)=1q21q(j=1qsoftmax(o)jj=1qsoftmax2(o)j)+1q(21)=1q21qj=1q(softmax(o)jsoftmax2(o)j)+1q(22)=q1q21qj=1q2l(y,y^)oj2


(2)假设我们有3个类别出现的的概率相等,即概率向量是 (13,13,13)

a. 如果我们尝试为它设计二进制代码,有什么问题?

b. 请设计一个更好的代码。(提示:如果我们尝试为两个独立的观测结果编码会发生什么,如果我们为 n 个观测值联合编码怎么办?)

a. 3不是2的幂,用两位二进制编码则会浪费一个编码,这样后面就会很麻烦。

b. 如 3.4.1 所述,可使用独热编码,即分别使用 100、010 和 001 代表上述三个类别。


(3)softmax 是对上面介绍的映射的误称(虽然深度学习领域很多人都使用这个名字)。真正的 softmax 被定义为 ReakSiftMax(a,b)=log(exp(a)+exp(b))

a. 证明 ReakSiftMax(a,b)>max(a,b)

b. 证明 λ1ReakSiftMax(λa,λb)>max(a,b) 成立,前提是 λ>0

c. 证明对于 λ,有 λ1ReakSiftMax(λa,λb)max(a,b)

d. sofrmax 会是什么样子?

e. 将其扩展到两个以上的数字。

a. ReakSiftMax(a,b)=log(exp(a)+exp(b))>log(exp(max(a,b)))=max(a,b)

b. 若 λ>0 则:

(23)λ1ReakSiftMax(λa,λb)=λ1log(exp(λa)+exp(λb))>λ1log(exp(max(λa,λb)))=λ1max(λa,λb)(24)=λ1λmax(a,b)(25)=max(a,b)

λ<0 则:

(26)λ1ReakSiftMax(λa,λb)=λ1log(exp(λa)+exp(λb))<λ1log(exp(min(λa,λb)))=λ1min(λa,λb)(27)=λ1λmax(a,b)(28)=max(a,b)

c. 若 ab,则:

limλexp(max(λa,λb))limλexp(min(λa,λb))

故:

(29)limλλ1ReakSiftMax(λa,λb)=limλλ1log(exp(λa)+exp(λb))(30)=limλλ1log(exp(max(λa,λb)))(31)=limλλ1max(λa,λb)(32)=limλλ1λmax(a,b)(33)=max(a,b)

a=b,则:

(34)limλλ1ReakSiftMax(λa,λb)=limλλ1log(exp(λa)+exp(λb))(35)=limλλ1log(2exp(max(λa,λb)))(36)=limλλ1[max(λa,λb)+log2](37)=limλ[λ1λmax(a,b)+λ1log2](38)=max(a,b)+0(39)=max(a,b)

d. softmin(o)j=softmax(o)j,故softmin 长这个样子:

softmin(o)j=exp(oj)k=1qexp(ok)

详细参见官方文档 SOFTMIN

e. 扩展到 n 个参数为:

ReakSiftMax(x1,x2,xn)=log(exp(x1)+exp(x2)++exp(xn))

posted @   AncilunKiang  阅读(156)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示