NLP原理系列1-说清楚transformer原理

news2024/11/18 21:33:53

NLP原理系列1-说清楚transformer原理

来用思维导图和截图描述。

思维导图的本质是 变化(解决问题)-> 更好的, 或者复杂问题拆分为小问题 以及拆分的思路。

经典全图

0 transformer的前世今生

1 seq2seq

序列化数据 到 序列化数据, 只要能把 训练数据和label转为序列,就都可以用这个模型来训练

2 attention和self-attention

当输入为一个不定长的向量,就得使用attention机制。

可以是语句txt,每个词是一个向量, 每个句子就是一个vec set

那么怎么把一个词转为向量呢?

3 输入和输出到底可以都是什么?

输入: 1 文本 2 语音 3 graph

输出: 对应的vec label,不对应的vec label数量。

一 tansformer的推理及训练过程

1 tf 训练过程

红框部分是 训练得grandtruth,正确答案。

decoder的上面输出部分是 推理结果。 采用了一些teach model

2 tf 推理过程

假如我们的场景是问答,问题是“中国的首都是哪里?”
推理阶段最开始,左侧Input就是这个问题,右下Outputs就是起始符,Inputs和Outputs共同进行前向传播,它们会在中间蓝笔红笔那部分完成汇合,然后到右上侧推理出“北”(如果模型效果尚可,确实能正确推理出“北京”的话),“北”作为本步推理结果,就会被送入Outputs拼在起始符后方,然后Inputs和带有“北”的Outputs又共同前向传播,又再汇合推理出“京”…大抵是这么一个往复的过程

推理优化过程

紫色部分只执行一次,如果计算出来的红圈部分保存的话。 红圈部分是 key 和value, 篮圈是query。

如描述的推理过程, 推理到 “北”字后,只有那个"北"的 logist 回来到红框 位置生成新的query,与原来的key和value汇合。

绿色部分是一个 decoder block块

我们构造一个较复杂多层模型

保存任何一组key和val即可。

二 更多细节transformer 数据如何运行

2.1 encoder前半部分

2.2 encoder后半部分

2.3 attention_mask如何起作用

1)在训练中的作用

2)在推理中的作用

3)在encoder还是在decoder中起作用?

2.4 推理过程

AT机制,先(程序输入decoder一个 BOS,), dec的输出返回来作为输入,逐个推理,最后推理到end。

attention_mask 遮挡未推理位置

推理过程中也是输出的一个字,作为下一个的输入。 -> 那么计算attention_mask不就是没有意义了吗??????????

如何解决 exposure bias-> scheduled sampling 一步错步步错的问题

2.5 训练过程

1 确定crossentypy为损失函数

2 关于decoder的输入

使用正确数据 grandtruth ,使用teacher_forcing方法. 是否开attention_mask???????

3 对于optimization的口诀

比如metric 使用BELU,但是不太容易合入更新梯度中,就使用RL。

4 如何更新encoder参数???????

沿着蓝色线路反向更新

5 一些技巧

1)copy机制

2)guide

3)对结果 beam search

三 详解self-attention

背景:

序列模型 -> 文字声音graph可以处理为vec序列 -》对于多vec输入情况不能输出

比如:词性标注,舆情分析。

1 词性标注

sequence:I saw a saw.

第一个saw为看见为 V动词, 第二个saw为锯子为N名词。

传统做法对于同一个词的不同词性标注,存在问题。

2 解决办法

2.1 使用窗口某一个词的前后各5个词,即可关联它的词性。

但是训练时每个语料序列的长度不等,只能选最长的序列,然后填充其余短的, 这样的训练不容易训练。

2.2 引出self-attention层

类似cnn层,有单层结构,同样可以组合若干层。

结构为

具体结构:

其中q1与k1,qn与qn相乘后,有些公式会除以根号d(维度),相当于正则。

α1,1 撇,是qn与qn相乘结果的softmax值。

最后训练的结果b1 会最接近a1 与an的相关度与价值。

而且可以并行计算出b1,bn

数学公式为:

3 代码

4 矩阵的计算过程

5 多头注意力机制

即每个向量,对应多个qkv

抽取多个不同维度的相关性。

6 小结

self-attention中学到什么?

Wq,Wk,Wv,

学的好,即当前layer层能生成的sequnce表征更多词关系,及含义的,及语义理解上的特征。

7 position embed

位置编码,为了让注意力抽取特征的同时,也关注每个词的位置信息。

这里值得研究, 有很多种位置编码。

8 attention对比CNN与RNN

对比CNN, 更全面感知野的CNN

对比RNN, 1 不会信息消失, 每个词的相关性都会在attention中计算 2 可以并行计算效率更高

9 加速transformers 更多变种

因为attention机制可以加速,所以出现了很多transformer的变种。

值得去研究

四 GPT 仅用decoder

1 past-key_val=true 保存过程

截图为decoder的单层结构图,也是GPT的简化图。 12x即重复12层block。

GPT全部是decoder block 也是会计算key val所以也可以保存起来, 那么每一层得 key-val都是新的,所以实际是保存了12组 key-val。 (从代码中读到, 可以再次确认):已确认实际 是保存了12组

动画:encoder+decoder

实际这三个为一层encoder。 qkv如图,三行在同一层里。

2 为什么 decoder可以自己计算key和val呢?

FAQ:

1 BOS在推理和训练时

都是谁给的输入, 是自动的吗?

2 在GPT2中没有encoder部分,那么怎么计算的key和val呢,

训练GPT2的时候, 怎么把输入数据传给 decoder呢

经过embedding 得到词向量-> decoder, 那么teacherforcing的 grandtruth 还传入吗?

3 attention_mask

训练时候也是遮挡未推理部分吗?

-是的

程序中怎么设定attention_mask逐个遮掩?

训练时前向推理,每次输入就是一个token了吧 为什么还需要attention_mask呢?

截图是推理任务时的运转图

4 NAT

no autoregression train

对比autoregression

1)可以并行推理 2)长度可控

5 训练时候decoder的输入是带有推理历史还是只有当前的一个token?

推理出来 学 的时候,需要接收的输入是 红圈的所有内容还是只是 绿圈的内容?

6 推理任务时候decoder的输入 是带有推理历史还是只有当前的一个token?

7 什么时候只要输入绿色圈的一个token内容?

即 past_key_val?, 那么输入一个token时候,还需要attention_mask吗?

8 对于定长的输入,比如定长50,我得query只有5个token,比如 你多大了?,程序会填充45个padding。

相比于我的query是 50个token全占满, 请问老师哪个forward计算性能更快。,还是差不多。

我的理解是 填充45个padding,的向量,走到attention_mask的时候, 被变为0000-45个0,5个1,最后计算就是那5个数值,是否forward计算会更快。

老师也不确定, 但是可以确定,添加pad的,参与0计算,应该会快一点。

这可以走读代码了解到。

9 输入不定长的原理是什么?

为什么不限定长度 query,都能被embed层接收?

从代码可以看到

比如ChatGLM,你可以看下这里:https://github.com/THUDM/ChatGLM-6B/blob/c26a7de24de1cad5512a50611f39a9cea7eb436f/ptuning/main.py#L176

未能解决问题。 尝试自己读源码实现。

C:\\Users\\xialiu05\\AppData\\Local\\Programs\\Python\\Python310\\Lib\\site-packages\\transformers\\generation\\utils.py

        此时的输入还是  tensor(\[\[    1,  2214,  2172,  4381, 12253,  1518,     2,     2\]\])


    def sample(
{'input\_ids': tensor(\[\[    1,  2214,  2172,  4381, 12253,  1518,     2,     2\]\]), 'past\_key\_values': None, 'use\_cache': True, 'attention\_mask': tensor(\[\[1, 1, 1, 1, 1, 1, 1, 1\]\])}
            outputs = self(


C:\\Users\\xialiu05\\AppData\\Local\\Programs\\Python\\Python310\\Lib\\site-packages\\transformers\\models\\bloom\\modeling\_bloom.py
        transformer\_outputs = self.transformer(
	state: tensor(\[\[    1,  2214,  2172,  4381, 12253,  1518,     2,     2\]\])



C:\\Users\\xialiu05\\AppData\\Local\\Programs\\Python\\Python310\\Lib\\site-packages\\transformers\\models\\bloom\\modeling\_bloom.py
	class BloomModel(BloomPreTrainedModel):
	forward                                                                             -input\_ids (18)
	inputs\_embeds
		self.word\_embeddings = nn.Embedding(config.vocab\_size, self.embed\_dim)      - vob num, dim =461452048)
	hidden\_states = self.word\_embeddings\_layernorm(inputs\_embeds)     (inputs\_embeds)  =  (182048)

原理为C:\Users\xialiu05\AppData\Local\Programs\Python\Python310\Lib\site-packages\torch\nn\modules\sparse.py

class Embedding:

介绍描述

1 no padinx

inputs =1,8 其中数值均为索引

embed = (46145, 2048)第一个数值为词表大小, 2048为 词向量的维度。

1)先对应词表查到 索引的向量

2)变为1 8 2048, 即每个向量都是2048维

3)后面网络结构输入为2048维, 这样就可以矩阵计算。

padding 为50维 在这一步基本计算性能差异不大,因为都是索引。

在后面的矩阵计算 是否因为attention 原因会有差异, 有待验证。

2 padinx

最后的最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

五、面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

在多项目管理中,企业如何平衡项目资源分配?

数字化时代,多项目管理已经成为了企业内部的常态。组织可以在不同项目之间进行资源合理分配和调度,避免资源浪费和重复使用、提高资源利用率,从而提升项目执行效率和组织整体竞争力。 然而在多项目管理中,资源管理却面临着多重难点…

CrowdSec 防护软件安装与使用

1、环境介绍 操作系统版本:centos 7.9 2、存储库安装 curl -s https://install.crowdsec.net | sudo sh3、安装安全引擎CrowdSec yum install crowdsec启动 systemctl start crowdsec systemctl enable crowdsec4、安装修正组件 yum install crowdsec-firewall…

认证申报 | 中华环保联合会 “全国环境友好企业”认证服务

中华环保联合会水环境治理专业委员会秘书处 联系人:王小雅 电话 :010-51651268 13718793867 网址:www.acef-water.com.cn 01什么是“全国环境友好企业”认证 “全国环境友好企业”认证是经国家认证认可监督管理委员会审查监督并在全国认…

基于kdtree的三种搜索近邻点(python版本)

1、前言 点云中近邻点搜索查询是一种非常常见的数据处理操作步骤,近邻点搜索方式包括k近邻搜索、近距离搜索(球体近邻搜索)、圆柱体搜索三种方式,每一种搜索方式适用的场景各不相同。其中kdtree搜索是一种有效搜索近邻点方式&…

细说ARM MCU的串口接收数据的实现过程

目录 一、硬件及工程 1、硬件 2、软件目的 3、创建.ioc工程 二、 代码修改 1、串口初始化函数MX_USART2_UART_Init() (1)MX_USART2_UART_Init()串口参数初始化函数 (2)HAL_UART_MspInit()串口功能模块初始化函数 2、串口…

计划任务 之 一次性的计划任务

计划任务 作用:定时自动完成特定的工作 计划任务的分类: (1)一次性的计划任务 例如下周三对系统的重要文件备份一次 (2)周期性重复计划任务 例如每天晚上12:00备份一次 一次性的任务计划&#xff1a…

【java计算机毕设】图书管理系统javaweb java MySQL springboot vue html maven送文档+ppt 代码源码计算机项目

1项目功能 【java计算机专业学长毕业设计分享】 智慧图书管理系统 Java SpringBoot vue HTML MySQL 前后端分离 2项目介绍 系统功能: 智慧图书管理系统包括管理员和用户两种角色。 管理员的功能包括在个人中心修改个人信息和密码,管理员功能模块管理管理…

Spark学习——不同模式下执行脚本

举个简单的例子:使用spark官方用例"取pi值" 一、local模式 进入spark目录执行后台命令: bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[*] \ ./examples/jars/spark-examples_2.12-3.2.1.jar \ 10运行结…

芯片级激光器研发取得新进展

欢迎关注GZH《光场视觉》 自 20 世纪 60 年代以来,激光给世界带来了革命性的变化,如今已成为从尖端手术和精密制造到光纤数据传输等现代应用中不可或缺的工具。 但是,随着激光应用需求的增长,挑战也随之而来。例如,光…

本周MoonBit新增Wasm1引用计数支持、语法即将添加错误恢复机制

MoonBit更新 【Wasm MVP】Wasm1 后端添加基于 Perceus 算法的引用计数支持 【语法】throw raise try catch 均被保留为关键字 为了即将添加的错误处理机制 【Core】List与sorted_map被移动至core/immut下 List被移动至core/immut/list包中,并被移除内置类型支持 …

重邮计算机网络803-(1)概述

目录 一.计算机网络向用户提供的最重要的功能 二.互联网概述 1.网络的网络 2.计算机网络的概念 3. 互联网发展的三个阶段 4.制订互联网的正式标准要经过以下的四个阶段 5.互联网的组成(功能) 6.互联网功能 7.互联网的组成(物理&…

为什么50etf期权涨幅这么大?

今天带你了解为什么50etf期权涨幅这么大?50ETF期权涨幅大是因为跟上证50指数,另外期权的特征自带杠杆效应在虚值合约上有特别高以小博大的效果。 为什么50etf期权涨幅这么大? 标的资产价格的大幅波动:50ETF期权的内在价值与50ETF…

坦白局考PMP真的能缓解职场焦虑吗?

我就是那个花了大几千去考了一张190个国家都认可的高含金量证书,每三年还要花150美金续证,但这个证书给我的生活带来前所未有的改变。我不知道其他人考了PMP证书如今怎么样了,我只说我自己,今天就来聊聊从我了解到拿证这一过程&am…

大规模胰腺癌检测通过非对比增强CT和深度学习| 文献速递-视觉通用模型与疾病诊断

Title 题目 Large-scale pancreatic cancer detection via non-contrast CT and deep learning 大规模胰腺癌检测通过非对比增强CT和深度学习 01 文献速递介绍 胰腺导管腺癌(PDAC)是最致命的实体恶性肿瘤,通常在晚期和不可手术的阶段被检…

HyperSnap软件最新版下载-HyperSnap官方最新版附加详细安装步骤

​HyperSnap是一个老牌优秀的屏幕截图工具,全新界面,不仅能抓取标准桌面程序,还能抓取 DirectX, 3Dfx Glide的 游戏视频或 DVD 屏幕图,能以 20 多种图形格式(包括:BMP, GIF,JPEG, TIFF, PCX等)保…

MS6001/2/4低功耗,低噪声 CMOS 轨到轨输入输出运算放大器

MS6001/2/4 运算放大器具有极低功耗,轨到轨输入输出,低 的输入电压和低的电流噪声。具体表现在可工作在幅度为 1.8V 到 5V 的单电源或者双电源条件,低功耗和低噪声使得 MS6001/2/4 能够用在可移动设备上,输入输出的轨到轨…

PyTorch 维度变换-Tensor基本操作

以如下 tensor a 为例,展示常用的维度变换操作 >>> a torch.rand(4,3,28,28) >>> a.shape torch.Size([4, 3, 28, 28])view / reshape 两者功能完全相同: a.view(shape) >>> a.view(4,3,28*28) ## a.view(4,3,28,28) 可恢复squeeze…

移动端浏览器的扫描二维码实现(vue-qrcode-reader与jsQR方式)

1. 实现功能 类似扫一扫的功能,自动识别到画面中的二维码并进行识别,也可以选择从相册中上传。 2. 涉及到的一些插件介绍 vue-qrcode-reader 一组用于检测和解码二维码的Vue.js组件 jsQR 一个纯粹的javascript二维码阅读库,该库接收原始…

基于asp.net大学生健康管理系统功能介绍

项目关键技术 开发工具:Visual Studio 编程语言: .net、JavaScript 数据库: SQL Server 框架:ASP.NET框架 关键技术:ASP.NET、SQL Server 数据库工具:Navicat 1、ASP.NET框架 ASP.NET技术框架是目前在程序开发中广泛应用的一种新…

存储协议入门-UPIU简介

写在前面:本文参考UFS jedec3.1,本文思维导图如下,详细内容关注微信:存储协议探索 ​ 1. UPIU架构 UPIU是UFS协议中的一种数据包格式,用于传输应用层的各种请求和命令,UFS采用的是客户-服务端架构,UFS主机(客户)主动发起请求,UFS设备(服务)执行后并返回相应状态。…