(施工中……)

(不施工了 另起炉灶)

主要参考资料:https://github.com/NLP-LOVE/ML-NLP

Machine Learning / Deep Learning部分

基本概念

激活函数:sigmoid,Tanh,ReLU,Leaky ReLU,PReLU,ELU,Maxout

sigmoid

sigmoid函数又称 Logistic函数,用于隐层神经元输出,取值范围为(0,1),可以用来做二分类。

[公式]

avTdiw

JOADpO

优点:

  • Sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定,可以用作输出层。

  • 连续函数,便于求导。

缺点:

  • sigmoid函数在变量取绝对值非常大的正值或负值时会出现饱和现象,意味着函数会变得很平,并且对输入的微小改变会变得不敏感。

  • 在反向传播时,当梯度接近于0,权重基本不会更新,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。

  • sigmoid函数的输出不是0均值的,会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响。

  • 计算复杂度高,因为sigmoid函数是指数形式。

Tanh

PbkLCR

ReLU

整流线性单元(Rectified linear unit,ReLU)是现代神经网络中最常用的激活函数,大多数前馈神经网络默认使用的激活函数。

ReLU函数定义如下: [公式]

jLl62p

优点:

使用ReLU的SGD算法的收敛速度比 sigmoid 和 tanh 快。

在x>0区域上,不会出现梯度饱和、梯度消失的问题。

计算复杂度低,不需要进行指数运算,只要一个阈值就可以得到激活值。

缺点:

ReLU的输出不是0均值的。

Dead ReLU Problem(神经元坏死现象):ReLU在负数区域被kill的现象叫做dead relu。ReLU在训练的时很“脆弱”。在x<0时,梯度为0。这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新。

产生这种现象的两个原因:参数初始化问题;learning rate太高导致在训练过程中参数更新太大。

解决方法:采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

LeakyReLU

渗漏整流线性单元(Leaky ReLU),为了解决dead ReLU现象。用一个类似0.01的小值来初始化神经元,从而使得ReLU在负数区域更偏向于激活而不是死掉。这里的斜率都是确定的。

nIEhNp

损失函数

交叉熵cross-entropy

[公式]

[公式]

当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。

模型八股

RNN

结构:

Itl4lS

缺点:Gradient Vanishing, No Long-distance dependency

LSTM

结构:

bSUX3M

其中,f代表forget,对上一状态的c(t-1)进行选择性遗忘,i代表对x(t)输入后的候选记忆细胞c’(t)进行选择性记忆。这两个结果相加再经过一层o(决定哪些会被输出)构成了真正的当前状态c(t)的隐藏状态h(t)。

记忆门:QpE9hp

遗忘门:3SIJu6

输出门:tYsOzX

候选记忆细胞:VYjN0N

记忆细胞qhhBRW

隐藏状态:Ep0OYF

优缺点:with long-distance dependency, but more difficult to train(more parameters)

NLP部分

基本概念

Word Embedding

Use vectors to represent words 把词映射为实数域向量的技术

Methods

One-Hot

Pros: Expand the dimension of features

Cons: 随着语料库的增加,数据特征的维度会越来越大,产生一个维度很高,又很稀疏的矩阵。这种表示方法的分词顺序和在句子中的顺序是无关的,不能保留词与词之间的关系信息。

Bag of Words

Cons: 词出现的越多特征越明显,但不代表这个词重要/权重应该更大。词与词之间的顺序关系被抹除。

TF-IDF

rpP7Sr

含义:某个term在一篇文章中出现的频率越高 & 这个term在所有文档中出现的次数越少,越能够代表这个文章。TFIDF方法主要是对词向量进行加权。

n-gram

Cons:随着n的大小增大,词表会呈现指数型膨胀。

模型八股

Word2Vec

0LXo0u

本质:训练上下文预测的神经网络模型,利用隐藏层权重矩阵作为向量化表示。所需要的结果是输入层和隐藏层之间的权重矩阵W,用输入乘以W就是词向量表示。

方式:CBOW(连续词袋,预测下文)or Skip-gram(根据上下文预测词语)

Attention

结构:

ReyEHg

利用i-1的隐藏层输出计算概率分布,softmax归一化

Transformer

结构:Transformer的结构和Attention模型一样,Transformer模型中也采用了 encoer-decoder 架构。但其结构相比于Attention更加复杂,论文中encoder层由6个encoder堆叠在一起,decoder层也一样。

XR389N

  • encoder,包含两层,一个self-attention层和一个前馈神经网络,self-attention能帮助当前节点不仅仅只关注当前的词,从而能获取到上下文的语义。
  • decoder也包含encoder提到的两层网络,但是在这两层中间还有一层attention层,帮助当前节点获取到当前需要关注的重点内容。

ELMo (Embedding from Language Models)

For what : Word Embedding 无法解决同义词(Synonym)问题

D6H9k9

WcecY6

BERT:A Pre-training model

结构

P2stYh

BERT预训练模型分为以下三个步骤:Embedding、Masked LM、Next Sentence Prediction

  • Embedding:这里的Embedding由三种Embedding求和而成

    • Token Embeddings是词向量,第一个单词是CLS标志,可以用于之后的分类任务
    • Segment Embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务
    • Position Embeddings和之前文章中的Transformer不一样,不是三角函数而是学习出来的
  • MLM可以理解为完形填空,作者会随机mask每一个句子中15%的词,用其上下文来做预测,例如:my dog is hairy → my dog is [MASK]

    此处将hairy进行了mask处理,然后采用非监督学习的方法预测mask位置的词是什么,但是该方法有一个问题,因为是mask15%的词,其数量已经很高了,这样就会导致某些词在fine-tuning阶段从未见过,为了解决这个问题,作者做了如下的处理:

    80%是采用[mask],my dog is hairy → my dog is [MASK]

    10%是随机取一个词来代替mask的词,my dog is hairy -> my dog is apple

    10%保持不变,my dog is hairy -> my dog is hairy

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

    • Bert先是用Mask来提高视野范围的信息获取量,增加duplicate再随机Mask,这样跟RNN类方法依次训练预测没什么区别了除了mask不同位置外;
    • 全局视野极大地降低了学习的难度,然后再用A+B/C来作为样本,这样每条样本都有50%的概率看到一半左右的噪声;
    • 但直接学习Mask A+B/C是没法学习的,因为不知道哪些是噪声,所以又加上next_sentence预测任务,与MLM同时进行训练,这样用next来辅助模型对噪声/非噪声的辨识,用MLM来完成语义的大部分的学习。

GPT / GPT-2

XLNET

自回归vs自编码
  • Autoregressive LM: 在ELMO/BERT出来之前,大家通常讲的语言模型其实是根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型。GPT 就是典型的自回归语言模型。ELMO尽管看上去利用了上文,也利用了下文,但是本质上仍然是自回归LM,这个跟模型具体怎么实现有关系。ELMO是做了两个方向(从左到右以及从右到左两个方向的语言模型),但是是分别有两个方向的自回归LM,然后把LSTM的两个方向的隐节点状态拼接到一起,来体现双向语言模型这个事情的。所以其实是两个自回归语言模型的拼接,本质上仍然是自回归语言模型。

    自回归语言模型有优点有缺点:

    缺点是只能利用上文或者下文的信息,不能同时利用上文和下文的信息,当然,貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,因为融合模式过于简单,所以效果其实并不是太好。

    优点其实跟下游NLP任务有关,比如生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的,自回归语言模型天然匹配这个过程。而Bert这种DAE模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,导致生成类的NLP任务到目前为止都做不太好。

  • Autoencoder: 自回归语言模型只能根据上文预测下一个单词,或者反过来,只能根据下文预测前面一个单词。相比而言,Bert通过在输入X中随机Mask掉一部分单词,然后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词,如果你对Denoising Autoencoder比较熟悉的话,会看出,这确实是典型的DAE的思路。那些被Mask掉的单词就是在输入侧加入的所谓噪音。类似Bert这种预训练模式,被称为DAE LM。

    这种DAE LM的优缺点正好和自回归LM反过来,它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文,这是好处。缺点是啥呢?主要在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题,因为Fine-tuning阶段是看不到[Mask]标记的。DAE吗,就要引入噪音,[Mask] 标记就是引入噪音的手段,这个正常。

    XLNet的出发点就是:能否融合自回归LM和DAE LM两者的优点。就是说如果站在自回归LM的角度,如何引入和双向语言模型等价的效果;如果站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。当然,XLNet还讲到了一个Bert被Mask单词之间相互独立的问题。

QrjZXO

GloVe

共现矩阵(Co-occurrence Matrix)

ULMFit

评价指标

F1

c9DWK1

xO3RyO

BLeu

核心思想

比较候选译文和参考译文里的 n-gram 的重合程度,重合程度越高就认为译文质量越高。unigram用于衡量单词翻译的准确性,高阶n-gram用于衡量句子翻译的流畅性。 实践中,通常是取N=1~4,然后对进行加权平均。

DNyUpN

主要特点
  • n-gram共现统计
  • 基于精确率
应用场景

Machine Translation

缺点
  • 只看重精确率,不看重召回率。

  • 存在常用词干扰(可以用截断的方法解决)

  • 短句得分较高。即使引入了brevity penalty,也还是不够。

改进
  • 截断:改进常用词干扰
  • brevity penalty:改进短句得分较高的问题

Rouge

核心思想

大致分为四种:ROUGE-N,ROUGE-L,ROUGE-W,ROUGE-S。常用的是前两种(-N与-L) * ROUGE-N中的“N”指的是N-gram,其计算方式与BLEU类似,只是BLEU基于精确率,而ROUGE基于召回率。

  • ROUGE-L中的“L”指的是Longest Common Subsequence,计算的是候选摘要与参考摘要的最长公共子序列长度,长度越长,得分越高,基于F值。

![image-20210125134654580](/Users/dawei/Library/Application Support/typora-user-images/image-20210125134654580.png)