自己设计一个Transformer模型

Transformer模型在2017年被Google提出,直接基于self-attention结构,不再依赖于RNN、LSTM或者CNN,是一种Seg2Seg模型。近些年提出了许多基于Transformer的模型,有学者甚至将这一类模型称为基础模型。

该模型的原始论文为Attention Is All You Need。

0. 如何设计Transformer

阅读该部分需要有Attention基础

Transformer是一种Seg2Seg模型,最开始提出是用来解决机器翻译任务。

简单来说Transformer与传统Seg2Seg模型的区别就是:将之前seq2seq中的编码器和解码器,从RNN模型替换成了Transformer模型。RNN模型的训练是迭代的,串行的,必须要等当前字处理完,才可以处理下一个字。而Transoformer的训练是并行的,即所有字是同时训练的,这样就大大增加了计算效率。

Attention的发展:

  1. 最开始Attention被提出并被用于基于RNN的Seg2Seg模型
  2. 之后有论文提出attention可以用于所有的RNN模型,并不一定要是Seg2Seg---->self-attention
  3. Transofrmer的提出:attention可以在没有RNN的情况下使用

假设我们自己来设计一个仅仅依赖于Attention,没有RNN的Seg2Seg模型,来完成机器翻译任务,如何做?
在Seg2Seg的基础上:剥离RNN,保留Attention-->Transformer

0.1 Attention Layer

首先我们来搭建一个Attention层来完成机器翻译任务。

  • Encoder输入: x 1 , x 2 , . . . . . . , x m x_1,x_2,......,x_m x1,x2,......,xm
  • Decoder输入: x 1 ′ , x 2 ′ , . . . . . . , x t ′ x_1^{'},x_2^{'},......,x_t^{'} x1x2,......,xt

encoder输入英语单词,decoder依次生成德语单词,把当前生成的德语单词当成下一轮的输入。

现在已经生成了 t t t个德语单词,我们要预测第 ( t + 1 ) (t+1) t+1个德语单词


  • keys和values是基于encoder的输入
  • key: k : i = W K x i k_{:i}=W_Kx_i k:i=WKxi
  • value: v : i = W V x i v_{:i}=W_Vx_i v:i=WVxi
    自己设计一个Transformer模型_第1张图片

  • Queries是基于decoder的输入
  • Query: q : j = W Q x j ′ q_{:j}=W_Qx_j^{'} q

你可能感兴趣的:(transformer,自然语言处理,机器翻译)