做会员体系的网站,家具网站开发项目计划书,电脑培训学校课程,深圳好的高端企业网站建设公司Softmax
Softmax是神经网络中常用的一种激活函数#xff0c;用于多分类任务。Softmax函数将未归一化的logits转换为概率分布。公式如下#xff1a; P ( y i ) e z i ∑ j 1 N e z j P(y_i) \frac{e^{z_i}}{\sum_{j1}^{N} e^{z_j}} P(yi)∑j1Nezjezi 其中#…Softmax
Softmax是神经网络中常用的一种激活函数用于多分类任务。Softmax函数将未归一化的logits转换为概率分布。公式如下 P ( y i ) e z i ∑ j 1 N e z j P(y_i) \frac{e^{z_i}}{\sum_{j1}^{N} e^{z_j}} P(yi)∑j1Nezjezi 其中 z i z_i zi是类别 i i i的logit N N N是类别总数。
在大型词汇表情况下计算Softmax需要对每个词的logit进行指数运算并归一化这会导致计算成本随词汇表大小线性增长。因此当词汇表非常大时计算Softmax的代价非常高。
层次Softmax
层次SoftmaxHierarchical Softmax是一种通过树结构来加速Softmax计算的方法。它将词汇表组织成一个树结构每个叶节点代表一个词每个内部节点代表一个路径选择的二分类器。通过这种方式可以将计算复杂度从O(N)降低到O(log(N))。
层次Softmax的详细步骤 构建层次结构 将词汇表组织成一棵二叉树或霍夫曼树。霍夫曼树可以根据词频来构建使得高频词的路径更短从而进一步加速计算。 路径表示 对于每个词通过树从根节点到叶节点的路径来表示。例如假设词“banana”的路径为[根 - 右 - 左]。 路径概率计算 每个内部节点都有一个二分类器计算左子节点或右子节点的概率。目标词的概率是从根节点到该词的路径上所有内部节点概率的乘积。 对于目标词 w w w其概率表示为 P ( w ∣ c o n t e x t ) ∏ n ∈ p a t h ( w ) P ( n ∣ c o n t e x t ) P(w|context) \prod_{n \in path(w)} P(n|context) P(w∣context)n∈path(w)∏P(n∣context) 其中 p a t h ( w ) path(w) path(w)表示从根节点到词 w w w的路径上的所有内部节点。 训练过程 使用负对数似然损失函数进行优化。对于每个训练样本计算从根节点到目标词的路径上的所有内部节点的概率并根据实际路径更新模型参数。
对比分析
特点Softmax层次Softmax计算复杂度O(N)O(log(N))适用场景小型词汇表大型词汇表实现复杂度简单复杂需要构建树结构计算效率随词汇表大小增加而增加随词汇表大小增加增长较慢
为了更详细地展示层次Softmax与传统Softmax的对比并包括实际数据和计算过程下面我们使用一个简化的例子来说明。
案例说明 - 词汇表及其层次结构
假设我们有以下词汇表词汇频率为假定
词汇频率apple7banana2cherry4date1
根据词汇频率我们构建如下霍夫曼树 (*)/ \(apple) (*)/ \(cherry) (*)/ \(banana) (date)计算Softmax概率
假设在某个上下文下模型输出以下logits
词汇Logit z z zapple1.5banana0.5cherry1.0date0.2
Softmax计算步骤
计算每个词的指数 e 1.5 4.4817 e^{1.5} 4.4817 e1.54.4817 e 0.5 1.6487 e^{0.5} 1.6487 e0.51.6487 e 1.0 2.7183 e^{1.0} 2.7183 e1.02.7183 e 0.2 1.2214 e^{0.2} 1.2214 e0.21.2214
计算所有指数的总和 Z 4.4817 1.6487 2.7183 1.2214 10.0701 Z 4.4817 1.6487 2.7183 1.2214 10.0701 Z4.48171.64872.71831.221410.0701
计算每个词的概率 P ( a p p l e ) 4.4817 10.0701 ≈ 0.445 P(apple) \frac{4.4817}{10.0701} \approx 0.445 P(apple)10.07014.4817≈0.445 P ( b a n a n a ) 1.6487 10.0701 ≈ 0.164 P(banana) \frac{1.6487}{10.0701} \approx 0.164 P(banana)10.07011.6487≈0.164 P ( c h e r r y ) 2.7183 10.0701 ≈ 0.270 P(cherry) \frac{2.7183}{10.0701} \approx 0.270 P(cherry)10.07012.7183≈0.270 P ( d a t e ) 1.2214 10.0701 ≈ 0.121 P(date) \frac{1.2214}{10.0701} \approx 0.121 P(date)10.07011.2214≈0.121
计算层次Softmax概率
我们使用以下假设的特征向量和模型参数来计算每个内部节点的概率
模型参数
根节点二分类器 权重 w r o o t [ 0.5 , − 0.2 ] w_{root} [0.5, -0.2] wroot[0.5,−0.2]偏置 b r o o t 0 b_{root} 0 broot0 右子节点二分类器 权重 w r i g h t [ 0.3 , 0.4 ] w_{right} [0.3, 0.4] wright[0.3,0.4]偏置 b r i g h t − 0.1 b_{right} -0.1 bright−0.1 子树根二分类器 权重 w s u b t r e e [ − 0.4 , 0.2 ] w_{subtree} [-0.4, 0.2] wsubtree[−0.4,0.2]偏置 b s u b t r e e 0.2 b_{subtree} 0.2 bsubtree0.2
上下文特征向量 x c o n t e x t [ 1 , 2 ] x_{context} [1, 2] xcontext[1,2]
1. 计算根节点概率 z r o o t w r o o t ⋅ x c o n t e x t b r o o t z_{root} w_{root} \cdot x_{context} b_{root} zrootwroot⋅xcontextbroot z r o o t 0.5 × 1 ( − 0.2 ) × 2 0 z_{root} 0.5 \times 1 (-0.2) \times 2 0 zroot0.5×1(−0.2)×20 z r o o t 0.5 − 0.4 z_{root} 0.5 - 0.4 zroot0.5−0.4 z r o o t 0.1 z_{root} 0.1 zroot0.1
使用sigmoid函数计算概率 P ( l e f t ∣ c o n t e x t ) r o o t σ ( z r o o t ) P(left|context)_{root} \sigma(z_{root}) P(left∣context)rootσ(zroot) P ( l e f t ∣ c o n t e x t ) r o o t 1 1 e − 0.1 P(left|context)_{root} \frac{1}{1 e^{-0.1}} P(left∣context)root1e−0.11 P ( l e f t ∣ c o n t e x t ) r o o t ≈ 1 1 0.9048 P(left|context)_{root} \approx \frac{1}{1 0.9048} P(left∣context)root≈10.90481 P ( l e f t ∣ c o n t e x t ) r o o t ≈ 0.525 P(left|context)_{root} \approx 0.525 P(left∣context)root≈0.525 P ( r i g h t ∣ c o n t e x t ) r o o t 1 − P ( l e f t ∣ c o n t e x t ) r o o t P(right|context)_{root} 1 - P(left|context)_{root} P(right∣context)root1−P(left∣context)root P ( r i g h t ∣ c o n t e x t ) r o o t 1 − 0.525 P(right|context)_{root} 1 - 0.525 P(right∣context)root1−0.525 P ( r i g h t ∣ c o n t e x t ) r o o t ≈ 0.475 P(right|context)_{root} \approx 0.475 P(right∣context)root≈0.475
2. 计算右子节点概率 z r i g h t w r i g h t ⋅ x c o n t e x t b r i g h t z_{right} w_{right} \cdot x_{context} b_{right} zrightwright⋅xcontextbright z r i g h t 0.3 × 1 0.4 × 2 − 0.1 z_{right} 0.3 \times 1 0.4 \times 2 - 0.1 zright0.3×10.4×2−0.1 z r i g h t 0.3 0.8 − 0.1 z_{right} 0.3 0.8 - 0.1 zright0.30.8−0.1 z r i g h t 1.0 z_{right} 1.0 zright1.0
使用sigmoid函数计算概率 P ( l e f t ∣ c o n t e x t ) r i g h t σ ( z r i g h t ) P(left|context)_{right} \sigma(z_{right}) P(left∣context)rightσ(zright) P ( l e f t ∣ c o n t e x t ) r i g h t 1 1 e − 1.0 P(left|context)_{right} \frac{1}{1 e^{-1.0}} P(left∣context)right1e−1.01 P ( l e f t ∣ c o n t e x t ) r i g h t ≈ 1 1 0.3679 P(left|context)_{right} \approx \frac{1}{1 0.3679} P(left∣context)right≈10.36791 P ( l e f t ∣ c o n t e x t ) r i g h t ≈ 0.731 P(left|context)_{right} \approx 0.731 P(left∣context)right≈0.731 P ( r i g h t ∣ c o n t e x t ) r i g h t 1 − P ( l e f t ∣ c o n t e x t ) r i g h t P(right|context)_{right} 1 - P(left|context)_{right} P(right∣context)right1−P(left∣context)right P ( r i g h t ∣ c o n t e x t ) r i g h t 1 − 0.731 P(right|context)_{right} 1 - 0.731 P(right∣context)right1−0.731 P ( r i g h t ∣ c o n t e x t ) r i g h t ≈ 0.269 P(right|context)_{right} \approx 0.269 P(right∣context)right≈0.269
3. 计算子树根节点概率 z s u b t r e e w s u b t r e e ⋅ x c o n t e x t b s u b t r e e z_{subtree} w_{subtree} \cdot x_{context} b_{subtree} zsubtreewsubtree⋅xcontextbsubtree z s u b t r e e − 0.4 × 1 0.2 × 2 0.2 z_{subtree} -0.4 \times 1 0.2 \times 2 0.2 zsubtree−0.4×10.2×20.2 z s u b t r e e − 0.4 0.4 0.2 z_{subtree} -0.4 0.4 0.2 zsubtree−0.40.40.2 z s u b t r e e 0.2 z_{subtree} 0.2 zsubtree0.2
使用sigmoid函数计算概率 P ( l e f t ∣ c o n t e x t ) s u b t r e e σ ( z s u b t r e e ) P(left|context)_{subtree} \sigma(z_{subtree}) P(left∣context)subtreeσ(zsubtree) P ( l e f t ∣ c o n t e x t ) s u b t r e e 1 1 e − 0.2 P(left|context)_{subtree} \frac{1}{1 e^{-0.2}} P(left∣context)subtree1e−0.21 P ( l e f t ∣ c o n t e x t ) s u b t r e e ≈ 1 1 0.8187 P(left|context)_{subtree} \approx \frac{1}{1 0.8187} P(left∣context)subtree≈10.81871 P ( l e f t ∣ c o n t e x t ) s u b t r e e ≈ 0.55 P(left|context)_{subtree} \approx 0.55 P(left∣context)subtree≈0.55 P ( r i g h t ∣ c o n t e x t ) s u b t r e e 1 − P ( l e f t ∣ c o n t e x t ) s u b t r e e P(right|context)_{subtree} 1 - P(left|context)_{subtree} P(right∣context)subtree1−P(left∣context)subtree P ( r i g h t ∣ c o n t e x t ) s u b t r e e 1 − 0.55 P(right|context)_{subtree} 1 - 0.55 P(right∣context)subtree1−0.55 P ( r i g h t ∣ c o n t e x t ) s u b t r e e ≈ 0.45 P(right|context)_{subtree} \approx 0.45 P(right∣context)subtree≈0.45
计算各个词的层次Softmax概率
1. apple
路径为[根 - 左] P ( a p p l e ) P ( l e f t ∣ c o n t e x t ) r o o t ≈ 0.525 P(apple) P(left|context)_{root} \approx 0.525 P(apple)P(left∣context)root≈0.525
2. banana
路径为[根 - 右 - 右 - 左] P ( b a n a n a ) P ( r i g h t ∣ c o n t e x t ) r o o t × P ( r i g h t ∣ c o n t e x t ) r i g h t × P ( l e f t ∣ c o n t e x t ) s u b t r e e P(banana) P(right|context)_{root} \times P(right|context)_{right} \times P(left|context)_{subtree} P(banana)P(right∣context)root×P(right∣context)right×P(left∣context)subtree P ( b a n a n a ) ≈ 0.475 × 0.269 × 0.55 P(banana) \approx 0.475 \times 0.269 \times 0.55 P(banana)≈0.475×0.269×0.55 P ( b a n a n a ) ≈ 0.0702 P(banana) \approx 0.0702 P(banana)≈0.0702
3. cherry
路径为[根 - 右 - 左] P ( c h e r r y ) P ( r i g h t ∣ c o n t e x t ) r o o t × P ( l e f t ∣ c o n t e x t ) r i g h t P(cherry) P(right|context)_{root} \times P(left|context)_{right} P(cherry)P(right∣context)root×P(left∣context)right P ( c h e r r y ) ≈ 0.475 × 0.731 P(cherry) \approx 0.475 \times 0.731 P(cherry)≈0.475×0.731 P ( c h e r r y ) ≈ 0.3472 P(cherry) \approx 0.3472 P(cherry)≈0.3472
4. date
路径为[根 - 右 - 右 - 右] P ( d a t e ) P ( r i g h t ∣ c o n t e x t ) r o o t × P ( r i g h t ∣ c o n t e x t ) r i g h t × P ( r i g h t ∣ c o n t e x t ) s u b t r e e P(date) P(right|context)_{root} \times P(right|context)_{right} \times P(right|context)_{subtree} P(date)P(right∣context)root×P(right∣context)right×P(right∣context)subtree P ( d a t e ) ≈ 0.475 × 0.269 × 0.45 P(date) \approx 0.475 \times 0.269 \times 0.45 P(date)≈0.475×0.269×0.45 P ( d a t e ) ≈ 0.0575 P(date) \approx 0.0575 P(date)≈0.0575
概率总结
词汇Softmax 概率层次Softmax 概率apple0.4450.525banana0.1640.0702cherry0.2700.3472date0.1210.0575
以上结果显示了传统Softmax和层次Softmax的概率计算方法及其结果。通过构建霍夫曼树层次Softmax显著减少了计算复杂度特别适用于处理大规模词汇表的任务。
Softmax与层次Softmax总结
特点Softmax层次Softmax计算复杂度O(N)O(log(N))优点简单直接适用于小型词汇表计算效率高适用于大规模词汇表缺点计算量大随着词汇表大小增加而线性增加需要构建和维护层次结构模型复杂性增加适用场景词汇表较小的多分类问题词汇表非常大的自然语言处理任务如语言建模和机器翻译
总结来说层次Softmax通过树结构优化了大词汇表的概率计算使其在处理大型词汇表的任务中具有显著优势而传统Softmax则更适合小型词汇表的场景。