|
|
|
@ -2,6 +2,8 @@
|
|
|
|
|
|
|
|
|
|
### 总体架构图
|
|
|
|
|
|
|
|
|
|
> 这个阶段主要是有个大概认识,你可能会觉得模糊或不能理解的,后面会对每个模块进行详解,也欢迎给我留issue探讨。
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240421134206905.png" alt="总体架构图" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
> WHAT:自注意力机制模型,顾名思义,它能够自己找到不同位置的依赖关系。如在序列的任何位置直接计算出其他位置的依赖关系,从而有效捕捉长距离依赖。以及位置编码等关键组成。
|
|
|
|
@ -33,9 +35,11 @@
|
|
|
|
|
根据我们上面了解到的,不同的部分其实可以针对不同的任务。
|
|
|
|
|
|
|
|
|
|
- BERT(Bidirectional Encoder Representations from Transformers)是只使用了编码器(Encoder)的模型,一般用于抽样式问答 或者 做命名实体识别,如从给定的文本段落中找到并提取出回答问题的文本片段。目标是识别或检索信息,而不是生成新的文本序列。
|
|
|
|
|
- GPT(Generative Pretrained Transformer)是只使用了解码器的模型,被设计用于生成文本。
|
|
|
|
|
- GPT(Generative Pretrained Transformer)是只使用了解码器的模型,被设计用于生成文本。但是里面的Mask改成了因果masking(causal masking),即不像原始那样隐藏一句话中的某个词,而是它只能看到前面的词,而不能看到后面的。
|
|
|
|
|
- 机器翻译,则需要编码器处理源语言文本,解码器生成目标语言文本。即整个Transofmer。
|
|
|
|
|
|
|
|
|
|
当你更加深入理解模型,你也能创造出更多的可能性。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 解码器(Decoder)概述
|
|
|
|
@ -56,6 +60,8 @@
|
|
|
|
|
|
|
|
|
|
### 文字向量化 & 位置编码
|
|
|
|
|
|
|
|
|
|
> Embedding & Positional Encoding
|
|
|
|
|
>
|
|
|
|
|
> WHY:机器无法理解文字,机器底层只能识别数值,所以文字需要转换成数值。而由于自注意力机制不具有处理序列顺序的能力,位置编码被用来保留单词的顺序信息。
|
|
|
|
|
>
|
|
|
|
|
> HOW:文字的向量化有很多种方法,我们后面再详解。
|
|
|
|
@ -72,21 +78,31 @@
|
|
|
|
|
|
|
|
|
|
### 语义关系学习(多头注意力)
|
|
|
|
|
|
|
|
|
|
> Multi-HeadAttention
|
|
|
|
|
>
|
|
|
|
|
> WHY:捕捉多种语义关系,提高模型的表达能力。如LLM是大模型的缩写,同时也是法学硕士的缩写。亦或者冬天里的能穿多少穿多少,跟夏天里的能穿多少穿多少。
|
|
|
|
|
|
|
|
|
|
<img src="/Users/xueweiguo/Desktop/GitHub/AiLearning-Theory-Applying/assets/image-20240421212923027.png" alt="语义关系学习" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
向量传入后,通过语义关系学习(一系列计算),得出一个矩阵,维度是4 × 4的矩阵。矩阵里的每个值都是数字,数字代表了文字对应其它文字的语义关系,越高表示与其它文字的关系越近,越小则表示越疏远。
|
|
|
|
|
|
|
|
|
|
> 实际上是通过三个不同的线性变换生产Q、K和V向量(实际是3条线,为了简化前面用1条线表达),每一份对应一个头,如GPT是12头,则是向量 × 4 × 3 × 12 份数据。另外需要注意的是,每个子模块都会叠加N次,如GPT-3就据说叠加了175层。即最终是向量 × 4 × 3 × 12 × 175。当然我们这里只用向量 × 4 × 1 × 1 × 1 即 向量 × 4 × 3 1头1个子模块,以方便大家理解。
|
|
|
|
|
> 为什么数字越大表示关系越近,现在可以简单理解,就是每个词的查询向量(Q)会与序列中所有单词的键(K)向量进行点积运算,得到一个分数,这个分数经过softmax函数处理后,就变成了注意力权重。即每个词都有跟全部词的向量结果,越大表示语义关系越紧密,权重越低则表示关系越疏远。
|
|
|
|
|
>
|
|
|
|
|
> 另外,实际上是通过三个不同的线性变换生产Q、K和V向量(实际是3条线,为了简化前面用1条线表达),每一份对应一个头,如GPT是12头,则是向量 × 4 × 3 × 12 份数据。另外需要注意的是,每个子模块都会叠加N次,如GPT-3就据说叠加了175层。即最终是向量 × 4 × 3 × 12 × 175。当然我们这里只用向量 × 4 × 1 × 1 × 1 即 向量 × 4 × 3 1头1个子模块,以方便大家理解。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 数值缩放
|
|
|
|
|
|
|
|
|
|
> WHY:前面我们讲到,矩阵里的数字越大,表示
|
|
|
|
|
> Add & Norm
|
|
|
|
|
>
|
|
|
|
|
> WHY:前面我们讲到,矩阵里的数字越大,表示跟其它词的语义关系越紧密,如果两个大值相加,很可能就造成大的值特别大,小的值特别小。所以要统一到一个维度,特别是深度学习场景里,由于深度学习是矩阵乘法, 所以大值或者小值都会被无限放大,导致模型不稳定。
|
|
|
|
|
|
|
|
|
|
将语义关系学习里输出的矩阵,加上残差(输入语义关系学习)前的向量,再进行值的统一缩放,大部分情况下是缩放到[-1,1]区间()。
|
|
|
|
|
将语义关系学习里输出的矩阵,加上残差(输入语义关系学习)前的向量,再进行值的统一缩放,大部分情况下是缩放到[-1,1]区间。
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240423093444733.png" alt="数值缩放" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
Add & Norm的过程可以理解为相同位置元素相加,再做层归一化(Layer Normalization),即如果残差连接的A矩阵是3维的,多头注意力输出的B矩阵也会是3维的,而且两者一定是同Size,即A矩阵是(None, 4, 768),B矩阵肯定也是(None, 4, 768),两者同位置的如`A[i][j][k]=0.1`,`B[i][j][k]=0.2`,则相加是0.3,再去进行归一化。层归一化后面我们会详解。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|