网络知识 娱乐 Transformer详解(附代码)

Transformer详解(附代码)

引言

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

注意力机制

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

Self-Attention

S e l f mathrm{Self} Self- A t t e n t i o n mathrm{Attention} Attention工作原理如上图所示,给定输入 w o r d   e m b e d d i n g mathrm{wordtext{ }embedding} word embedding向量 a 1 , a 2 , a 3 ∈ R d l × 1 a^1,a^2,a^3 in mathbb{R}^{d_l times 1} a1,a2,a3Rdl×1,然后对于输入向量 a i , i ∈ { 1 , 2 , 3 } a^i,iin {1,2,3} ai,i{1,2,3}通过矩阵 W q ∈ R d k × d l , W k ∈ R d k × d l , W v ∈ R d l × d l W^qin mathbb{R}^{d_k times d_l},W^kin mathbb{R}^{d_k times d_l},W^vin mathbb{R}^{d_ltimes d_l} WqRdk×dl,WkRdk×dl,WvRdl×dl进行线性变换得到 Q u e r y mathrm{Query} Query向量 q i ∈ R d k × 1 q^iinmathbb{R}^{d_k times 1} qiRdk×1 K e y mathrm{Key} Key向量 k i ∈ R d k × 1 k^iin mathbb{R}^{d_k times 1} kiRdk×1,以及 V a l u e mathrm{Value} Value向量 v i ∈ R d l × 1 v^iin mathbb{R}^{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{begin{aligned}q^i&=W^q cdot a^i\k^i&=W^k cdot a^i,quad iin{1,2,3}\v^i&=W^v cdot a^iend{aligned}right. qikivi=Wqai=Wkai,i{1,2,3}=Wvai如果令矩阵 A = ( a 1 , a 2 , a 3 ) ∈ R d l × 3 A=(a^1,a^2,a^3)inmathbb{R}^{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)inmathbb{R}^{d_k times 3} Q=(q1,q2,q3)Rdk×3 K = ( k 1 , k 2 , k 3 ) ∈ R d k × 3 K=(k^1,k^2,k^3)inmathbb{R}^{d_k times 3}