人工智能
预训练
给定包含 N 个词的序列,前向语言模型通过前 k-1个词预测第 k 个词。在第 k 个位置,每个 LSTM 层输出上下文依赖的向量表达 , j=1,2,…,L。顶层 LSTM 层的输出 利用交叉熵损失预测下一个位置。
后向语言模型对序列做反序,利用下文的信息去预测上文的词。与前向类似,给定经过 L 层的后向深层 LSTM 网络预测得到第 j 层的隐层输出。
双向语言模型拼接前向语言模型和后向语言模型,构建前向和后向联合最大对数似然。
其中,为序列词向量层参数,为交叉熵层参数,在训练过程中这两部分参数共享。
嵌入式语言模型组合利用多层 LSTM 层的内部信息,对中心词,一个 L 层的双向语言模型计算得到 2L+1 个表达集合。
Fine-tune
在下游任务中,ELMo 将多层的输出整合成一个向量,将所有 LSTM 层的输出加上normalized 的 softmax 学习到的权重 s=Softmax(w),使用方法如下所示:
直观上来讲,biLMs 的较高层次的 LSTM 向量抓住的是词汇的语义信息, biLMs 的较低层次的 LSTM 向量抓住的是词汇的语法信息。这种深度模型所带来的分层效果使得将一套词向量应用于不同任务有了可能性,因为每个任务所需要的信息量是不同的。另外 LSTM 的层数不宜过多,多层 LSTM 网络不是很容易 train 好,存在过拟合问题。如下图是一个多层 LSTM 用在文本分类问题的实验结果,随着 LSTM 层数增多,模型效果先增加后下降。
Transformer
曾经有人说,想要提升 LSTM 效果只要加一个 attention 就可以。但是现在attention is all you need。Transformer 解决了 NLP 领域深层网络的训练问题。
Attention 此前就被用于众多 NLP 的任务,用于定位关键 token 或者特征,比如在文本分类的最后加一层 Attention 来提高性能。Transformer 起源自注意力机制(Attention),完全抛弃了传统的 RNN,整个网络结构完全是由 Attention 机制组成。Transformer 可以通过堆叠 Transformer Layer 进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的 Encoder-Decoder,并在机器翻译中取得了 BLEU 值的新高。
整个流程的可视化如图:以N=2示例,实际Transformer的N=6。
Encoder 阶段: 输入“Thinking Machines”,对应词向量,叠加位置向量 Positional Encoding,对每个位置做 Self-Attention 得到;Add&Norm 分两步,residual connection即,layer Normalization 得到新的,对每个位置分别做 feed forward 全连接和 Add&Norm,得到一个 Encoder Layer 的输出,重复堆叠2次,最后将 Encoder Layer 输出到 Decoder 的 Encoder-Decoder Layer 层。
Decoder 阶段:先是对 Decoder 的输入做 Masked Self-Attention Layer,然后将Encoder 阶段的输出与 Decoder 第一级的输出做 Encoder-Decoder Attention,最后接 FFN 全连接,堆叠2个 Decoder,最后接全连接+Softmax 输出当前位置概率最大的的词。
Transformer 的结构上比较好理解,主要是里边的细节比较多,如 Mult-HeadAttention, Feed Forward, Layer Norm, Positional Encoding等。
Transformer的优点:
总结对比CNN、RNN和Self-Attention:
CNN: 只能看到局部领域,适合图像,因为在图像上抽象更高层信息仅仅需要下一层特征的局部区域,文本的话强在抽取局部特征,因而更适合短文本。
RNN: 理论上能看到所有历史,适合文本,但是存在梯度消失问题。
Self-Attention: 相比 RNN 不存在梯度消失问题。对比 CNN 更加适合长文本,因为能够看到更远距离的信息,CNN 叠高多层之后可以看到很远的地方,但是 CNN本来需要很多层才能完成的抽象,Self-Attention 在很底层就可以做到,这无疑是非常巨大的优势。
BERT
BERT (Bidirectional Encoder Representations from Transformers) 本质来讲是NLP 领域最底层的语言模型,通过海量语料预训练,得到序列当前最全面的局部和全局特征表示。
BERT 网络结构如下所示,BERT 与 Transformer 的 Encoder 网络结构完全相同。假设 Embedding 向量的维度是,输入序列包含 n 个token,则 BERT 模型一个layer 的输入是一个的矩阵,而它的输出也同样是一个的矩阵,所以这样 N 层 BERT layer 就可以很方便的首尾串联起来。BERT 的 large model 使用了 N=24 层这样的Transformer block。
全部0条评论
快来发表一下你的评论吧 !