Transformer详解(附代码)

Posted 鬼道2022

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Transformer详解(附代码)相关的知识,希望对你有一定的参考价值。

引言

T r a n s f o r m e r \\mathrmTransformer Transformer模型是 G o o g l e \\mathrmGoogle Google团队在 2017 2017 2017 6 6 6月由 A s h i s h   V a s w a n i \\mathrmAshish\\text Vaswani Ashish Vaswani等人在论文《 A t t e n t i o n   I s   A l l   Y o u   N e e d \\mathrmAttention\\text Is\\text All \\text You \\text Need Attention Is All You Need》所提出,当前它已经成为 N L P \\mathrmNLP NLP领域中的首选模型。 T r a n s f o r m e r \\mathrmTransformer Transformer抛弃了 R N N \\mathrmRNN RNN的顺序结构,采用了 S e l f \\mathrmSelf Self- A t t e n t i o n \\mathrmAttention Attention机制,使得模型可以并行化训练,而且能够充分利用训练资料的全局信息,加入 T r a n s f o r m e r \\mathrmTransformer Transformer S e q 2 s e q \\mathrmSeq2seq Seq2seq模型在 N L P \\mathrmNLP NLP的各个任务上都有了显著的提升。本文做了大量的图示目的是能够更加清晰地讲解 T r a n s f o r m e r \\mathrmTransformer Transformer的运行原理,以及相关组件的操作细节,文末还有完整可运行的代码示例。

注意力机制

T r a n s f o r m e r \\mathrmTransformer Transformer中的核心机制就是 S e l f \\mathrmSelf Self- A t t e n t i o n \\mathrmAttention Attention S e l f \\mathrmSelf Self- A t t e n t i o n \\mathrmAttention Attention机制的本质来自于人类视觉注意力机制。当人视觉在感知东西时候往往会更加关注某个场景中显著性的物体,为了合理利用有限的视觉信息处理资源,人需要选择视觉区域中的特定部分,然后集中关注它。注意力机制主要目的就是对输入进行注意力权重的分配,即决定需要关注输入的哪部分,并对其分配有限的信息处理资源给重要的部分。

Self-Attention

S e l f \\mathrmSelf Self- A t t e n t i o n \\mathrmAttention Attention工作原理如上图所示,给定输入 w o r d   e m b e d d i n g \\mathrmword\\text embedding word embedding向量 a 1 , a 2 , a 3 ∈ R d l × 1 a^1,a^2,a^3 \\in \\mathbbR^d_l \\times 1 a1,a2,a3Rdl×1,然后对于输入向量 a i , i ∈ 1 , 2 , 3 a^i,i\\in \\1,2,3\\ ai,i1,2,3通过矩阵 W q ∈ R d k × d l , W k ∈ R d k × d l , W v ∈ R d l × d l W^q\\in \\mathbbR^d_k \\times d_l,W^k\\in \\mathbbR^d_k \\times d_l,W^v\\in \\mathbbR^d_l\\times d_l WqRdk×dl,WkRdk×dl,WvRdl×dl进行线性变换得到 Q u e r y \\mathrmQuery Query向量 q i ∈ R d k × 1 q^i\\in\\mathbbR^d_k \\times 1 qiRdk×1 K e y \\mathrmKey Key向量 k i ∈ R d k × 1 k^i\\in \\mathbbR^d_k \\times 1 kiRdk×1,以及 V a l u e \\mathrmValue Value向量 v i ∈ R d l × 1 v^i\\in \\mathbbR^d_l \\times 1 viRdl×1,即 q i = W q ⋅ a i k i = W k ⋅ a i , i ∈ 1 , 2 , 3 v i = W v ⋅ a i \\left\\\\beginalignedq^i&=W^q \\cdot a^i\\\\k^i&=W^k \\cdot a^i,\\quad i\\in\\1,2,3\\\\\\v^i&=W^v \\cdot a^i\\endaligned\\right. qikivi=Wqai=Wkai,i1,2,3=Wvai如果令矩阵 A = ( a 1 , a 2 , a 3 ) ∈ R d l × 3 A=(a^1,a^2,a^3)\\in\\mathbbR^d_l \\times 3 A=(a1,a2,a3)Rdl×3 Q = ( q 1 , q 2 , q 3 ) ∈ R d k × 3 Q=(q^1,q^2,q^3)\\in\\mathbbR^d_k \\times 3 Q=(q1,q2,q3)R以上是关于Transformer详解(附代码)的主要内容,如果未能解决你的问题,请参考以下文章

深度学习 Transformer 中的 Encoder 机制,附Pytorch完整代码

基于Transformer的交通预测模型部分汇总附源代码

完全解析!Bert & Transformer 阅读理解源码详解

完全解析!Bert & Transformer 阅读理解源码详解

完全解析!Bert & Transformer 阅读理解源码详解

Transformer从输入到输出进行编写代码-附代码和注解