Transformer学习感悟
自述说明
1.transformer架构
输入经过词嵌入矩阵+位置编码的信息融合后,再经过多头注意力机制(Q,K,V),再经过层归一化+残差连接,到前馈神经网络,再经层归一化+残差连接。到这里就是我们输入+编码器部分(编码器可重复连接*N);再看解码器部分,输入<开始键>,同样进过词嵌入+位置编码,再经过因果掩码注意力机制->层归一化+残差连接->交叉注意力机制->层归一化+残差连接->前馈神经网络->层归一化+残差连接->连接层->softmax->output。
所以整个架构无非就是这几个模块,我们逐一搞懂即可。

2.大模型的认识
我们都使用过很多大模型,可以发现当我们提问时,大模型的输出并不是直接全部整个输出,而是像词语接龙一样,一个一个输出。所以,当我们学习完大模型的基础后,你应该会有所理解AI。
学习大模型,学习agent,我们要回答几个问题:
1.神经网络是什么?
2.注意力机制是什么?
3.PyTorch的架构?
对于第一个问题,是学习的基础,这里简单回答。x->f(x)->y。
第二个问题,对你的输入,我需要分配不同的注意力(权重参数)去使得你的输出朝向你希望的样子。;从空间的角度解释,对于一个词(token),它会有很多向量方向,注意力就是将这个词转化成符合语义的向量方向。

第三个问题,
Tensor,张量;Parameter,可优化参数,初始化参数;Model;Autograd,计算梯度;Optimizer,优化参数
现在我们可以进行transformer的学习了。
模型组成
1.Token
我们需要将语句先拆成很多个词,这个词就叫token。比如:I love you ,这里就是会有3个token,先叫成单词吧。当然,计算机不认识这些,我们还需要转换成计算机可识别的语言——向量。也就是每个token中包含很多数值,这些数值我们很难理解,大致能表示(词的语义,词性,位置......复杂的语义等等)。比如同一个单词在不同的语句下的向量:

2.词嵌入矩阵
我们最初处理token时,采取的说独热编码(0/1)。比如:
“我是一只狗”
我->[1,0,0,0,0……]
是->[0,1,0,0,0,……]
一->[0,0,1,0,0,......]
我们发现这存在一些问题,维度很大,同时只有一个非0。所以,我们引入了词嵌入的方法。
通过词嵌入矩阵(训练得到的权重表),语义相近聚类,差异分散。降维,通过数值,将自然语言区分开。
词向量 d 一般为512,它包含了token的基本语义信息,是由模型训练可调节的权重表
V 词表的数量->token的数量
词嵌入矩阵d*v ;独热向量v*1(对于单个token),最后得到d*1。实质最后整个token是组合成v*d

3.位置编码
其实到这里,我们已经将数据处理好了,为什么还要进行再进行处理。针对以往不同的任务,不同于数据,表格,图片等等,我们处理的是带有时间的信息,有一定语义逻辑的信息。比如:“狗咬人”,“人咬狗”,词所处的位置不同,它的含义也不同,所以我们要用一个信息去衡量这种性质。
在transformer中的位置编码是一个有关三角函数的公式;参数方面:词嵌入矩阵的大小 d 及当前token在这个序列的位置pos。最后,在与词嵌入矩阵对应相加。
4.注意力机制
初始时的token包含向量,但进入transformer中,在上下文的语义下,attention会把向量移动到对应语义上下文中。
当我们预测下一个token时,是基于上一个token的嵌入向量,由于它包含了该上下文的语义,所以参数量远超于该单个token参数量。
现在,我们解释一下重要的参数:Q,K,V。
Q:比如,在一句英文里,名词询问自己前面是否有形容词,这种询问被编码成另一种向量——query(Q)。相当于每个词去提问自己的上下文信息。

而Q=Wq*E(token向量)。这里的Wq是模型学习的参数,同时Q的维度是远小于E维度,相当于从高维度->低度。
K:如果有形容词,那么形容词的回答就成为了key(K)。同样Wk也是可学习的参数,K=Wk*E。
所以,如果存在名词对形容词的查询时,怎么这个相关性就比较大,Q*K的点积大,查询与回答就对齐。

之后我们要得到概率,就经过softmax,为了数据稳定性,我们除维度的平方根

V:如果要改变某一词的含义,你需要加入的向量。

这里可能解释不太好,大家可从其他地方学习学习。
这里我们介绍的是自注意力机制,在机器翻译任务中,还存在交叉注意力机制。我们的询问对应回答,这种语言的词->另一种语言的词,这里不会运用掩码(后面会讲),因为不存在"偷看"问题。

5.训练和推理
X:’我是一条狗’
Labels:’I am a dog’
我们先讲推理过程,以翻译任务为例子。输入中文,经过编码器得到编码信息,在解码器中,从<start>开始,将神经网络的运算与编码信息结合,得到最佳概率的英文‘I‘,
再将从 <start> I 开始得到 'am'
再从 <start> I am 开始得到 'a'......一直到<end>结束符。
所以,它是将每一个输出和之前的输出作为输入,去推理得到下一个输出。
但训练过程会不太一样。首先模型充分利用数据,同时预测多个token,一个样本训练多次,同时并行计算loss值,效率大大加快。

因为我们需要让模型向着正确的方向训练,比如前面的翻译任务,如果模型翻译错了一步,那之后的语义就更加错了,所以我们会将"正确答案"告诉模型,保证模型以正确的姿态去学习。到这里,我们其实也发现了问题,我们都将"正确答案"告诉模型了,那模型就能知道了呀?根本就不用训练了。所以,我们在注意力中引入了掩码,防止模型"偷看",防止后文影响前文的预测。
6.因果掩码注意力机制


我们希望询问不要被后文影响,同时因为最后要输出概率,所以先将后文至负无穷,再经softmax变0。
7.前馈神经网络
一种网络结构,无循环,单向流动,多层。以全连接层为主。(RNN循环神经网络,不是;AlexNet是……)这个部分相对比较简单。
8.多头注意力机制
针对一组token,对每个token进行多组独立的注意力机制,不同的注意力W所针对的角度不同,(比如,句子中的意思,标点,句法……)

9.层归一化
层归一化:一个样本,在神经元上的所有输出作归一化。(y1,y2,y3,y4……)
批量归一化(ResNet):在同一层,不同的样本,在同一个神经元上的归一化。(y1,y1,y1,y1……)

总结总结
我也是学习者,跟b站的炮哥,3BB学习。这篇文章是我对transformer的学习理解(只是为了记录自己的学习过程和学习输出),可能存在片面和错误的地方,大家多多指正,共同学习!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)