Transformer and Pretrain Language Models3-1

news2024/12/27 14:23:01

content

  • transformer

attention mechanism

transformer structure​​​​​​​

  • pretrained language models

language modeling

pre-trained langue models(PLMs)

fine-tuning approaches

PLMs after BERT

applications of masked LM

frontiers of PLMs

  • transformers tutorial(学术界和工业界运用广泛的开源包)

introduction

frequentli-used APIs

quick start

demo


attention mechanism注意力机制

以下是一个运用RNN模型来解决机器翻译问题的一个具体例子,这个模型中存在一个非常重要的问题,即信息瓶颈的问题

Q: 什么是信息瓶颈问题

我们可以看到,需要从decoder端最后表示的向量来输出一个完整的正确的句子,那么这样就要求encoder端得到的最后一个向量表示,需要包含他输入句子的所有信息。

但是就这样一个向量,真的能够足够表达所有句子中包含的多种多样的信息吗,这个答案显然是否定的,研究人员也确实发现,这样一个向量的容量,会显著地限制模型encoder端的一个表示。

其实,在encoder端每一个位置的隐向量,都包含有丰富的信息,而最后这个向量其实就是整个encoder和decoder模型之间的一个信息瓶颈

之后要学习的注意力机制,就是为了解决这样一个问题而提出的

注意力机制的核心思想,就是通过在decoder的每一步,都把encoder端所有的向量提供给decoder模型,这样decoder根据自己当前的状态,来自动选择需要使用的信息和向量,来实现信息瓶颈的这样一个环节

以下是一个具体的例子:

在这个图中,我们用蓝色表示encoder,用绿色表示decoder

encoder端得到的每一个隐向量,分别用h1到h7来表示;在decoder端它得到的第一个向量用s1来表示

与之前RNN模型不同的是,我们不用这个s1来直接计算这一步生成的单词的概率,而是利用s1来选择关注输入句子中的哪些部分,并计算得到一个新的隐向量,来得到生成单词的概率。

那么这样的一个decoder端如何根据s1来对encoder端的向量进行选择呢,我们首先需要计算一个叫做注意力分数的东西,这里我们将s1与h1进行点积,就可以得到一个标量,我们称它为e11

按此方法依次重复,我们就可以得到一个长度为7的向量,其中每个元素都是s1和对应位置的隐向量点积得到,我们将这样一个长度为7的向量称为encoder端隐向量的一个注意力分数,这个分数就表示了s1与每一个encoder端隐向量hi的一个相似程度,值越高,就表示s1与对应的隐向量相似程度越高

有了这个长度为7的注意力分数,我们需要把它变为一个概率分布,这里就需要用到softmax函数,这个函数会把e1中的每一个值变为从0到1之间的值,并且求和为1,这其实就可以看作是一个概率分布,而且之前e1中值越高的位置,对应在这个概率分布中,它也就会越大,并且越接近于1,表明decoder端将会更加关注这些位置的向量,我们可以看到在当前这个例子中,前两个位置的这个概率分布的值是比较高的,也说明这一步的生成会更加关注前两个位置的隐向量

随后,在第三步,我们利用前面得到的这样一个注意力分布,对encoder端的隐向量,进行一个加权的求和,然后就可以得到一个与隐向量维度相同的输出向量o1,这个向量也包含了decoder端当前所需要的encoder端的所有信息

这样,我们最后将o1与RNN得到的隐向量s1进行一个拼接,我们就可以得到一个新的表示,来表示decoder端这一步的一个状态,用这样一个向量来预测下一步需要生成的单词。

在这个例子中,我们得到many这个词,可以看到many其实它也就对应这个输入中的多个这样一个含义,这个也可以从我们这个注意力分布的高低,可以看到它的这样一个对应关系

随后,和正常的RNN流程一样,我们将many输入到decoder端,就可以得到它的下一个表示s2,并且重复刚才的过程,我们就可以得到这一步需要输出的一个单词,而这里我们可以看到,模型输出了airports这个单词,而且他的注意力分布也是更加关注输入中的机场这个词,也是一个相互对应的关系

这样的步骤不断重复,我们对于decoder端的每一步,就可以自主的关注到decoder不同位置的隐向量,然后预测出一个新的单词,最后就可以得到一整个输出句子,完成整个模型的一个输出

这个就是在之前RNN模型中加入了attention机制的一个效果

下面我们对这样的一个注意力机制,进行一个形式化的总结:

以encoder端得到n个隐向量h1~hn

decoder端的每一步,都可以得到一个向量st,这是通过RNN得到的表示当前状态的一个隐向量

我们将st与前面的每个hi进行点积,就可以得到一个注意力分数,它的长度其实和encoder端的向量的数量是一样的

然后通过一个softmax函数,就可以将之前的一个标量变为一个0到1之间的一个概率分布

有了这样的一个概率分布之后,我们就可以对encoder端的向量进行一个加权平均,进而可以得到一个输出向量ot

最后通过将ot和st进行一个拼接,我们就可以得到最终用来预测生成单词的向量

这就是前面在端到端这样的模型中加入attention机制后的一个形式化表示,而attention的过程就是这个不断动态选择hi的一个过程

我们可以对前面那个attention的一个计算过程进行一个更加抽象的定义,这里我们给定一个query向量和一系列value向量,也就是对应我们之前提到的decoder端的向量和encoder端的向量,而注意力机制本质上就是通过一个query向量,对一个valye向量的集合进行加权平均,它是一个动态选择的过程,同时value向量的数量是可以任意的一个数值,最终我们都可以通过一个attention机制得到一个综合了所有value向量信息的表示,而且它具有一个固定的维度和这个value向量的维度是一致的

我们进行一个数学归纳:同样我们这里用h1~hn表示n个value向量以及一个query向量s,attention的机制首先它通过s和每个hi的一个交互,我们可以得到一个注意力分数,也就是这里的e,,这样的一个注意力分数,它的维度其实和value向量的数量是一样的,是属于rn的,然后就这样一个分数计算softmax,得到一个概率分布,通过此概率分布对前面所有的这个value向量进行一个加权平均,也就得到了这个attention的一个输出

关于如何计算注意力分数e,其实有很多种变体,前面的点积是一种非常常用的方式,在3-2中将介绍几种其他的一些变体

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

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

相关文章

【Godot4自学手册】第四节动画状态机-AnimationTree

各位同学大家好!今天继续学习Godot4,本节将要学习AnimationTree,来实现控制主人公的动画。 一、AnimationPlay节点介绍 Godot引擎通过AnimationPlay节点实现了最灵活的动画系统,它几乎可以给godot中的任意节点的任意属性添加动画…

携程基于Jira Cloud的敏捷项目管理实践

好的工具可以满足团队在各个成长阶段的管理诉求 实践一:对齐目标/团队OKR/多团队协作战略项目 实践二:以产品为中心的协作框架 实践三:交付团队管理 实践四:和海外子公司对齐,协作

数灵通丨可以实现抖音引流微信小程序了

抖音作为一款火爆的短视频社交平台,吸引了数亿用户的关注和喜爱。除了观看和制作视频外,抖音还提供了跳转到小程序的功能,让用户可以享受更多功能和乐趣。那么,如何在抖音中跳转到小程序呢?以下是详细解答:…

Android 基础技术——View 的宽高

笔者希望做一个系列,整理 Android 基础技术,本章是关于 View 的宽高 Activity Resume 的时候设置或者获取view的宽高是否有效? 回答:不确定。 首次 onResume 无效,二次 onResume 就有效了。 回顾「Android 基础技术——addView 流…

[Python] glob内置模块介绍和使用场景(案例)

Unix glob是一种用于匹配文件路径的模式,它可以帮助我们快速地找到符合特定规则的文件。在本文中,我们将介绍glob的基本概念、使用方法以及一些实际应用案例。 glob介绍 Glob(Global Match)是Unix和类Unix系统中的一种文件名扩展功能,它可以…

eNSP学习——理解交换机Hybird接口的应用

目录 原理概述 实验内容 实验目的 实验步骤 实验拓扑 实验编址 实验步骤 基本配置(此处仅以PC1为例) 实现组内通信、组间间隔 实现网络管理员对所有网络的访问 原理概述 Hybrid接口既可以连接普通终端的接入链路又可以连接交换机间的干道…

嵌入式面试提问

嵌入式面试问题 1.讲一下STM32的时钟系统 现总结下:首先是时钟源输入时钟信号到单片机,然后单片机对输入的时钟信号进行倍频和分频处理,再将处理后的时钟信号输出至系统,外设或外部接口。   先看这张图,最外面的线上…

[docker] Docker资源管理

一、docker资源控制 Docker通过Cgroup 来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。Caroup 是ControlGroups的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如…

[linux] 域名解析失败案例定位 [Errno -2] Name or service not known

首先发现代码里这段运行报错: socket.gethostbyname_ex(host_name) Traceback (most recent call last): File “”, line 1, in socket.gaierror: [Errno -2] Name or service not known import socket host_name socket.gethostname() print(socket.gethostby…

CSS3基础知识总结

目录 一、CSS3 边框 1.border-radius:圆角边框 2.box-shadow:添加阴影 3.border-image:图片边框 二、CSS3 渐变 1.线性渐变(Linear Gradients) a.由上到下(默认) b.从左到右 c.对角 d.使用角度 2.径向渐变(…

js计算皮尔逊相关系数

代码如下; let XGX {correlationCoefficient(pA, pB) {let covXY -pA * pBlet varX pA * (1-pA) let varY (1-pB)* pBlet res covXY / (Math.sqrt(varX*varY, 2))return res},correlation(x,y){x[0.3,50.2,99.5,199.3,299,398];y[0.1,50,99.9,200,300,400];// 计算均值con…

深入理解HarmonyOS UIAbility:生命周期、WindowStage与启动模式探析

UIAbility组件概述 UIAbility组件是HarmonyOS中一种包含UI界面的应用组件,主要用于与用户进行交互。每个UIAbility组件实例对应最近任务列表中的一个任务,可以包含多个页面来实现不同功能模块。 声明配置 为了使用UIAbility,首先需要在mod…

Nginx 配置解析:从基础到高级应用指南

Nginx 配置解析:从基础到高级应用指南 Nginx 配置解析:从基础到高级应用指南1. 安装和基本配置安装 Nginx基本配置 2. 虚拟主机配置3. 反向代理配置4. 负载均衡配置5. SSL 配置6. 高级配置选项结语 Nginx 配置解析:从基础到高级应用指南 Ngi…

Scapy编程指南(基础概念)

Scapy编程指南(基础概念) Scapy是什么 Scapy是Python中一个非常强大的库,它专门用于处理、发送和捕获网络协议中的数据包,它允许开发人员通过Python代码构建、解析和发送自定义网络协议的数据包。Scapy提供了一种直观、灵活的方…

Java代码审计原生反序列化CC链跟踪分析

希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢! 个人博客链接:CH4SER的个人BLOG – Welcome To Ch4sers Blog 在前一篇文章我分析了Commons Collections1链​​​​​​​,其中跟链的顺序是&#xff1a…

【jetson笔记】vscode远程调试

vscode安装插件 vscode安装远程插件Remote-SSH 安装完毕点击左侧远程资源管理器 打开SSH配置文件 添加如下内容,Hostname为jetson IP,User为登录用户名需替换为自己的 Host aliasHostName 192.168.219.57User jetson配置好点击连接,控制台输…

阿里云推出第八代企业级实例 g8i:AI 推理性能最高提升 7 倍、可支持 72B 大语言模型

云布道师 1 月 11 日,全球领先的云计算厂商阿里云宣布推出第八代企业级通用计算实例 ECS g8i,这也是国内首款搭载第五代英特尔至强可扩展处理器(代号 EMR)的云计算产品。依托阿里云自研的「飞天CIPU」架构体系,ECS g8…

【每日一题】3.LeetCode——相交链表

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…

Linux-共享内存

文章目录 前言一、system V共享内存申请共享内存挂载共享内存删除共享内存挂载删除共享内存 二、示例代码三.运行效果 前言 在这之前我们已经学习了两种进程间通信方式:匿名管道和命名管道。 从我们之前的学习已经知道,想让多个进程间进行通信就需要让他…

重构改善既有代码的设计-学习(四):简化条件逻辑

1、分解条件表达式(Decompose Conditional) 可以将大块代码分解为多个独立的函数,根据每个小块代码的用途,为分解而得的新函数命名。对于条件逻辑,将每个分支条件分解成新函数还可以带来更多好处:可以突出条…