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

近似训练

近似训练(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.mzph.cn/news/55638.shtml

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

相关文章

day14 二叉树01 二叉树的遍历

目录 二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历 二叉树的前序遍历 二叉树遍历可以使用迭代和递归实现&#xff0c;代码如下&#xff1a; 递归法&#xff1a; vector<int> ret; void _preorderTraversal(TreeNode* root) {if (root nullptr) return;ret.pus…

机器学习理论笔记(二):数据集划分以及模型选择

文章目录 1 前言2 经验误差与过拟合3 训练集与测试集的划分方法3.1 留出法&#xff08;Hold-out&#xff09;3.2 交叉验证法&#xff08;Cross Validation&#xff09;3.3 自助法&#xff08;Bootstrap&#xff09; 4 调参与最终模型5 结语 1 前言 欢迎来到蓝色是天的机器学习…

【springboot】Spring Cache缓存:

文章目录 一、导入Maven依赖&#xff1a;二、实现思路&#xff1a;三、代码开发&#xff1a; 一、导入Maven依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId><…

《C和指针》笔记8: 枚举类型

枚举 (enumerated)类型就是指它的值为符号常量而不是字面值的类型&#xff0c;它们以下面这种形式声明&#xff1a; enum Jar_Type { CUP, PINT, QUART, HALF_GALLON, GALLON };这条语句声明了一个类型&#xff0c;称为Jar_Type。这种类型的变量按下列方式声明&#xff1a; e…

go语言调用python脚本

文章目录 代码gopython 在 go语言中调用 python 程序&#xff0c;你可能会用到 代码 亲测 go 测试 go 文件 func TestR(t *testing.T) {// 设置要执行的Python脚本和参数scriptPath : "../nansen.py"arg1 : "nansen"// 执行Python脚本cmd : exec.Comm…

lnmp架构-mysql

1.MySQL数据库编译 make完之后是这样的 mysql 初始化 所有这种默认不在系统环境中的路径里 就这样加 这样就可以直接调用 不用输入路径调用 2.初始化 重置密码 3.mysql主从复制 配置master 配置slave 当master 端中还没有插入数据时 在server2 上配slave 此时master 还没进…

算法备案与合规性:企业需要知道什么

随着科技的快速发展&#xff0c;算法已成为许多行业的核心驱动力。然而&#xff0c;随着其影响力日益扩大&#xff0c;算法备案与合规性的问题也越来越受到关注。企业需要了解什么&#xff0c;以便在法律框架内安全、有效地运用算法&#xff1f;这篇软文将为您解答。算法备案找…

2.文章复现《热电联产系统在区域综合能源系统中的定容选址研究》(附matlab程序)

0.代码链接 1.简述 光热发电是大规模利用太阳能的新兴方式&#xff0c;其储热系 统能够调节光热电站的出力特性&#xff0c;进而缓解光热电站并网带来的火电机组调峰问题。合理配置光热电站储热容量&#xff0c;能够 有效降低火电机组调峰成本。该文提出一种光热电站储热容 量配…

详细解析Python爬虫代理的使用方法

嗨&#xff0c;大家好&#xff01;作为一名专业的代理IP供应商&#xff0c;我想和你们聊一聊爬虫中常用的代理IP类型以及如何在Python中使用代理IP。相信这篇文章会让你对Python爬虫代理IP的使用有更深入的了解。那么&#xff0c;不多说&#xff0c;让我们开始吧&#xff01; …

lua学习-3 循环和流程控制

这里写目录标题 判断for 循环数值遍历泛型遍历遍历数组遍历对象ipairs 和 pairs的异同 while 循环repeat循环goto基础用法注意事项 判断 for 循环 数值遍历 for exp1,exp2,exp3 do//todoend上述代码是指&#xff1a;从exp1 到exp2 以exp3为步长进行循环并执行todo代码&#…

HLS实现CORDIC算法计算正余弦并上板验证

硬件&#xff1a;ZYNQ7010 软件&#xff1a;MATLAB 2019b、Vivado 2017.4、HLS 2017.4、System Generator 2017.4 1、CORDIC算法计算正余弦 CORDIC算法详细分析网上有很多资料&#xff0c;它的原理是用一系列旋转去逼近目标角度&#xff0c;这一系列旋转的角度为 θ a r c t…

Unity中实现获取InputField选中的文字

一&#xff1a;前言 获取到选中的文字&#xff1a;哈哈 二&#xff1a;实现 UGUI的InputField提供了selectionAnchorPosition和selectionFocusPosition&#xff0c;开始选择时的光标下标和当前光标下标 using UnityEngine; using UnityEngine.EventSystems; using UnityEngin…

蓝蓝设计ui设计公司作品案例-中节能现金流抗压测试软件交互及界面设计

中国节能是以节能环保为主业的中央企业。中国节能以生态文明建设为己任&#xff0c;长期致力于让天更蓝、山更绿、水更清&#xff0c;让生活更美好。经过多年发展&#xff0c;中国节能已构建起以节能、环保、清洁能源、健康和节能环保综合服务为主业的41产业格局&#xff0c;成…

要获取 PHP 中当前时间的前一天、本周、本月、本季度和本年,可以使用 PHP 的内置日期和时间函数。

要获取 PHP 中当前时间的前一天、本周、本月、本季度和本年&#xff0c;可以使用 PHP 的内置日期和时间函数。下面是一些示例代码来帮助你实现这些功能&#xff1a; php // 获取当前时间的前一天 $yesterday date(Y-m-d, strtotime(-1 day));// 获取本周的开始日期和结束日期…

机器视觉-外观缺陷检测已成笑话

外观检测盛行几年,只要做机器视觉工程师,每个人都好奇都想做做。不做不知道,一做吓一跳。我将从各大家一线公司掌握的信息来具体分析外观缺陷检测埋了多少坑: 明显的现象,公司摆了很多设备,都在公司,都没有出售。我从业15年,从来没有经历过有这么多设备待在公司。从来…

基于Java的旅游信息推荐系统设计与实现,springboot+vue,MySQL数据库,前后端分离,完美运行,有三万字论文。

基于Java的旅游信息推荐系统设计与实现&#xff0c;springbootvue&#xff0c;MySQL数据库&#xff0c;前后端分离&#xff0c;完美运行&#xff0c;有三万字论文。 前台主要功能&#xff1a;登录注册、旅游新闻、景区信息、美食信息、旅游线路、现在留言、收藏、预定旅游线路…

docker搭建rocketmq环境

准备局域网 nameserver和broker在同一网段才能够互相访问&#xff0c;我们先创建一个局域网。 创建rocketmq-network&#xff0c;让nameserver、broker在同一个网段&#xff1a; docker network create --driverbridge \ --subnet192.168.2.10/24 rocketmq-network安装names…

深度学习5:长短期记忆网络 – Long short-term memory | LSTM

目录 什么是 LSTM&#xff1f; LSTM的核心思路 什么是 LSTM&#xff1f; 长短期记忆网络——通常被称为 LSTM&#xff0c;是一种特殊的RNN&#xff0c;能够学习长期依赖性。由 Hochreiter 和 Schmidhuber&#xff08;1997&#xff09;提出的&#xff0c;并且在接下来的工作中…

Python自动化小技巧21——实现PDF转word功能(程序制作)

案例背景 为什么这个年代PDF转word&#xff0c;某wps居然还要收费.....很多软件都可以实现这个功能&#xff0c;但是效果都有好有坏&#xff0c;而且有的还付费&#xff0c;很麻烦。 那就用python实现这个功能吧&#xff0c;然后把代码打包为.exe的程序&#xff0c;这样随便在…

Docker容器:docker consul的注册与发现及consul-template守护进程

文章目录 一.docker consul的注册与发现介绍1.什么是服务注册与发现2.什么是consul3.consul提供的一些关键特性4.数据流向 二.consul部署1.consul服务器&#xff08;192.168.198.12&#xff09;&#xff08;1&#xff09;建立 Consul 服务&#xff08;2&#xff09;查看集群信息…