首页 > 其他分享 >NLP - Softmax与层次Softmax对比

NLP - Softmax与层次Softmax对比

时间:2024-07-05 14:27:44浏览次数:19  
标签:NLP right 层次 subtree Softmax context root left

Softmax

Softmax是神经网络中常用的一种激活函数,用于多分类任务。Softmax函数将未归一化的logits转换为概率分布。公式如下:

P ( y i ) = e z i ∑ j = 1 N e z j P(y_i) = \frac{e^{z_i}}{\sum_{j=1}^{N} e^{z_j}} P(yi​)=∑j=1N​ezj​ezi​​
其中, z i z_i zi​是类别 i i i的logit, N N N是类别总数。

在大型词汇表情况下,计算Softmax需要对每个词的logit进行指数运算并归一化,这会导致计算成本随词汇表大小线性增长。因此,当词汇表非常大时,计算Softmax的代价非常高。

层次Softmax

层次Softmax(Hierarchical Softmax)是一种通过树结构来加速Softmax计算的方法。它将词汇表组织成一个树结构,每个叶节点代表一个词,每个内部节点代表一个路径选择的二分类器。通过这种方式,可以将计算复杂度从O(N)降低到O(log(N))。

层次Softmax的详细步骤
  1. 构建层次结构

    • 将词汇表组织成一棵二叉树或霍夫曼树。霍夫曼树可以根据词频来构建,使得高频词的路径更短,从而进一步加速计算。
  2. 路径表示

    • 对于每个词,通过树从根节点到叶节点的路径来表示。例如,假设词“banana”的路径为[根 -> 右 -> 左]。
  3. 路径概率计算

    • 每个内部节点都有一个二分类器,计算左子节点或右子节点的概率。
    • 目标词的概率是从根节点到该词的路径上所有内部节点概率的乘积。

    对于目标词 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的路径上的所有内部节点。

  4. 训练过程

    • 使用负对数似然损失函数进行优化。
    • 对于每个训练样本,计算从根节点到目标词的路径上的所有内部节点的概率,并根据实际路径更新模型参数。

对比分析

特点Softmax层次Softmax
计算复杂度O(N)O(log(N))
适用场景小型词汇表大型词汇表
实现复杂度简单复杂,需要构建树结构
计算效率随词汇表大小增加而增加随词汇表大小增加,增长较慢

为了更详细地展示层次Softmax与传统Softmax的对比,并包括实际数据和计算过程,下面我们使用一个简化的例子来说明。

案例说明 - 词汇表及其层次结构

假设我们有以下词汇表(词汇频率为假定):

词汇频率
apple7
banana2
cherry4
date1

根据词汇频率,我们构建如下霍夫曼树:

       (*)
     /     \
  (apple)  (*)
           / \
      (cherry) (*)
               / \
         (banana) (date)

计算Softmax概率

假设在某个上下文下,模型输出以下logits:

词汇Logit z z z
apple1.5
banana0.5
cherry1.0
date0.2
Softmax计算步骤:
  1. 计算每个词的指数:

e 1.5 = 4.4817 e^{1.5} = 4.4817 e1.5=4.4817
e 0.5 = 1.6487 e^{0.5} = 1.6487 e0.5=1.6487
e 1.0 = 2.7183 e^{1.0} = 2.7183 e1.0=2.7183
e 0.2 = 1.2214 e^{0.2} = 1.2214 e0.2=1.2214

  1. 计算所有指数的总和:

Z = 4.4817 + 1.6487 + 2.7183 + 1.2214 = 10.0701 Z = 4.4817 + 1.6487 + 2.7183 + 1.2214 = 10.0701 Z=4.4817+1.6487+2.7183+1.2214=10.0701

  1. 计算每个词的概率:

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 broot​=0
  • 右子节点二分类器:
    • 权重 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 bsubtree​=0.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} zroot​=wroot​⋅xcontext​+broot​
z r o o t = 0.5 × 1 + ( − 0.2 ) × 2 + 0 z_{root} = 0.5 \times 1 + (-0.2) \times 2 + 0 zroot​=0.5×1+(−0.2)×2+0
z r o o t = 0.5 − 0.4 z_{root} = 0.5 - 0.4 zroot​=0.5−0.4
z r o o t = 0.1 z_{root} = 0.1 zroot​=0.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)root​=1+e−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​≈1+0.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)root​=1−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)root​=1−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} zright​=wright​⋅xcontext​+bright​
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 zright​=0.3×1+0.4×2−0.1
z r i g h t = 0.3 + 0.8 − 0.1 z_{right} = 0.3 + 0.8 - 0.1 zright​=0.3+0.8−0.1
z r i g h t = 1.0 z_{right} = 1.0 zright​=1.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)right​=1+e−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​≈1+0.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)right​=1−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)right​=1−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} zsubtree​=wsubtree​⋅xcontext​+bsubtree​
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×1+0.2×2+0.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.4+0.4+0.2
z s u b t r e e = 0.2 z_{subtree} = 0.2 zsubtree​=0.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)subtree​=1+e−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​≈1+0.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)subtree​=1−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)subtree​=1−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.525
banana0.1640.0702
cherry0.2700.3472
date0.1210.0575

以上结果显示了传统Softmax和层次Softmax的概率计算方法及其结果。通过构建霍夫曼树,层次Softmax显著减少了计算复杂度,特别适用于处理大规模词汇表的任务。

Softmax与层次Softmax总结

特点Softmax层次Softmax
计算复杂度O(N)O(log(N))
优点简单直接,适用于小型词汇表计算效率高,适用于大规模词汇表
缺点计算量大,随着词汇表大小增加而线性增加需要构建和维护层次结构,模型复杂性增加
适用场景词汇表较小的多分类问题词汇表非常大的自然语言处理任务,如语言建模和机器翻译

总结来说,层次Softmax通过树结构优化了大词汇表的概率计算,使其在处理大型词汇表的任务中具有显著优势,而传统Softmax则更适合小型词汇表的场景。

标签:NLP,right,层次,subtree,Softmax,context,root,left
From: https://blog.csdn.net/weixin_47552266/article/details/140180119

相关文章

  • OpenBMB × Hugging Face × THUNLP,联袂献上经典大模型课
    这个夏天,THUNLP携手HuggingFace和OpenBMB,推出大模型公开课第二季。在大模型公开课第二季中,将有全球知名开源社区OpenBMBXHuggingFace梦幻联动;MiniCPM、ChatDev、Ultra对齐等明星开源项目作者亲自授课,带领同学从深度学习开始快速了解大模型的相关理论并进行实践。为了......
  • OpenBMB × Hugging Face × THUNLP,大模型课开班丨伙伴活动推荐
    2022年,OpenBMB开源社区联合THUNLP开国内大模型公开课先河,全网百万级播放量,已帮助无数大模型爱好者从入门到精通。 这个夏天,OpenBMB携手HuggingFace、THUNLP和面壁智能,推出大模型公开课第二季。全球知名开源社区OpenBMB×HuggingFace梦幻联动,MiniCPM、ChatDev、Ultr......
  • python 输入文件夹路径,返回所有的层次结构 excel
    importosimportopenpyxlfromopenpyxl.stylesimportFontdefget_folder_structure(root_folder):folder_structure=[]forroot,dirs,filesinos.walk(root_folder):level=root.replace(root_folder,'').count(os.sep)indent=......
  • 深度学习与NLP | 全面回顾最先进:AI大模型+RAG的综述!
    本文来源公众号“深度学习与NLP”,仅用于学术分享,侵权删,干货满满。原文链接:全面回顾最先进:AI大模型+RAG的综述!1 介绍本文全面回顾了当前最先进的RAG技术,包括朴素RAG、进阶RAG和模块RAG等范式,并置于LLM背景下。文章讨论了RAG过程中的核心技术,如“检索”、“生成”和“增强”......
  • Advanced Data Analytics Using Python_ With Machine Learning, Deep Learning and N
    本书提供了使用Python进行高级数据分析的方法,涵盖了机器学习、深度学习和自然语言处理的应用实例。书中详细讲解了如何在不同的数据库环境中进行数据提取、转换和加载(ETL),并探讨了监督学习、无监督学习、深度学习、时间序列分析以及大规模数据分析的相关内容。目录简介为......
  • PaddleNLP UIE 实体关系抽取
    目录环境依赖配置SSH克隆代码训练定制代码结构数据标注准备语料库数据标注导出数据数据转换doccanoLabelStudio模型微调问题处理找不到'paddlenlp.trainer'找不到GPUprotobuf==3.20.2CUDA/cuDNN/paddlePaddleNLPUIE实体关系抽取PaddlePaddle用户可领取免费TeslaV100在线算......
  • Python层次密度聚类算法库之HDBSCAN使用详解
      概要HDBSCAN是一种层次密度聚类算法,它通过密度连接性来构建聚类层次结构。与传统的K-Means算法相比,HDBSCAN具有以下几个显著特点:自动确定聚类数量:HDBSCAN能够根据数据自动确定聚类数量,不需要预先指定。适应噪声和异常点:HDBSCAN在聚类过程中能够很好地处理......
  • NLP是人类和计算机沟通的桥梁
    NLP是人类和计算机沟通的桥梁1.背景介绍1.1问题的由来在当今数字化时代,信息交流的媒介日益丰富多样,从文字、语音到图像,人类与计算机之间的通信方式经历了从命令式交互到自然语言对话的转变。这一转变的核心驱动力在于提高人机交互的自然流畅性,实现更高效、更人性化的信......
  • 真心建议大家冲一冲新兴领域,工资高前景好【大模型NLP开发篇】
    从ChatGPT到新近的GPT-4,GPT模型的发展表明,AI正在向着“类⼈化”⽅向迅速发展。GPT-4具备深度阅读和识图能⼒,能够出⾊地通过专业考试并完成复杂指令,向⼈类引以为傲的“创造⼒”发起挑战。现有的就业结构即将发⽣重⼤变化,社会⽣产⼒的快速提升将催⽣新的⾏业和岗位机会。如......
  • NLP大模型涉浅
    自然语言处理(NLP)作为人工智能的皇冠上的明珠,一直吸引着众多研究者的目光。随着深度学习技术的发展,NLP领域迎来了新的春天。从词汇表征到复杂的神经网络模型,再到预训练语言模型的微调,深度学习为NLP提供了强大的工具和方法。词汇表征:NLP的基石在NLP中,词汇表征是将词语转换为计算机......