当前位置: 首页 > news >正文

【自然语言处理】预训练02:近似训练

在这里插入图片描述

【作者主页】Francek Chen
【专栏介绍】⌈⌈PyTorch深度学习⌋⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。

文章目录

    • 一、负采样
    • 二、层序Softmax
    • 小结


  回想一下我们在词嵌入(word2vec)中的讨论。跳元模型的主要思想是使用softmax运算来计算基于给定的中心词wcw_cwc生成上下文字wow_owo的条件概率,对应的对数损失在式(7)给出。

  由于softmax操作的性质,上下文词可以是词表V\mathcal{V}V中的任意项,式(7)包含与整个词表大小一样多的项的求和。因此,式(8)中跳元模型的梯度计算和式(15)中的连续词袋模型的梯度计算都包含求和。不幸的是,在一个词典上(通常有几十万或数百万个单词)求和的梯度的计算成本是巨大的!

  为了降低上述计算复杂度,本节将介绍两种近似训练方法:负采样分层softmax。由于跳元模型和连续词袋模型的相似性,我们将以跳元模型为例来描述这两种近似训练方法。

一、负采样

  负采样修改了原目标函数。给定中心词wcw_cwc的上下文窗口,任意上下文词wow_owo来自该上下文窗口的被认为是由下式建模概率的事件:
P(D=1∣wc,wo)=σ(uo⊤vc)(1)P(D=1\mid w_c, w_o) = \sigma(\mathbf{u}_o^\top \mathbf{v}_c) \tag{1}P(D=1wc,wo)=σ(uovc)(1) 其中σ\sigmaσ使用了sigmoid激活函数的定义:
σ(x)=11+exp⁡(−x)(2)\sigma(x) = \frac{1}{1+\exp(-x)} \tag{2}σ(x)=1+exp(x)1(2)

  让我们从最大化文本序列中所有这些事件的联合概率开始训练词嵌入。具体而言,给定长度为TTT的文本序列,以w(t)w^{(t)}w(t)表示时间步ttt的词,并使上下文窗口为mmm,考虑最大化联合概率:
∏t=1T∏−m≤j≤m,j≠0P(D=1∣w(t),w(t+j))(3)\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(D=1\mid w^{(t)}, w^{(t+j)}) \tag{3}t=1Tmjm, j=0P(D=1w(t),w(t+j))(3)

  然而,式(3)只考虑那些正样本的事件。仅当所有词向量都等于无穷大时,式(3)中的联合概率才最大化为1。当然,这样的结果毫无意义。为了使目标函数更有意义,负采样添加从预定义分布中采样的负样本。

  用SSS表示上下文词wow_owo来自中心词wcw_cwc的上下文窗口的事件。对于这个涉及wow_owo的事件,从预定义分布P(w)P(w)P(w)中采样KKK个不是来自这个上下文窗口噪声词。用NkN_kNk表示噪声词wkw_kwkk=1,…,Kk=1, \ldots, Kk=1,,K)不是来自wcw_cwc的上下文窗口的事件。假设正例和负例S,N1,…,NKS, N_1, \ldots, N_KS,N1,,NK的这些事件是相互独立的。负采样将式(3)中的联合概率(仅涉及正例)重写为
∏t=1T∏−m≤j≤m,j≠0P(w(t+j)∣w(t))(4)\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(w^{(t+j)} \mid w^{(t)}) \tag{4}t=1Tmjm, j=0P(w(t+j)w(t))(4)

  通过事件S,N1,…,NKS, N_1, \ldots, N_KS,N1,,NK近似条件概率:
P(w(t+j)∣w(t))=P(D=1∣w(t),w(t+j))∏k=1,wk∼P(w)KP(D=0∣w(t),wk)(5)P(w^{(t+j)} \mid w^{(t)}) =P(D=1\mid w^{(t)}, w^{(t+j)})\prod_{k=1,\ w_k \sim P(w)}^K P(D=0\mid w^{(t)}, w_k) \tag{5}P(w(t+j)w(t))=P(D=1w(t),w(t+j))k=1, wkP(w)KP(D=0w(t),wk)(5)

  分别用iti_tithkh_khk表示词w(t)w^{(t)}w(t)和噪声词wkw_kwk在文本序列的时间步ttt处的索引。式(5)中关于条件概率的对数损失为:
−log⁡P(w(t+j)∣w(t))=−log⁡P(D=1∣w(t),w(t+j))−∑k=1,wk∼P(w)Klog⁡P(D=0∣w(t),wk)=−log⁡σ(uit+j⊤vit)−∑k=1,wk∼P(w)Klog⁡(1−σ(uhk⊤vit))=−log⁡σ(uit+j⊤vit)−∑k=1,wk∼P(w)Klog⁡σ(−uhk⊤vit)(6)\begin{aligned} -\log P(w^{(t+j)} \mid w^{(t)}) =& -\log P(D=1\mid w^{(t)}, w^{(t+j)}) - \sum_{k=1,\ w_k \sim P(w)}^K \log P(D=0\mid w^{(t)}, w_k)\\ =&- \log\, \sigma\left(\mathbf{u}_{i_{t+j}}^\top \mathbf{v}_{i_t}\right) - \sum_{k=1,\ w_k \sim P(w)}^K \log\left(1-\sigma\left(\mathbf{u}_{h_k}^\top \mathbf{v}_{i_t}\right)\right)\\ =&- \log\, \sigma\left(\mathbf{u}_{i_{t+j}}^\top \mathbf{v}_{i_t}\right) - \sum_{k=1,\ w_k \sim P(w)}^K \log\sigma\left(-\mathbf{u}_{h_k}^\top \mathbf{v}_{i_t}\right) \end{aligned} \tag{6} logP(w(t+j)w(t))===logP(D=1w(t),w(t+j))k=1, wkP(w)KlogP(D=0w(t),wk)logσ(uit+jvit)k=1, wkP(w)Klog(1σ(uhkvit))logσ(uit+jvit)k=1, wkP(w)Klogσ(uhkvit)(6)

  我们可以看到,现在每个训练步的梯度计算成本与词表大小无关,而是线性依赖于KKK。当将超参数KKK设置为较小的值时,在负采样的每个训练步处的梯度的计算成本较小。

二、层序Softmax

  作为另一种近似训练方法,层序Softmax(hierarchical softmax)使用二叉树(图1中说明的数据结构),其中树的每个叶节点表示词表V\mathcal{V}V中的一个词。

在这里插入图片描述

图1 用于近似训练的分层softmax,其中树的每个叶节点表示词表中的一个词

  用L(w)L(w)L(w)表示二叉树中表示字www的从根节点到叶节点的路径上的节点数(包括两端)。设n(w,j)n(w,j)n(w,j)为该路径上的jthj^\mathrm{th}jth节点,其上下文字向量为un(w,j)\mathbf{u}_{n(w, j)}un(w,j)。例如,图1中的L(w3)=4L(w_3) = 4L(w3)=4。分层softmax将词嵌入(word2vec)中的式(4)中的条件概率近似为
P(wo∣wc)=∏j=1L(wo)−1σ([⁣[n(wo,j+1)=leftChild(n(wo,j))]⁣]⋅un(wo,j)⊤vc)(7)P(w_o \mid w_c) = \prod_{j=1}^{L(w_o)-1} \sigma\left( [\![ n(w_o, j+1) = \text{leftChild}(n(w_o, j)) ]\!] \cdot \mathbf{u}_{n(w_o, j)}^\top \mathbf{v}_c\right) \tag{7}P(wowc)=j=1L(wo)1σ([[n(wo,j+1)=leftChild(n(wo,j))]]un(wo,j)vc)(7) 其中函数σ\sigmaσ在式(2)中定义,leftChild(n)\text{leftChild}(n)leftChild(n)是节点nnn的左子节点:如果xxx为真,[⁣[x]⁣]=1[\![x]\!] = 1[[x]]=1;否则[⁣[x]⁣]=−1[\![x]\!] = -1[[x]]=1

  为了说明,让我们计算图1中给定词wcw_cwc生成词w3w_3w3的条件概率。这需要wcw_cwc的词向量vc\mathbf{v}_cvc和从根到w3w_3w3的路径(图1中加粗的路径)上的非叶节点向量之间的点积,该路径依次向左、向右和向左遍历:
P(w3∣wc)=σ(un(w3,1)⊤vc)⋅σ(−un(w3,2)⊤vc)⋅σ(un(w3,3)⊤vc)(8)P(w_3 \mid w_c) = \sigma(\mathbf{u}_{n(w_3, 1)}^\top \mathbf{v}_c) \cdot \sigma(-\mathbf{u}_{n(w_3, 2)}^\top \mathbf{v}_c) \cdot \sigma(\mathbf{u}_{n(w_3, 3)}^\top \mathbf{v}_c) \tag{8}P(w3wc)=σ(un(w3,1)vc)σ(un(w3,2)vc)σ(un(w3,3)vc)(8)σ(x)+σ(−x)=1\sigma(x)+\sigma(-x) = 1σ(x)+σ(x)=1,它认为基于任意词wcw_cwc生成词表V\mathcal{V}V中所有词的条件概率总和为1:
∑w∈VP(w∣wc)=1(9)\sum_{w \in \mathcal{V}} P(w \mid w_c) = 1 \tag{9}wVP(wwc)=1(9)

  幸运的是,由于二叉树结构,L(wo)−1L(w_o)-1L(wo)1大约与O(log2∣V∣)\mathcal{O}(\text{log}_2|\mathcal{V}|)O(log2V)是一个数量级。当词表大小V\mathcal{V}V很大时,与没有近似训练的相比,使用分层softmax的每个训练步的计算代价显著降低。

小结

  • 负采样通过考虑相互独立的事件来构造损失函数,这些事件同时涉及正例和负例。训练的计算量与每一步的噪声词数成线性关系。
  • 分层softmax使用二叉树中从根节点到叶节点的路径构造损失函数。训练的计算成本取决于词表大小的对数。
http://www.dtcms.com/a/549125.html

相关文章:

  • 具身智能革命:富唯智能如何用“认知机器人”重塑柔性智造新纪元
  • 孤能子视角:文明演化的适配性考验——从EIS理论看中美技术路径分野
  • itunes礼品卡兑换【完整协议方案】
  • High Rank Adaption系列文章
  • wordpress 网站迁移如何做网站霸屏
  • Rust 中 Raft 协议的云原生深度集成与实践最佳实践
  • html css js网页制作成品——掌心电视剧HTML+CSS网页设计(4页)附源码
  • 基于用户的协同过滤算法实现小说推荐算法
  • 速卖通新客优惠券采购:砍单率高的核心原因
  • 【11408学习记录】考研数学概率论核心突破:一维随机变量函数分布——公式法 分布函数法精讲!​
  • Flutter 网络通信协议:从原理到实战,选对协议让 APP 飞起来
  • 【机器学习入门】9.2:感知机的工作原理 —— 从模型结构到实战分类
  • Flutter---个人信息(3)---实现修改性别
  • 做个网站需要什么制作软件的网站
  • 河北手机响应式网站建设设计企业门户网站管理制度
  • Docker简介与优豆云环境搭建
  • 后端面试实战:手写 Java 线程池核心逻辑,解释核心参数的作用
  • 免费做数学题的网站大连装修公司排名榜
  • Spring Al学习5 :聊天模型 API
  • 分布式锁深度解析:从架构本质到生产实践
  • 浏览器就是画板!PaintBoard让创意灵感不再受设备限制
  • 网站建设要学哪种计算机语言小学生一分钟新闻播报
  • FT8370A/B/C/CD/CP高性能次边同步整流芯片典型电路及管脚定义
  • MySQL(五) - 数据连接查询和子查询操作
  • STM32——WWDG
  • STM32-音频播放
  • 前端学习:选择器的类别
  • 运输网站建设wordpress 不同page
  • Qt的Debug版本和Release版本有什么区别?
  • Docker使用【容器】