本篇文档由浅入深的方式逐步说明transformer的实现原理
不做更深入的公式的解析详见
什么是模型
模型就是一个数学公式,所谓大模型,就是拥有n多个大量参数的复杂的数学公式
对于分类问题:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该用户对话属于某分类的概率
确定数学公式过程就是寻找参数过程
比如具备线性关系的数据,可以假设公式如下,然后寻找a,和 b 两个参数:
1、公式:y = ax + b
2、参数:a = 50, b = -100
如果有多个维度来代表输入信息(由单个值演变成向量),每个维度对结果的影响程度不同,则不同维度前的参数大小就不同,进而演变成常见的权重,从而尽可能计算出精确的结果,这种计算需要借助计算机实现
神经网络
输入向量x和输出向量y之间,增加了一层z向量,
并且用上述格式的计算公式去计算z向量和y向量中的每一个数值的结构 就成为神经网络
不同神经网络的层数和每层结构节点数一般不同,一般由开发者针对不同场景进行设计测试来寻找最佳方案






对于上述图片识别的例子,中间z层相当于在进行边缘计算,再通过进行大批量数字图片的训练,找出相同数字的边缘数字特点,从而控制激活函数的参数,最终给出0-9的数字的识别概率

在x层和y层之间,加入多层z向量,用以提取更深层特征,这种多层结构,叫做深度神经网络
而通过计算机完成大规模数学计算以找到相对更优的w参数组合的过程,就叫做机器学习,也就是我们所说的模型训练。
transformer
tokenization - 文本变成Token
通过将文字进一步切割成基础单位的语义信息,可以帮助模型进行更好的处理
⽐如:”subword”这个词,可以拆分成”sub”和”word”两个⼦词,”sub”是⼀个通⽤的前缀可以和其他组合词的”sub”前缀合并,这样⼤模型将会学会使⽤”sub”前缀。类似的,”encoded”可以拆解为”encod”+”ed”,“encoding”可以拆解为“encod”+”ing”,这样两个词的核⼼部分”encod”被提取出来了,⽽且还得到时态信息。
子词的处理方式,会让一段内容的Token数量多于单词数量
对于不同语种的分词形式不同分词模型的结果很可能差异较大,根本原因在于底层分词机制的不同
Embedding - Token变成向量
one-hot编码
one-hot编码:将每个Token映射为向量,向量的维度为Token数量,向量的值全为0,只有对应Token的索引为1
one-hot的一些问题
1、维度过高,过于稀疏:
容纳3000个汉字就需要3000个3000维向量,容纳5000个汉字则需要5000个5000维向量;
2、没有体现出“距离”概念:
如果两个字之间的意思相近,那两个对应的向量求“距离”的时候,就应该更相近;
3、没有数学或逻辑关系:
最好能满足:国王 - 男人 + 女人 = 女王
解决:将Token映射为embedding向量
Embedding
详见
我们可以通过一个模型把一个Token变成一个Embedding向量、把一个单词变成一个Embedding向量、把一句话变成一个Embedding向量、把一张图变成一个Embedding向量
这样在模型训练的时候,就可以根据输入值本身维度信息,根据相似度信息(距离远近),进行相关关联信息(亲密关系,是不是经常一起搭配使用,同时出现频率如何)提取,即语义提取,从而进行结果预测
几个Embedding模型
1、Word2Vec:Google在2013年提出的概念,也是一个预训练模型
2、OpenAI Embedding Models : OpenAI的API
Transformer Encoder & Decoder
RNN Encoder & Decoder
以RNN为核心的Encoder Decoder
将输入句子进行编码,编码后的结果作为解码器的输入,解码器进行解码,最终得到结果
Encoder一般用来做分析(语义分析,输入是否在Rag资料里面,翻译前后语义是否一致),Decoder一般用来做生成
从图中可以看出,只用最后一次生成的向量代表了之前的所有信息,加权求和过程中,前置文字的信息必然权重越来越小,未免会造成语义丢失,且处理过程循环依次进行,导致计算效率下降,解码结果的精确度也会随句子变长而下降
因此基于rnn 的编解码模型存在如下问题
1、信息丢失
2、无法处理较长句子
3、不能并行计算
Attention Encoder & Decoder
tansformer 采用 自注意力机制进行编解码,从而规避以上问题
Attention 注意力机制

根据一个输入的维度和已有数据的相关系数计算其他维度数据
根据多个维度的数据和相关系数,计算多个维度的数据

如果是一段文字用多维度表示,输入也是多维度信息,那么,多维度信息之间也用相关系数联系,就可以实现推理计算
自注意力机制
上述注意力机制的QKV的值都换成基于输入自身,视角变成输入的一个字和其他每个字之间的相似度,就相当于在计算一句话中的这个字与这段话中其他字的相关性情况,详见
跑一遍相当于计算句子中每个字与句子中其他字之间的相似性,一个向量代表2个字之间的相似性
再将两个字之间的相似性作为输入再计算一遍,相当于每个向量拥有4个字的相似性,一个向量代表4个字之间的相似性
多循环几次,一个向量就可以尽可能涵盖一个句子中尽可能多的语义信息,方便后续进行decode
解码器
通过自注意机制处理后的embedding可以携带更多语义信息进行推测解码
每次解码的时候包含的输入是上一步的输出和编码的所有信息,因此,解码器的输入是上一步的输出,输出是下一步的输入

对于多头注意力机制,详见
既然模型解码阶段都要进行自注意机制,那么,编码阶段的自注意力机制流程可以直接放在解码器的预测值处理阶段进行
整体流程本来就是在预测下一个字是什么,即续写,所以,当代大语言模型一般采用纯解码器的架构进行文字推测生成
小结
transformer 架构通过自注意力机制处理embedding后的文字信息,这样在推测解码阶段天然形成了语音关联信息,即解码前相关的语义信息解码器是可以直接拿到的,后续就是根据语义相关性大小进行概率计算
因此,如果prompt中的内容越多,即相关主题语义的信息量越大,解码器在推测时倾向于获取相应主题的语义文字的概率越大,准确率越高
to do
整理书中知识点