1.1 为什么选择序列模型
应用广泛:语音识别,处理情感分类,机器翻译等
1.2 数学符号Notation
Tx,Ty ,xit,yit
在一个序列中如何表示单词?
one-hot:因为它只有一个值是 1,其余值都是 0的向量。
1.3 循环神经网络模型 Recurrent Neural Network
从左到右计算,但是有一个缺点,就是计算y帽3的时候 无法使用x4,x5,x6...,只能依靠x1.x2.x3。这就有很大的局限性。
RNN的前向传播,a0定义为全0向量。
简化RNN的符号
注意下图中的矩阵维度,这么做好处就是把Waa,Wax两个矩阵合并成了Wa一个矩阵。
1.4 通过时间的反向传播
1.5 不同类型的RNNs
1.6 语言模型和序列生成
如何构建一个语言模型?
1.有一个训练集和字典
2.把各个单词映射成一个一位矢量
3.标记句子的结束的标记 EOS
4. UNK,字典里没有但是训练集有的单词 就标记为UNK
三个单词组成三个句子的概率公式=三步算出来的概率的乘积
1.7 对新序列的采样
利用我们的单词库,vocabulary来通过采样函数a<1>...a<t>来生成一段文字。最终采样函数计算出EOS的时候,表示采样结束。这段文字结束。
1.8 RNN的梯度消失
梯度消失导致 深层的RNN网络,后面的输出很难感受到前面的输入,这是因为不管输出是什么,不管是对的,还是错的,这个区域都很难 反向传播到序列的前面部分,也因此网络很难调整序列前面的计算。
反向传播梯度爆炸解决方法:
1.9 门控循环单元GRU
主要用于解决梯度衰减问题,帮忙更好的解决长距离传播问题。
总结一句话就是,从左向右扫描句子的时候,可以决定何时更新一个特定的内存单元,可以一直保持不变,直到我们要更新他的时候,即使这是一个在句子比较早的时候设置的值,也可以从记忆单元里取出。(比如cat的was 尽管经历了很久 也可以根据cat 来判断用was 而不是用were)
1.10 长短期记忆 LSTM
更新门 遗忘门 输出门。三个门控。GRU只有两个门控
GRU和LSTM都可以解决RNN梯度消失的问题,具体使用还要看场景自己积累经验。GRU相对简单,并且容易扩展。
1.11 双向RNN (BRNN)
单向RNN的问题:只能根据左边的词来对下一个词进行推断,无法利用右边的词儿来推断中间词的含义。比如为了推断y3 只依靠前三个词不够。
对于很多NLP问题,带有LSTM的双向RNN非常好用