3.4.1 分类问题
整节理论知识,详见书本。
3.4.2 网络架构
整节理论知识,详见书本。
3.4.3 全连接层的参数开销
整节理论知识,详见书本。
3.4.4 softmax运算
整节理论知识,详见书本。
3.4.5 小批量样本的向量化
整节理论知识,详见书本。
3.4.6 损失函数
整节理论知识,详见书本。
3.4.7 信息论基础
整节理论知识,详见书本。
以下为结合视频《“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”》对交叉熵的理解:
-
为什么香农要把信息量定义为 −logP(j)?
香农如此定义当然并非一时兴起。
假设有一事件的概率为 P,该事件可拆分为两个小事件,这两个小事件的概率分别为 P1 和 P2。那么显然 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)。
-
何为熵?
熵的定义式如下:
H(P)=∑j−P(j)logP(j)
显而易见,熵=∑j概率×信息量,也就是说熵实际上就是事件信息量的期望。
-
什么是交叉熵?为什么交叉熵能当损失函数?
为了计量的是真实值与估计值之间的差距,在这里自然的使用真实值与估计值的信息量的均差,称之为 KL 散度:
DKL(y|^y)=q∑j=1yj(f(^yj)−f(yj))=q∑j=1yj((−log^yj)−(−logyj))=q∑j=1yj(−log^yj)−q∑j=1yj(−logyj)=交叉熵−熵(1)(2)(3)(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)∑qk=1exp(ok)−yj=softmax(o)j−yj
则二阶导为:
∂2l(y,^y)∂o2j=∂exp(oj)∑qk=1exp(ok)−yj∂oj=exp(oj)∑qk=1exp(ok)−exp2(oj)(∑qk=1exp(ok))2−0=exp(oj)∑qk=1exp(ok)(1−exp(oj)∑qk=1exp(ok))=softmax(o)j(1−softmax(o)j)(5)(6)(7)(8)
b.先求均值:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯softmax(o)=1qq∑j=1softmax(o)j=1qq∑j=1exp(oj)∑qk=1exp(ok)=1q∑qj=1exp(oj)∑qk=1exp(ok)=1q(9)(10)(11)(12)
方差为:
V ar(o)=1qq∑j=1(softmax(o)j−¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯softmax(o))2=1q[(softmax(o)1−1q)2+(softmax(o)2−1q)2+⋯+(softmax(o)q−1q)2]=1q(1q+q∑j=1softmax2(o)j−2qq∑j=1softmax(o)j)=1q(1q−2q+q∑j=1softmax2(o)j)=−1q2+1qq∑j=1softmax2(o)j(13)(14)(15)(16)(17)
上式与二阶导数式匹配为:
V ar(o)=−1q2+1qq∑j=1softmax2(o)j=−1q2−1q(1−q∑j=1softmax2(o)j)+1q=−1q2−1q(q∑j=1softmax(o)j−q∑j=1softmax2(o)j)+1q=−1q2−1qq∑j=1(softmax(o)j−softmax2(o)j)+1q=q−1q2−1qq∑j=1∂2l(y,^y)∂o2j(18)(19)(20)(21)(22)
(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 则:
λ−1ReakSiftMax(λa,λb)=λ−1log(exp(λa)+exp(λb))>λ−1log(exp(max(λa,λb)))=λ−1max(λa,λb)=λ−1λmax(a,b)=max(a,b)(23)(24)(25)
若 λ<0 则:
λ−1ReakSiftMax(λa,λb)=λ−1log(exp(λa)+exp(λb))<λ−1log(exp(min(λa,λb)))=λ−1min(λa,λb)=λ−1λmax(a,b)=max(a,b)(26)(27)(28)
c. 若 a≠b,则:
limλ→∞exp(max(λa,λb))≫limλ→∞exp(min(λa,λb))
故:
limλ→∞λ−1ReakSiftMax(λa,λb)=limλ→∞λ−1log(exp(λa)+exp(λb))=limλ→∞λ−1log(exp(max(λa,λb)))=limλ→∞λ−1max(λa,λb)=limλ→∞λ−1λmax(a,b)=max(a,b)(29)(30)(31)(32)(33)
若 a=b,则:
limλ→∞λ−1ReakSiftMax(λa,λb)=limλ→∞λ−1log(exp(λa)+exp(λb))=limλ→∞λ−1log(2exp(max(λa,λb)))=limλ→∞λ−1[max(λa,λb)+log2]=limλ→∞[λ−1λmax(a,b)+λ−1log2]=max(a,b)+0=max(a,b)(34)(35)(36)(37)(38)(39)
d. softmin(o)j=softmax(−o)j,故softmin 长这个样子:
softmin(o)j=exp(−oj)∑qk=1exp(−ok)
详细参见官方文档 SOFTMIN
e. 扩展到 n 个参数为:
ReakSiftMax(x1,x2…,xn)=log(exp(x1)+exp(x2)+⋯+exp(xn))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了