nlp基础
2021.1
一些问题
一个单词,可能有好几种意思,怎么word embendding
Word2vec
法国,巴拉巴拉,法语,怎么解决rnn长程依赖问题
句子很长时候,反向传播到最前面梯度很小,发生梯度消失
lstm解决这个问题,类似于残差的味道,解决梯度消失的问题
翻译时候,两种语言长短不一致,怎么解决
用两个rnn,也叫seq2seq模型或者叫encoder-decoder模型,本质上就是encoder是一个rnn,decoder是一个rnn
seq2seq的attenstion
朴素的seq2seq,encoder的最后一层隐状态输出作为decoder的输入,然后解码得到seq
引入attention,把encoder的全部隐状态输出都用了起来,每次解码前,通过decoder的当前隐状态去对encoder的全部隐状态计算softmax得分分布,加权求和,然后与decoder当前隐状态拼接,送入前馈神经网络,得到seq
transformer
问题1:猫,街道 , it,累了/窄的
it指代谁,rnn的弊端是只能从一端看向另一端,双向rnn也没有办法同时看两端(seq2seq就解决了这个事情,因为会先编码整个句子,然后再去解码,无论是否加了注意力机制,都能看到整个句子)
问题2:rnn依赖上一个time step的输出,所以没法并行,效率低(seq2seq解决不了,因为seq2seq本质上还是两个rnn)
问题3:seq2seq可以看到整个句子,但是他需要两个序列(?对这句话的理解还存在一些疑问)
transformer本质上还是一个seq2seq模型,但是encoder和decoder不是由rnn组成了,换成了self-attention和前馈神经网络层。可以并行(decoder还有一个编码器解码器注意力层)。
需要输入的tocken长度固定(由于mlp的存在,且他们不共享参数,下面有解释)
多头的作用是什么?他们的差异只要参数初始化时不一致,其他过程完全一致,如果初始化成同一参数,那么多头就完全一致,这个差异表征什么? 相应的,cnn中卷积核的初始化一个道理,怎么解释?
Transformer是否对参数初始化敏感?
encoder*8:self-attention和前馈神经网络组成,接受的输入是tocken的word embedding,然后自注意机制通过学习每个词需要对整个句子所有词的关注程度,得到每个词的语意信息,输出一个与输入词向量一致维度的语意表示序列,然后送到mlp(不同语意表示不共享mlp,他们只是结构相同,但是参数不共享,因此这里决定了transformer需要定长的序列输入,因为网络结构的mlp数量决定了序列长度)self-attention具体做法是,先把输入的词向量通过三个矩阵(这三个矩阵由序列的所有词向量共享)映射到三个子表示空间,分别称为K,Q,V,他们的含义分别是K(辅助表示矩阵,其他主表示与辅助表示的矩阵乘积,对于某个主表示而言,这是一个标量,这个数字大小表征了当前主表示需要放多少注意力在这个辅助表示上),Q(主表示矩阵,他与其他辅助表示矩阵乘积,表示对于当前这个词——主表示而言,其他辅助表示分别需要放置多少注意力,他与每个辅助表示的K乘积都是一个标量),V(每个word embedding变换后的特征矩阵,对每个主表示词而言,计算完句子里所有词的注意力,通过softmax归一化分布后,对所有词的Value矩阵加权平均,作为这个词的最终语意表示vector),通过self-attention,得到每个词编码后的context vecter,独立的送到mlp中,得到一个encoder的输出seq(每个词对应的context vector与输入的word embedding维度一致)。我们发现这个过程与rnn相比,漏了一个信息,那就是每个序列中单词的顺序,rnn通过time step含有了顺序信息,但是self-attention并没有,所以我们需要通过位置编码方法,把position embedding添加到word embedding中,具体的position embedding方法在transformer论文中有阐述,这也不是唯一的位置编码方式。最终目的是将遗漏的单词顺序信息纳入考虑范围,背后的直觉是:将这些表示位置的向量添加到词向量中,得到了新的向量,这些新向量映射到 Q/K/V,然后计算点积得到 attention 时,可以提供有意义的信息。
Decoder*8:self-attention,encoder-decoder attention,前馈层组成。其中decoder是按time step输出的,每个时间步的seq2seq长度都是1,即每次解码一个word,其中输入为已经解码出的序列,在encoder-decoder attention层,Q是解码器自己的Q,K和V是编码器的输出。
Trick:在编码器和解码器的self-attention层,前馈层,以及解码器的encoder-decoder attention层,都接了一层残差层和归一化层,即得到的Z序列输出加上word embedding或者是上一层的Z输出,再归一化得到这一层的输出Z(Z即每一层编码或解码后输出的与输出相同维度的context vector)
[参考资料]
【1】https://www.techbeat.net/article-info?id=1423
【2】Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention is all you need. ArXiv, Nips.
【3】Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. NAACL HLT 2019 - 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies - Proceedings of the Conference, 1(Mlm), 4171–4186.
Last updated