首页 > 其他分享 >深度学习系列之1----直观解释Transformer

深度学习系列之1----直观解释Transformer

时间:2024-09-30 16:33:40浏览次数:6  
标签:单词 Transformer 模型 矩阵 ---- GPT 直观 向量

Abstract

这个系列主要用来记录我自己这种的AI小白的学习之路,通过将所学所知总结下来,记录下来。之前总喜欢记录在笔记本上,或者ipad上,或者PC端的Typora上,但总是很难回头检索到一些系统的知识,因此我觉得博客是一个不错的选择,因为时不时我就会登录网站翻看过去的痕迹,我觉得这是一种很不错的学习习惯,特此开坑,以后研究生三年时间,我将不断更新的随笔日志,既为了系统记录我的新知,也为了便于后人学习。
所以如有不当之处,欢迎评论指出,因为鄙人也是在学习。

【tip】之后的学习中我将大量使用"3W"原则来记录,就是Why?HOW?WHAT?将为什么用它、怎么用它到将它用在哪里一一说明。
这里贴出我的学习源头:
https://www.bilibili.com/video/BV13z421U7cs/?spm_id_from=333.337.search-card.all.click&vd_source=dbf0a5b21ee3e608136d2de2f7aa4035

WHY

GPT

GPT全称是一种“生成式预训练Transformer”
即:Generative Pre-trained Transformer,从名字不难看出,我们为啥要了解Transformer了

  1. Generative指的是生成文本这种
  2. Pre-traned指的是模型经历了从大量数据中学习的过程。预是预先的意思,指的是模型能够针对具体任务,通过额外的训练来进行微调
  3. Transformer就是一种特殊的神经网络,也是一种机器学习的模型

语言翻译

输入数据,预测输出,取softmax,作为预测的下一个值
image
但实际中GPT-3的输出感觉就比GPT-2要舒服太多了,这也是由于模型规模所造成的。

与GPT交谈的过程

step1

你的输入媒体被翻译为Token,也即是小片段,可以是单词、单词片段、语音片段或者图像小块
image

一个token就是一个向量

step2

Attention注意力机制。就是找出上下文中那些词会改变哪些词的含义,然后更新这些词的含义,就比如下文中的model和model是含义完全不同的两个词。
image

step3

多层感知机 Multilayer Perception
前馈神经网络层,类比于神经网络的计算

step4、5、6、7、8、9………………

image
最终得到所有token的概率分布,进而预测下一个词

以上就是我们为啥要学习Transformer的原理了

HOW?

这个地方就详细说明他的原理了。
比方说我们想得到这么一种函数,就是输入图像我们可以让它输出对图像的描述,或者就上面所述,输入文本,能够预测输出。

AI初期做法

写死model,也就是控制领域的”开环“
即:try to explicitly define a procedure for how to do that task in code
试图在代码中,明确定义如何执行一个任务
image

AI现在做法

一堆参数,给我什么类型的数据,我就改变对应的参数。像一堆仪表盘一样,调整数值。
image

机器学习最基本的模型

线性回归
比如你们老师上课常举得例子:房价预测模型
image
就是找一条曲线来尽可能的拟合所有数据。当然这种数据也是一对一的,自变量为1,因变量也为1.

将参数矩阵分为几大类

俗话说的好,数据越多越复杂(当然你很可能认为是废话)
由于参数多,所以集成化
image

几何角度的加权求和

向量点乘
image

词嵌入(Word Embedding)

我们为什么要将单词映射到向量?
image
这就不得不提到词向量模型了,这是自然语言处理领域一大重点。
词向量模型可以分为两类:基于统计的方法和基于深度学习的方法。基于统计的方法包括one-hot编码、n-gram等,而基于深度学习的方法则包括Word2Vec、GloVe和Transformer等。我们重点介绍Transformer的。

在Transformer模型中,词向量是通过嵌入层实现的。嵌入层将输入的单词转换为固定大小的向量,这些向量表示单词的语义信息。与传统的词向量方法不同,Transformer使用的是位置编码(Positional Encoding)技术来捕获单词的位置信息。

那么是如何实现的呢?

我们常用one-hot编码,也就是独热编码:
image
这种编码方式有一个缺点,那就是一个单词对应一个向量,所不同的仅仅是1的位置不同而已,这也就是独热编码的特点,也是缺点。。。。

而词嵌入的方式:
image
使用的是向量,向量在三维空间包含了方向、大小,不同向量之间还包含了夹角,代表两个词的关系程度,可以通过向量之间的点乘来实现,如下图:
image
我们两个向量的关系越近,那么我们点乘的值应该越大,关系越远,点乘之间的值应该越小(负数)。这些代表单词的向量可以像数学那样随意加减,构成了一张复杂的关系网络,比如:
image

有趣的一点是,当使用cats-cat向量,将生成复数向量(这个复数不是虚数实数那个复数,是单词的复数!!!!!!)
image

嵌入矩阵(Embedding Matrix)---大字典

这是GPT-3所用到的所有的词嵌入,总规模有6亿的参数量
image
大家可以把这个理解为一个大字典,你要的啥单词,查一下这个矩阵字典,就可以找到其对应的向量是啥。下面我们还会用到这个大字典。

语义分析

我们人类在思考问题时,常常会结合上下文来分析一个词的含义,比如:
image
这个词就受到很多词意思的左右。当然我帮大家查了这个词是羽毛笔的意思。
image

预处理

GPT拿来一个句子,首先进行的是将句子理解为一个一个的Token,注意哈:这时并没有考虑上下文的意思,仅仅是把Token从大字典里拿来进行一个简单的替换,得到对应的向量值是多少。
image

而流经这个神经网络(Transformer)的作用,就是让这些向量能够获得比单个词更丰富更具体的含义

然而我们注意到矩阵含有行和列,其中行代表着语义宽度,也就是GPT一次所能处理的单词长度,注意:我这里的话指的是能够结合上下位语义的长度,也就是说,一旦问的多了,问的久了,你再问之前的,超过了这个长度,那么GPT就会遗忘之前你说的话。
image
哈哈,这就是为什么早期GPT版本会遗忘的原因。
image

预测结果

我们来看看结果我们是如何操作的。
比如生成了这样一个矩阵:
image
我们会根据上述矩阵的最后一列,将其映射到一个含有5000元素的列向量,这个矩阵叫做”Unembedding matrix“,解嵌入矩阵。
image
最后通过softmax分类器进行概率预测
image

softmax

这个网上就比较多了,这里不再赘述,仅记录个人发现。
我们又引入了一个温度T参量,当参量的值很大时,会给小的概率值匀更多的机会,看起来会更均匀些:
image
反之。
image

同样我们也可以操作这个T值,来改变GPT的文本生成特点
image
左边就很古板,而右边就很创新,但逐渐趋向于无稽之谈了,因为其更倾向于选择可能性更小的词了。官网API不允许T大于2

Logits

We call the logits for the next word prediction

《Attention is all you need》

【回顾】:
step1:三个向量初始化一样,因为这个时候是没有上下文参考的。当然,实际中他们代表着不同的含义。
image
step2:等到Transformer这一步,才会改变传到的意思,集合上下文
还记得我们提到的这里用到的向量的集合意义吗?
image
把实际的含义”扳“到正确的向量上
举个简单的例子
Candy,给他一个普通的向量,会和棒棒糖、蛋糕等甜食联系到一起,然而如果是 Spicy candy,则就会和辣联系到一起,如果是spicy candy cannon,就会和糖果大炮联系起来,就不再是食物了。

这便是注意力机制

那么注意力机制到底是如何运作的呢??

一个单词,会问前面和后面的单词:我前面还有形容词吗?这时可能前面的俩哥们就说我在我在!!
image
这个疑问,就是一个询问矩阵Query,比如假设有128维。
image
通过一个变化矩阵得到询问矩阵
image
同样,应答的矩阵我们叫做应答矩阵,也叫”键矩阵“
image
因为有问就得有答嘛,所以:
image
可以看向量的匹配程度(不记得了,网上翻看,我前面讲了)
然后汇成一个图,用来指示二者的匹配程度:
image
然后我们找到了匹配点乘最大的值,我们认为二者的匹配程度是最大的。
image
也就说明了二者的相关程度。
但数值可能随意分配,所以再次需要使用softmax进行归一化,得到应答和询问的归一化数值。

注意力模型

我们管这个模型叫做注意力模型,得到的是询问和应答的相关性矩阵。
image
这是著名论文的给出的公式推导结果,非常精彩
image

掩码(masking)

一句话多次训练:
提供了多次训练的机会:
image
但注意的是不能让后面的词预测影响到前面,因为后面我都知道是啥词了,我还预测啥啊,对吧。。
image
所以我们把注意力模型里面的这些数值清零。。
image
但这样会影响softmax的结果,所以还需要先设置为-无穷
image
这一过程被称为Masking

注意力模型的尺寸

其大小等于上下文长度的平方,这也就是上下文长度不能太长
image

怎么“扳”?

我们前面知道,我们要将向量,根据正确的语义,扳到正确的位置上,那么我们要怎么扳???
而且前面论文公式里的V是什么意思呢?换言之,我们要如何知道向量的变换呢?
image
这时,我们其实可以这样来理解:
image

根据应答矩阵,被作用到Wv这个转换矩阵算子上,将产生一种作用(这个作用笔者认为可以理解为一个向量),然后询问矩阵加上这样一个响应,就变化了。最后就可以根据不同的语义产生向量的变换!!
这个Wv矩阵我们暂且称它为值矩阵。。
image
就像上图所说的那样
如果向量多了也一样:
image
但我们得到了三个矩阵参数
image
下面这个图将很好的说明这一点:
image
非常的清晰且明了

目前学到的参数

image

上面的值矩阵可以拆分为两个小矩阵

他们还各有自己的名字:
image
这种操作实质上就是对大矩阵进行“地址”

交叉注意力模型

这里不赘述,后面学到我也会详细介绍。

单注意力头

Single-attention
就是一个注意力的矩阵格式呗
Multi-attention
就是GPT-3内使用的96个注意力头,同时进行着并行的运算。
image

下面我接下来还会补充,未完待续。。。

标签:单词,Transformer,模型,矩阵,----,GPT,直观,向量
From: https://www.cnblogs.com/myleaf/p/18441504

相关文章

  • WPF Progrss bar stringformat {} {0}% IsDetermined
    //xaml<Windowx:Class="WpfApp425.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • 苹果笔记本安装双系统,如何开启虚拟化
    1开启以下Windows功能并重启Hyper-v虚拟机监控程序,如果不能开,也可以不开。2下载rEFInd-bin软件并解压https://sourceforge.net/projects/refind/ 我的下载目录是:D:\refind-bin-0.14.23编辑文件将refind目录下的refind.conf-sample的文件名改为refind.conf,notepad++打开......
  • 【ClickHouse 特点&数据类型&表引擎&SQL操作&副本&分片集群 01】
    概念:ClickHouse是开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告OLAP这样的适合做一些一次插入多次查询这样的操作(适合查询),对于新增更新删除就不太擅长了,所以ClickHouse是一种分析性数据库HBase也是列式存储......
  • linux中的信号处理器函数
    信号处理器函数的设计常见的两种信号处理器函数设置全局性标志变量并退出。主程序对此标志进行周期性检查,一旦置位随即采取相应动作。信号处理器函数执行某种类型的清理动作,接着终止进程或者使用非本地跳转将栈解开并将控制返回到主程序中的预定位置。设计原则简洁性......
  • 2024.9 做题记录
    1.P7811JRKSJR2你的名字。不难,但是卡常/tuu首先对\(k\)根号分治,记阈值为\(B_1\),对序列分块,记阈值为\(B_2\)。对于\(k\leB_1\)的情况,可以直接枚举\(k\),然后转化成区间min,这部分时间复杂度\(O\left(nB_1+m\left(B_2+\dfrac{n}{B_2}\right)\right)\)。对于\(......
  • Link-local地址是IPv6中一种特殊类型的地址,用于在同一链路(网络段)内进行通信。这些地址
    IPv6的link-local地址定义:Link-local地址是IPv6中一种特殊类型的地址,用于在同一链路(网络段)内进行通信。这些地址的前缀是FE80::/64,并且每个IPv6设备在其网络接口上都会自动生成一个link-local地址。来源:Link-local地址的设计目的是为了支持IPv6设备之间的本地通信,而不需要依......
  • 3319 哈夫曼树 优先队列 最小堆
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e3+10,inf=0x3f3f3f3f;//优先队列(最小堆),用于存储叶结点的权值priority_queue<int,vector<int>,greater<int>>q;intn,ans,x;intmain(){//读取叶结点的数量......
  • Java开发中操作日志的作用和模块
     Java中的操作日志模块的开发和运行维护都是十分耗时耗力。操作日志的收集涉及到公司的项目或者是上市产品的用户体验和反馈。后端和前端开发工程师的日常工作就是对运行维护工程师收集回来的项目和产品的反馈进行系统级别的分析以及需求下发迭代开发。操作日志的打印方式分为线......
  • 1
    importjavax.swing.;importjava.awt.;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.*;publicclassArithmeticQuizGUIextendsJFrame{privatestaticfinalintNUMBER_OF_QUESTIONS=10;privatestaticfinalint......
  • VITS-Conditional Variational Autoencoder with Adversarial Learning for End-to-E
    论文原文:具有对抗性学习的条件变分自动编码器用于端到端文本到语音的转换github:论文源码摘要最近提出了几种支持单阶段训练和并行采样的端到端文本转语音(TTS)模型,但它们的样本质量与两阶段TTS系统不匹配。在这项工作中,我们提出了一种并行端到端TTS方法,该方法可生成比当......