欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

自然语言处理 VI-最重要的模型-变压器-上】-变压器架构

最编程 2024-03-05 09:04:01
...

它出自经典论文《attention is all you need》,论文地址是: http://arxiv.org/abs/1706.03762,本文中的诸多图片都是取自该论文,下面的架构图也是出自论文

在这里插入图片描述
从上图就可以看出,transfomer的架构包括左边encoder和右边decoder,下面先来讲encoder部分

encoder

左侧的encoder部分,输入一排input vector向量,输出一排向量,忽略中间的细节来看,是如下的的架构:
在这里插入图片描述
中间encoer部分,如果是seq2seq架构,就是RNN,transformer就相对复杂一些:
下面分部分介绍encoder的各个部分:

input处理部分(词嵌入和postional encoding)

在这里插入图片描述
输入一排,经过词嵌入input Embedding,再加上位置信息,Postional Encoding (这部分可以在 位置编码有介绍),生成一排向量。
然后进入attention计算

attention部分

transformer最重要的attention部分,这部分是多头注意力。值得注意的是,这部分的输出并不会直接丢给全连接层,还需要在额外经过residual add和layer norm

add

add的操作:
执行residual 残差连接,将attention的输入加到self-attention后的输出

Norm

残差后的输出进行层归一化,层归一化的操作:
不考虑batch,将输入中同一个feature,同一个sample,不同的dimension 计算均值和标准差,然后如下计算
在这里插入图片描述
这个操作,用能听得懂的话翻译一下就是,是对每个样本里面的元素进行归一化
整个过程如下:
在这里插入图片描述
最终上述部分的输出作为全连接层的输入

Feedforward & add && Norm

上一部分的输出,输入到本部分

Feedforword,实际上就是两层全连接层,中间有激活函数等

在这里插入图片描述
当然中间的卷积,可以换成线性层Linear

经过这个全连接层的输出之后,依然要经过残差add 和层归一化norm,然后输出.

add & Norm

这部分 同attention 那一层的操作,此处不赘述

最终encoder的输出

在encoder中,上面这三个步骤是可以重复多次的,所以看到架构图中表示了*N操作。
最终的输出才是encoder的输出。

篇幅所限,下一篇文章继续 transformer的decoder部分 自然语言处理六-最重要的模型-transformer-下