LSTM和transformer的区别

1.transformer抛弃了传统的CNN和RNN,整个网络结构完全是由attention机制组成,前后没有“时序”,可以实现并行计算,更高效;而LSTM是传统的RNN改进结构,有时序的概念,不能并行计算。

2.LSTM引入三个控制门,拥有了长期记忆,更好的解决了RNN的梯度消失和梯度爆炸问题,而transformer依然存在顶层梯度消失问题。

3.LSTM的输入具备时序;而Transformer还需要利用positional encoding加入词序信息,但效果不好,而且无法捕捉长距离信息。

4.LSTM针对长序列依然有效;而Transformer针对长序列低效,计算量太大,self.attention的复杂度是n的二次方。

5.CNN和RNN结构的可解释性并不强,LSTM也一样;而Transformer的自注意力可以产生更具可解释性的模型。

讲一下Bert的原理,Bert好在哪里?

Bert的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为decoder是不能获得要预测的信息的。模型的主要创新点都在pretrain上,Bert的预训练阶段包括两个任务,一个是Masked Language Model,还有一个是Next Sentence Prediction,两种方法分别捕捉词语和句子级别的特征表示。

Masked Language Model:可以理解为完形填空,作者会随机mask每一个句子中15%的词,用其上下文来做预测,例如:my dog is hairy-->my dog is [MASK],此处将hairy进行了mask处理,然后采用非监督的学习方法预测mask位置的词是什么。

Next Sentence Prediction:选择一些句子对A与B,其中50%的数据B是A的下一条句子,剩余50%放入数据B是语料库中随机选择的,学习其中的相关性,添加这样的预训练目的是目前很多NLP任务比如QA和NLI都需要理解两个句子之间的关系,从而让预训练的模型更好的适应这样的任务。

cbow和skip-gram的区别和优缺点

两者都是在word2vec中用于将文本进行向量表示的实现方法

1.在cbow方法中,是由周围词预测中心词,从而利用中心词的预测结果情况,使用梯度下降法方法,不断地去调整周围词的向量。当训练完成之后,每个词都会作为中心词,把周围词的词向量进行了调整,这样也就获得了所有文本里面所有词的词向量。

而skip-gram实用中心词来预测周围的词。在skip-gram中,会利用周围的词的预测结果情况,使用梯度下降来不断调整中心词的词向量,最终所有的文本遍历完毕之后,也就得到了文本所有词的词向量。

2.可以看到,**cbow**预测行为的次数跟整个文本的词数几乎是相等的(每次预测行为才会进行一次反向传播, 而往往这也是最耗时的部分),复杂度大概是O(V);**skip-gram**进行预测的次数是要多于cbow的:因为每个词在作为中心词时,都要使用周围词进行预测一次。这样相当于比cbow的方法多进行了K次(假设K为窗口大小),因此时间的复杂度为O(KV),训练时间要比cbow要长。

优缺点:skip-gram 出来的准确率比cbow 高,但训练时间要比cbow要长;在计算时,cbow会将context word 加起来, 在遇到生僻词是,预测效果将会大大降低。skip-gram则会预测生僻字的使用环境,预测效果更好。

Ber采用哪种Normalization结构,LayerNorm和BatchNorm的区别,LayerNorm结构有参数吗?参数的作用?

采用LayerNorm结构,和BatchNorm的区别主要是做规范的维度不同。

BatchNorm针对一个Batch里面的数据进行规范化,针对单个神经元进行,比如batch里面有64个样本,那么BatchNorm得到的结构就是输入的这64个样本各自经过这个神经元后的规范值。

LayerNorm针对的是单个样本的所有维度特征做归一化。比如batch里面有64个样本,那么layerNorm得到的结果就是每一个样本经过该隐藏层(所有神经元)后的规范值。

简单来说就是:batch normalization对一个神经元的batch所有样本进行标准化,layer normalization对一个样本同一层所有神经元进行标准化,前者纵向 normalization,后者横向 normalization。

有参数,引入了gamma和beta参数,目的是恢复原始特征分布。

如何优化Bert效果?

1.数据扩增

2.把现有的大模型等进行ensemble,然后蒸馏原始的bert模型,这是能有效提高的,只是操作代价比较大。

3.bert上面增加一些网络结构,比如attention,rcnn等,个人得到的结果感觉和直接在上面加一层transformer layer的效果差不多,模型更加复杂,效果略好,计算时间略微增加。

Bert self-attention相比lstm的优点是什么?

lstm的计算过程是从左往右从上到下(如果多层lstm的话),后一个时间节点的embed需要等前面的计算完;而bert通过使用self attention + position embedding对序列进行编码,与时序无关,可以并行计算,虽然模型复杂了很多,速度其实差不多,而且精度更高。

CNN和RNN结构的可解释性并不强,LSTM也一样;而Bert的自注意力机制可以产生更具可解释性的模型。

lstm的三个门是怎么运作的,写一下公式?

lstm的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为遗忘门的sigmoid单元来处理的。他通过查看ht-1和xt信息来输出一个0-1之间的向量,该向量里面的0-1值表示细胞状态Ct-1中的哪些信息保留或者丢弃多少。0表示不保留,1表示都保留。

LSTM转到TensorRT pytorch lstm与transformer_并行计算

下一步是决定给细胞状态添加哪些新的信息。这一步又分为两个步骤,首先,利用ht-1和xt通过一个称为输入门的操作来决定更新哪些信息。然后利用ht-1和xt通过一个tanh层得到新的候选细胞信息ct~,这些信息可能会被更新到细胞信息中。

LSTM转到TensorRT pytorch lstm与transformer_机器学习_02

下面将更新就得细胞信息Ct-1,变为新的细胞信息Ct。更新的规则就是通过遗忘门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息Ct~的一部分得到新的细胞信息Ct。更新操作如下所示:

LSTM转到TensorRT pytorch lstm与transformer_深度学习_03

更新完细胞状态以后根据输入的ht-1和xt来判断输入细胞的哪些状态特征,这里需要将输入经过一个称为输入门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个-1~1之间值的向量,该向量与输入门得到的判断条件相乘就得到了最终该RNN单元的输出。

LSTM转到TensorRT pytorch lstm与transformer_机器学习_04

lstm为什么可以解决长期依赖,lstm会梯度消失吗?

因为lstm有两个通道可以保持记忆:短期记忆h,保持非线性操作;长期记忆C,保持线性操作。因为线性操作是比较稳定的,所以C的变化相对稳定,保持了长期记忆。而对有用信息的长期记忆是通过训练获得的,也就是说在内部的几个权重矩阵中。

LSTM总可以通过选择合适的参数,再不发生梯度爆炸的情况下,找到合理的梯度方向来更新参数,而且这个方向可以充分考虑远距离的隐藏层信息的传播影响。

另外需要强调的是,LSTM除了在结构上天然克服了梯度消失的问题,更重要的是具有更多的参数来控制模型;通过四倍于RNN的参数量,可以更加精细地预测时间序列变量。

Bert的输入是什么?

输入由三个部分组成:

1.token embedding:token embedding层是要将各个词转换为固定维度的向量。在Bert中,每个词会被转换为768维的向量表示。

2.segment embedding段向量,其中端对应的就是inputs的一句话,句子末尾都有加[SEP]结尾符,两句拼接开头有[CLS]符号。是因为BERT里面的下一句预测任务,所以会有两句拼接起来,上句和下句,上句有上句段向量,下句有下句段向量,也就是图中A与B。

3.position embedding:是因为transformer模型不能记住时序,所以人为加入表示位置的向量。

之后这三个向量拼接起来的输入会喂入BERT模型,输出各个位置的表示向量

LSTM转到TensorRT pytorch lstm与transformer_并行计算_05

self-attention理解和作用,为什么要处理根号dk?

点积后的结果大小是跟维度成正比的,所以经过softmax之后,梯度就会变很小,除以dk后可以让attention的权重分布方差为1,否则会由于某个输入太大的话就会使得权重太接近于1,梯度很小,造成参数更新困难。

Bert的并行计算体现在哪里?

不同于RNN计算当前词的特征需要依赖于前文计算,有时序这个概念,BERT的Transformer-encoder中的self-attention计算当前词的特征的时候,没有时序这个概念,是同时利用上下文信息来计算的,一句话的token特征是通过矩阵并行运算的,故并行体现在self-attention

attention和self attention的区别

attention和self-attention的计算方法是一样的,只不过它们关注的对象不同而已。

attention主要应用在seq2seq + attention中。以seq2seq框架为例,输入source和输出Target内容是不一样的,比如对一件商品的评价和总价来说,source是一个对一件商品好评或者差评的句子,target是对应的评价总结,**Attention发生在target的元素query和Source中的所有元素之间*。**

self-attention,指的不是target和source之间的attention机制,而是**Source内部元素**之间或者**Target内部**元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的Attention。

transformer的优势

1.transformer抛弃了传统的cnn和rnn,整个网路结构完全是由attention机制组成,前后没有“时序”,可以实现并行运算,更高效;而LSTM是传统的rnn改进结构,有时序的概念,不能并行计算。

2.两个位置的关联性计算和距离无关,避免长期依赖的问题。

3.cnn和rnn结构的可解释性并不强,lstm也一样;而transformer的自注意力可以产生更具可解释性的模型。

Transformer 组成

Encoder:是由多个相同的小encoder layer 串联而成。小Encoder layer可以简化为两个部分:

  • multi-head self attention
  • Feed-Forward network

Decoder:与Encoder有所不同,每一个小Encoder Layer都会输入至所有的小Decoder Layer中。

transformer的pisition encoding和bert的position embedding的区别

transformer中的positional encoding是直接利用公式计算

bert position embedding:学习出来的embedding向量。这与transformer不同,transformer中是预先设定好的值。