deeplearning.ai的第五课:Sequence Models.讲解了如基本的RNN网络,基本的循环单元到GRU,LSTM,再到双向RNN,还有深层版的模型.常用词嵌入的特性,不同词嵌入训练方法,集束搜索和Attention模型.
Recurrent Neural Networks
Notation
$X^{(i)<t>}$表示第i个训练样本的第t个输入元素
$Y^{(i)<t>}$表示第i个训练样本的第t个输出元素
$T_{x}^{(i)}$表示第i个训练样本的输入序列长度
$T_{y}^{(i)}$表示第i个训练样本的输出序列长度
Recurrent Neural Network Model
标准神经网络的问题:
- 输入输出长度可能不一致
- 不能很好共享文本不同位置学习到的特征
Backpropagation through time
Different types of RNNs
- 多输入多输出模型(翻译模型)
- 多输入单输出模型(情感分析)
- 单输入多输出模型(音乐生成)
- 单输出单输出模型(简单神经网络)
Language model and sequence generation
Sampling novel sequences
Vanishing gradients with RNNs
反向传播因为同样的梯度消失的问题,后面层的输出误差很难影响前面层的计算.不管输出是什么,不管是对的,还是错的,这个区域都很难反向传播到序列的前面部分,也因此网络很难调整序列前面的计算.如果不管的话,RNN会不擅长处理长期依赖的问题.
梯度爆炸很容易发现,因为参数会大到崩溃,你会看到很多NaN,或者不是数字的情况,这意味着你的网络计算出现了数值溢出.
Gated Recurrent Unit (GRU)
当$\Gamma_{u}$很接近0,可能是0.000001或者更小,这就不会有梯度消失的问题了.因为$\Gamma_{u}$很接近0,这就是说$c^{t}$几乎就等于$c^{t-1}$,而且$c^{t}$的值也很好地被维持了,即使经过很多很多的时间步.这就是缓解梯度消失问题的关键,因此允许神经网络运行在非常庞大的依赖词上
Long Short Term Memory (LSTM)
最后公式应该为$a^{t}=\Gamma_{o}*tanh(c^{t})$
红线显示了只要你正确地设置了遗忘门和更新门,LSTM是相当容易把$c^{<0>}$的值一直往下传递到右边,比如$c^{<3>} = c^{<0>}$.这就是为什么LSTM和GRU非常擅长于长时间记忆某个值,对于存在记忆细胞中的某个值.
Deep RNNs
对于RNN来说,有三层就已经不少了,不像卷积神经网络一样有大量的隐含层.或者每一个上面堆叠循环层,然后换成一些深的层,这些层并不水平连接,只是一个深层的网络.基本单元可以是最简单的RNN模型,也可以是GRU单元或者LSTM单元,并且,你也可以构建深层的双向RNN网络.
自然语言处理与词嵌入
词汇表征
One-hot向量表征的一大缺点是把每个词孤立起来(内积均为0),稀疏,泛化能力不强.词嵌入(Word Embedding)则可以学习到俩个词语相似之处.
使用词嵌入
词嵌入迁移学习:
- 从大量文本中学习词嵌入(1-100B words) or 下载预训练好的词嵌入模型
- 用词嵌入模型迁移到新的只有少量标注训练集的任务中(100k words)
- 可选: 继续微调(finetune)词嵌入(通常是数据集2比较大)
注:语言模型和机器翻译使用词嵌入较少,因为这俩者数据集都较大
词嵌入的特性
词嵌入的一个显著成果就是,可学习的类比关系的一般性.举个例子,它能学会man对于woman相当于boy对于girl,因为man和woman之间和boy和girl之间的向量差在gender(性别)这一维都是一样的。
嵌入矩阵
学习词嵌入
研究发现,如果你想建立一个语言模型,用目标词的前几个单词作为上下文是常见做法.但如果目标是学习词嵌入,那么用这些其他类型的上下文,也能得到很好的词嵌入。
Word2Vec
句子:’I want a glass of orange juice to go along with my cereal.’
Skip-Gram模型: 抽取上下文和目标词配对,构造一个监督学习问题.随机选一个词作为上下文词,比如选orange这个词,然后随机在一定词距内选另一个词,比如在上下文词前后5或10个词范围内选择目标词.
关键是个softmax单元.矩阵$E$会有很多参数,所以矩阵$E$有对应所有嵌入向量$e_{c}$的参数,softmax单元也有$\theta_{t}$的参数.优化这些参数的损失函数,就会得到一个较好的嵌入向量集,这个就叫做Skip-Gram模型.它把一个像orange这样的词作为输入,并预测这个输入词从左数或从右数的某个词是什么词.
算法首要的问题就是计算速度.在softmax模型中,每次需对词汇表中的所有词做求和计算.同论文提出的还有CBOW模型.
负采样
生成数据的方式是选择一个上下文词(orange),再选一个目标词(juice),这就是表的第一行,它给了一个正样本并给定标签为1.然后给定$K$次,用相同的上下文词,再从字典中选取随机的词(king,book,the,of)等,并标记0,这些就会成为负样本.如果从字典中随机选到的词,正好出现在了词距内,比如说在上下文词orange正负10个词之内也没太大关系.算法就是要分辨这两种不同的采样方式,这就是如何生成训练集的方法.
小数据集的话,$K$从5到20比较好.如果数据集很大,$K$就选的小一点.
模型基于逻辑回归模型,不同的是将一个sigmoid函数作用于$\theta_{t}^{T}e_{c}$,参数和之前一样.这可看做二分类逻辑回归分类器,但并不是每次迭代都训练全部10,000个词,只训练其中的5个(部分选出的词K+1个)
采样负样本方法:$P\left( w_{i} \right) = \frac{f\left( w_{i} \right)^{\frac{3}{4}}}{\sum_{j = 1}^{10,000}{f\left( w_{j} \right)^{\frac{3}{4}}}}$
GloVe 词向量
GloVe算法做的就是使上下文和目标词关系开始明确化.$X_{ij}$是单词$i$在单词$j$上下文中出现的次数,那么这里$i$和$j$就和$t$和$c$的功能一样.若上下文指左右几个词,则会得出$X_{ij}$等于$X_{ji}$这个结论.其他时候大致相等.加权因子$f\left(X_{ij}\right)$就可以是一个函数,$X_{ij}$为0是为0(启发性方法见GloVe算法论文).$\theta_{i}$和$e_{j}$是对称的,而不像之前了解的模型,$\theta$和$e$功能不一样,因此最后结果可以取平均$e_{w}^{(final)}= \frac{e_{w} +\theta_{w}}{2}$.
GloVe差距最小化处理
$$\text{mini}\text{mize}\sum_{i = 1}^{10,000}{\sum_{j = 1}^{10,000}{f\left( X_{ij} \right)\left( \theta_{i}^{T}e_{j} + b_{i} + b_{j}^{‘} - logX_{ij} \right)^{2}}}$$
两个单词之间有多少联系,$t$和$c$之间有多紧密,$i$和$j$之间联系程度如何,换句话说就是他们同时出现的频率是多少,这是由这个$X_{ij}$影响的.然后梯度下降来最小化
$$\left( A\theta_{i} \right)^{T}\left( A^{- T}e_{j} \right) = \theta_{i}^{T}A^{T}A^{- T}e_{j} = \theta_{i}^{T}e_{j}$$
通过GloVe算法得到的(关系)特征表示可能是原特征的潜在的任意线性变换,最终还是能学习出解决类似问题的平行四边形映射.
Word2Vec,负采样,GloVe 词向量是三种学习词向量嵌入的方法.
情绪分类
情感分类一个最大的挑战就是可能标记的训练集没有那么多.对于情感分类任务来说,训练集大小从10,000到100,000个单词都很常见,甚至有时会小于10,000个单词,采用了词嵌入能够带来更好的效果,尤其是只有很小的训练集时.
该算法实际上会把所有单词的意思给平均.问题就是没考虑词序.”Completely lacking in good taste, good service, and good ambiance.”,忽略词序,仅仅把所有单词的词嵌入加起来或者平均下来,分类器很可能认为这是一个好的评论.
词嵌入除偏
根据训练模型所使用的文本,词嵌入能够反映出性别、种族、年龄、性取向等其他方面的偏见,如Man对应Computer Programmer,那么Woman会对应?输出是Homemaker.
- 偏差求平均
- 中和.对于那些定义不确切的词可以将其处理一下,避免偏见.如doctor和babysitter想使之在性别方面是中立的,而girl、boy定义本身就含有性别
- 均衡步.防止又引入其他偏差.
论文作者训练一个分类器尝试解决哪些词是中立的.
序列模型和注意力机制
基础模型
- 机器翻译到语音识别:seq2seq模型(Encoder-Decoder结构)
- 集束搜索(Beam search)和注意力模型(Attention Model)
- 音频模型
选择最可能的句子
机器翻译模型可以看作是条件语言模型,因为语言模型总是全0输入,随机地生成句子,机器翻译模型需要找到最可能的翻译,提供不同的输入(Encoder),目的是选择使句子出现可能性最大(Decoder),选择方法如Beam search,为什么不用贪心每次选择概率最大的一个词呢?这并不是最佳选择.
集束搜索
当B=3时表示每次只考虑三个可能结果,B=1即为贪心
- 在第一次词位置选出最可能的三个单词$y^{<1>}$
- 在第一步基础上计算最可能的三个单词对$P(y^{<1>},y^{<2>}|x)$
- 继续增加下一个单词重复上述步骤
改进集束搜索
最大化
$P(y^{< 1 >}\ldots y^{< T_{y}>}|X)$=$P(y^{<1>}|X)$*$P(y^{< 2 >}|X,y^{< 1 >})$*$P(y^{< 3 >}|X,y^{< 1\ >},y^{< 2>})\ldots$$P(y^{< T_{y}\ >}|X,y^{<1\ >}\ldots y^{< T_{y} - 1\ >})$
- 改成最大化$logP(y|x)$,能防止数值下溢
- 原公式倾向于长度短小的翻译结果,因此可以长度归一化(除$T_{y}$)
定向搜索的误差分析
对结果将人工翻译和模型翻译对比,对比RNN模型出错率和集束搜索出错率,优化
Bleu 得分
这个例子中$p_{1}=5/7 p_{2}=4/6$,最后计算Bleu会在不同n-gram上取平均,但这样会侧重较短语句,因此会加上一个 BP(brevity penalty) 的惩罚因子.这给了机器翻译领域一个单一实数评估指标.
Attention 模型
语音识别
略,没看懂
触发字检测
把一个音频片段计算出它的声谱图特征得到特征向量