(self-attention)自注意力机制
将词汇转化为向量表示,可以使用one-hot进行编码,但是这种编码方式认为所有的词之间是没有关系的
还有一种方法是Word Embedding,这种方法相似的词汇会聚集到一起。
输入
文字、声音和图等的输入都是一堆向量
输出
1、N->N(如词性标注)
2、N->1(情绪分析,就是评价一条评论是正面的还是负面的)
3、N->N'(机器自己决定输出数目的多少)
视频中以第一种输出情况为例(N->N)
经过Self-attention得到的四个vectors是考虑了整个sequence(句子)之后才得到的,然后再作为全连接层的输入,再输出
self-attention和全连接层交替使用
self-attention处理整个句子的信息,而全连接层专注于处理某个位置的信息
self-attention的运作过程
b1--b4的产生不是按照顺序产生的,是并行运行产生的
b1的得出是考虑了a1到a4之后得到的。
b1产生的步骤:
1、根据a1找到sequence里与a1相关的其它向量
那么现在的问题是如何得出α呢?
Dot-product和Additive的方式都可以得到
本文中使用的是Dot-product
a1与a1、a2、a3、a4分别进行dot-product计算,分别计算关联性,得到α的值之后经过softmax进行归一(不一定使用softmax,也可以使用relu等,结果可能比softmax的结果更好,这里使用的方法是不确定的)
2、得到α' 之后抽取重要的信息,下面是抽取重要信息的过程
与a1的关联性越强,即得到的α' 的值越大,那么最后计算b1的时候的影响就会越大,就会越接近。
矩阵运算的角度
过程概述图(只有红框里面的数据是未知的,需要通过training data找出来的,其余的数据都是已知的)
Multi-head Self-attention
有多种不同的相关性,就会有多个head,不同的head做各自的计算
Positonal Encoding
在上述的过程中,并没有考虑位置的问题。
在做词性标注的时候,位置的信息就比较重要,比如动词出现在开头的概率就比较低
所以就需要在原有的基础上添加位置向量
self-attention VS CNN
CNN是简化版的self-attention,self-attetnion需要考虑整个的信息,而CNN只需要考虑设定的红框的信息
self-attention VS RNN
Transformer
Sequence-to-sequence(Seq2seq)
输入一个sequence,输出一个sequence,但是输出的长度是由机器自己决定的
Seq2seq过程
Encoder
transformer中的self-attention
经过b经过self-attention之后的a,然后再和b相结合,做residual之后进行norm得到c,c经过全连接层之后得到d,然后d再和c进行结合做residual,之后再做norm
上图的过程就是下图过程的详细版
右图中的输入加入了positional encoding,然后经过multi-head-attention之后进行residual和norm,接着是前馈网络,接着又进行residual和norm,就这样执行n次。
Decoder
前面的输出,再作为下一步的输入
何时停止?
添加“stop token”
encoder和decoder
masked self-attention
表示在生成b1的时候只能考虑a1,在生成b2的时候只能考虑a1和a2,在生成b3的时候只能考虑a1,a2和a3,在生成b4的时候考虑a1,a2,a3,a4
为什么需要masked self-attention?
其实非常的直观,因为decoder的过程是依次执行的,是现有前面的然后才有后面的,就像是现有a1然后才有a2,而self-attention是一块执行的
Decoder ---- Non-autoregressive(NAT)
与AT不同的是,NAT是一次输入多个begin,但是这就有一个问题,如何确定输入的begin的数量(因为输入是不确定的)?
1、另外设置一个Classifier,这个分类器的输入是decoder的input,然后输出是一个数字,这个数字就是表示的begin的数量
2、给一个begin的上限,根据输入的end进行中断,如上图
NAT的好处
并行进行,速度比AT的速度快
但是NAT的表现弱于AT的表现
Encoder和Decoder中间的传递
cross attention
q来自于decoder,k和v来自于encoder。decoder凭借产生的q抽取encoder里面重要的信息产生作为FC的输入的值
下一步的过程:
训练过程
将decoder的输出和正确答案做cross entropy,并且使corss entropy最小,这样的正确率越高。
在训练的时候,这里decoder的输入是正确答案,就是提前给decoder看正确答案,在有“begin”和“机”的情况下,下一步输出的就是“器”
补充
前馈神经网络
神经网络前馈是接收输入数据并生成输出的机器学习模型。这些网络由多层人工神经元组成,这些人工神经元通过加权连接连接。在不环回的情况下,数据以单一方向从输入层流向输出层。在训练期间调整神经元之间连接的权重,以减少模型预测的输出与实际正确输出之间的差异。
cross entropy
交叉熵(Cross-Entropy)是一种用于衡量两个概率分布之间的距离或相似性的度量方法。在机器学习中,交叉熵通常用于损失函数,用于评估模型的预测结果与实际标签之间的差异。
Dot-product
其实就是做点积(内积)运算