自然语言处理(二):近似训练

news2024/11/25 4:48:30

近似训练

近似训练(Approximate Training)是指在机器学习中使用近似的方法来训练模型,以降低计算复杂度或提高训练效率。这种方法通常用于处理大规模数据集或复杂模型,其中精确的训练算法可能过于耗时或计算资源不足。

近似训练的主要思想是通过在训练过程中引入一些近似技巧或近似算法,以在准确性和效率之间取得平衡。以下是一些常见的近似训练方法:

  1. 随机采样:在训练过程中,通过从数据集中随机采样一部分样本来训练模型,而不是使用完整的数据集。这种方法可以提高训练速度,但可能会引入一定的估计误差。

  2. 小批量训练:将数据集划分为小批量(mini-batch),每次使用一个小批量的样本进行梯度计算和参数更新。相比于全批量训练,小批量训练可以减少计算开销,并在一定程度上保持模型的准确性。

  3. 参数量化:将模型的参数进行量化或压缩,以减少模型的存储空间和计算复杂度。这可以通过使用低精度表示(如浮点数的低位表示)或使用特殊的压缩算法来实现。

  4. 近似损失函数:使用近似的损失函数来代替原始的损失函数。这种方法可以简化计算或优化过程,并在某些情况下仍能保持模型的性能。

  5. 近似优化算法:使用近似的优化算法来更新模型参数。这些算法通常通过减少每次迭代的计算量或降低计算复杂度来提高训练效率。

本章我们讲解的近似方法,主要是为了解决跳元模型和连续词袋模型中softmax大量求和计算提出。

文章内容来自李沐大神的《动手学深度学习》并加以我的理解,感兴趣可以去https://zh-v2.d2l.ai/查看完整书籍


文章目录

  • 近似训练
  • 负采样
  • 层序Softmax


负采样

负采样修改了原目标函数。给定中心词 w c w_c wc的上下文窗口,任意上下文词 w o w_o wo来自该上下文窗口的被认为是由下式建模概率的事件:
P ( D = 1 ∣ w c , w o ) = σ ( u o T v c ) P(D=1|w_c,w_o)=\sigma(u_o^Tv_c) P(D=1∣wc,wo)=σ(uoTvc)

对于词典中索引为 i i i的任何词,分别用 v i ∈ R d v_i\in R^d viRd u i ∈ R d u_i\in R^d uiRd表示其用作中心词和上下文词时的两个向量。

其中 σ \sigma σ使用了sigmoid激活函数的定义:
σ ( x ) = 1 1 + e x p ( − x ) \sigma(x)=\frac{1}{1+exp(-x)} σ(x)=1+exp(x)1
让我们从最大化文本序列中所有这些事件的联合概率开始训练词嵌入。具体而言,给定长度为 T T T的文本序列,以 w ( t ) w^{(t)} w(t)表示时间步 t t t的词,并使上下文窗口为 m m m,考虑最大化联合概率:
∏ t = 1 T ∏ − m ≤ j ≤ m , j ≠ 0 P ( D = 1 ∣ w ( t ) , w ( t + j ) ) \prod_{t=1}^{T}\prod_{-m\leq j \leq m,j\neq 0}P(D=1|w^{(t)},w^{(t+j)}) t=1Tmjm,j=0P(D=1∣w(t),w(t+j))
然而, 上述式子只考虑那些正样本的事件。仅当所有词向量都等于无穷大时, 式子中的联合概率才最大化为1。当然,这样的结果毫无意义。为了使目标函数更有意义,负采样添加从预定义分布中采样的负样本。

S S S表示上下文词 w o w_o wo来自中心词 w c w_c wc的上下文窗口的事件。对于这个涉及 w o w_o wo的事件,从预定义分布 P ( w ) P(w) P(w)中采样 K K K个不是来自这个上下文窗口噪声词。用 N k N_k Nk表示噪声词 w k w_k wk k = 1 , . . . , K k=1,...,K k=1,...,K)不是来自 w c w_c wc的上下文窗口的事件。假设正例和负例 S , N 1 , N 2 , . . . , N k S,N_1,N_2,...,N_k S,N1,N2,...,Nk的这些事件是相互独立的。负采样将上式中的联合概率(仅涉及正例)重写为
∏ t = 1 T ∏ − m ≤ j ≤ m , j ≠ 0 P ( w ( t + j ) ∣ w ( t ) ) \prod_{t=1}^{T}\prod_{-m\leq j \leq m,j\neq 0}P(w^{(t+j)}|w^{(t)}) t=1Tmjm,j=0P(w(t+j)w(t))
通过事件 S , N 1 , . . . , N k S,N_1,...,N_k S,N1,...,Nk近似条件概率:
P ( w ( t + j ) ∣ w ( t ) ) = P ( D = 1 ∣ w c , w o ) ∏ k = 1 , w k   P ( w ) K P ( D = 0 ∣ w ( t ) , w k ) P(w^{(t+j)}|w^{(t)})=P(D=1|w_c,w_o)\prod_{k=1,w_k~P(w)}^{K}P(D=0|w^{(t)},w_k) P(w(t+j)w(t))=P(D=1∣wc,wo)k=1,wk P(w)KP(D=0∣w(t),wk)

在这个公式中, P ( w ( t + j ) ∣ w ( t ) ) P(w^{(t+j)}|w^{(t)}) P(w(t+j)w(t)) 表示在给定中心词 w ( t ) w^{(t)} w(t) 的情况下,目标词 w ( t + j ) w^{(t+j)} w(t+j) 出现的概率。这个概率可以通过两个因素来计算:正例概率 P ( D = 1 ∣ w c , w o ) P(D=1|w_c,w_o) P(D=1∣wc,wo) 和负例概率的乘积。
正例概率 P ( D = 1 ∣ w c , w o ) P(D=1|w_c,w_o) P(D=1∣wc,wo) 表示在给定中心词 w c w_c wc 和上下文词 w o w_o wo 的情况下,目标词 w o w_o wo 是中心词 w c w_c wc 的上下文词的概率,即它们在给定上下文中存在关联的概率。
负例概率的乘积部分表示在给定中心词 w ( t ) w^{(t)} w(t) 的情况下,其他词 w k w_k wk (其中 k k k 的范围是从 1 到 K K K,表示负例的数量)不是中心词的上下文词的概率。这里使用了一个分布 P ( w ) P(w) P(w) 来表示词 w k w_k wk 的概率分布,通常可以根据词的频率来定义分布。
因此,公式中的乘积部分 ∏ k = 1 , w k ∼ P ( w ) K P ( D = 0 ∣ w ( t ) , w k ) \prod_{k=1,w_k\sim P(w)}^{K} P(D=0|w^{(t)},w_k) k=1,wkP(w)KP(D=0∣w(t),wk) 表示对于每一个负例词 w k w_k wk,在给定中心词 w ( t ) w^{(t)} w(t) 的情况下,词 w k w_k wk 不是中心词的上下文词的概率。

分别用 i t i_t it h k h_k hk表示词 w ( t ) w^{(t)} w(t)和噪声词 w k w_k wk在文本序列的时间步 t t t处的索引。上述式子中关于条件概率的对数损失为:
在这里插入图片描述
我们可以看到,现在每个训练步的梯度计算成本与词表大小无关,而是线性依赖于 K K K。当将超参数 K K K设置为较小的值时,在负采样的每个训练步处的梯度的计算成本较小。

层序Softmax

作为另一种近似训练方法,层序Softmax(hierarchical softmax)使用二叉树,其中树的每个叶节点表示词表 V V V中的一个词。
用于近似训练的分层softmax,其中树的每个叶节点表示词表中的一个词用于近似训练的分层softmax,其中树的每个叶节点表示词表中的一个词

L ( w ) L(w) L(w)表示二叉树中表示字 w w w的从根节点到叶节点的路径上的节点数(包括两端)。设 n ( w , j ) n(w,j) n(w,j)为该路径上的 j t h j^{th} jth节点,其上下文字向量为 u n ( w , j ) u_{n(w,j)} un(w,j)。例如, 上图中的 L ( w 3 ) = 4 L(w_3)=4 L(w3)=4。分层softmax将上一节条件概率近似为:
在这里插入图片描述
为了说明,让我们计算图中给定词 w c w_c wc生成词 w 3 w_3 w3的条件概率。这需要 w 3 w_3 w3的词向量 v c v_c vc和从根到 w 3 w_3 w3的路径( 图中加粗的路径)上的非叶节点向量之间的点积,该路径依次向左、向右和向左遍历:
在这里插入图片描述
σ ( x ) + σ ( − x ) = 1 \sigma(x)+\sigma(-x)=1 σ(x)+σ(x)=1,它认为基于任意词 w c w_c wc生成词表 V V V中所有词的条件概率总和为1:
∑ w ∈ V P ( w ∣ w c ) = 1 \sum_{w\in V}P(w|w_c)=1 wVP(wwc)=1
幸运的是,由于二叉树结构, L ( w o ) − 1 L(w_o)-1 L(wo)1大约与 O ( l o g 2 ∣ V ∣ ) O(log_2|V|) O(log2V)是一个数量级。当词表大小 V V V很大时,与没有近似训练的相比,使用分层softmax的每个训练步的计算代价显著降低。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/937376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14张图带你了解Android14中的酷炫的功能

14张图带你了解Android14中的酷炫的功能 在近期的几次更新中,Android系统经历了重要的升级。Android 12通过Material UI改变了外观,使界面更加优化。随后,Android 13在Android 12的基础上进一步提升了用户体验,使系统更加流畅。现…

自己的第一个小程序《我们一起记账吧》

一,想法 为了控制自己不要乱花钱,曾经一段时间每天记账,当时用的是市面上比较受欢迎的一些记账工具,但大多数都是以个人角度来记账的,几乎没有以家庭为单位的多人协同记账类软件,虽然也有多人记账小程序&a…

7.11 SpringBoot实战 全局异常处理 - 深入细节详解

文章目录 前言一、异常分类1.1 业务异常1.2 参数校验异常1.3 通用异常兜底 二、保留异常现场2.1 请求地址2.2 请求header2.3 请求参数body2.4 构建异常上下文消息 最后 前言 全局异常处理, 你真的学会了吗? 学完上文,你有思考和动手实践吗?…

stm32之25.FLASH闪存

打开标准库 源码--- int main(void) {uint32_t d;Led_init();key_init();/* 初始化串口1波特率为115200bps,若发送/接收数据有乱码,请检查PLL */usart1_init(115200);printf("this is flash test\r\n");/* 解锁FLASH(闪存&#xf…

腾讯云服务器搭建网站详细教程_2023更新

使用腾讯云服务器搭建网站全流程,包括轻量应用服务器和云服务器CVM建站教程,轻量可以使用应用镜像一键建站,云服务器CVM可以通过安装宝塔面板的方式来搭建网站,腾讯云服务器网分享使用腾讯云服务器建站教程,新手站长搭…

系统架构设计高级技能 · Web架构

现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 Web架构 一、Web架构介绍1.1 Web架构涉及技术1.2 单台服务…

几个nlp的小任务(生成任务(摘要生成))

几个nlp的小任务生成任务——摘要生成 安装库选择模型加载数据集展示数据集数据预处理 tokenizer注意特殊的 token处理组成预处理函数调用map,对数据集进行预处理微调模型,设置参数设置数据收集器,将处理好的数据喂给模型封装测评方法将参数传给 trainer,开始训练安装库 选…

交叉熵的简单理解:真实分布与非真实分布的交叉,完全对应,熵为0

目录 交叉熵的简单理解:真实分布与非真实分布的交叉,完全对应,熵为0 交叉熵的简单理解:真实分布与非真实分布的交叉,完全对应,熵为0 这个式子就是熵的表达式. 简单来说, 其意义就是在最优化策略下, 猜到颜…

哪些自主品牌「霸榜」30万元向上战场?硬派越野/MPV再助力

占乘用车市场不到20%份额的30万元以上价位,一直以来都是合资品牌的天下。现在,三家中国本土自主品牌已经率先突围。 高工智能汽车研究院监测数据显示,2023年1-7月,理想、比亚迪、蔚来进入30万元以上价位新车交付量TOP10&#xff…

c++系列之指针

今天不是做题系列,是知识系列啦。 说到指针,我们初学这一定会气的牙痒痒把,笔者也是,这么我好久而不得呀,今天来让我们聊聊指针。 其一 首先,我们明确的知道,假如我们开一个变量,…

Android studio 软件git使用

在 test 分支添加的方法 , 现在切换到 master分支 总共 2 个分支 , 当前的分支是 test 出现了 先试一下 force checkout , 尝试之后发现 , 你更改没有带过来 , 以为哪个类在master分支没有 , 所以这边也没有 , 切回分支 test 发现之前的跟改没有 , 这样即可以找回 继续切换…

SE5 - BM1684 人工智能边缘开发板入门指南 -- 模型转换、交叉编译、yolov5、目标追踪

介绍 我们属于SoC模式,即我们在x86主机上基于tpu-nntc和libsophon完成模型的编译量化与程序的交叉编译,部署时将编译好的程序拷贝至SoC平台(1684开发板/SE微服务器/SM模组)中执行。 注:以下都是在Ubuntu20.04系统上操…

element-plus指定el-date-picker的弹出框位置

此处记录一下,通过popper-options指定popper出现的位置

Presto之Driver个数

一. 前言 在Presto的Stage Performace中,每个Operator中都会有Driver个数的显示,如下图所示。本文主要介绍Presto中是如何决定Driver的个数的。 二. Driver个数 在Presto中,一个pipeline中启动多少个Driver,是由此Pipeline处理的S…

tidb数据库5.4.3和6.5.3版本性能测试对比

作者: qizhining 原文来源: https://tidb.net/blog/5454621f 一、测试需求: 基于历史原因,我们的业务数据库一直使用5.4.3,最近由于研发提出需求:需要升级到6.5.3版本,基于版本不同&#x…

sql:SQL优化知识点记录(四)

(1)explain之ref介绍 type下的ref是非唯一性索引扫描具体的一个值 ref属性 例如:ti表先加载,const是常量 t1.other_column是个t1表常量 test.t1.ID:test库t1表的ID字段 t1表引用了shared库的t2表的col1字段&#x…

基于黑寡妇算法优化的BP神经网络(预测应用) - 附代码

基于黑寡妇算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于黑寡妇算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.黑寡妇优化BP神经网络2.1 BP神经网络参数设置2.2 黑寡妇算法应用 4.测试结果:5.Matlab代…

JUC常用并发工具类

JUC常用并发工具类 1、什么是JUC? JUC 就是 java.util.concurrent 包,这个包俗称 JUC,里面都是解决并发问题的一些东西,该包的位置位于 java 下 面的 rt.jar 包下面。 2、4大常用并发工具类 2.1 CountDownLatch CountDownLatch&#x…

设计模式之九:迭代器与组合模式

有许多方法可以把对象堆起来成为一个集合(Collection),比如放入数组、堆栈或散列表中。若用户直接从这些数据结构中取出对象,则需要知道具体是存在什么数据结构中(如栈就用peek,数组[])。迭代器…