1. 序列模型能解决哪些问题
如语音识别、生成音乐、情感分类(如将对电影的评价转换为星级)、DNA序列检测(是不是某种蛋白质)、机器翻译、视频动作识别、姓名识别等。
2. 符号定义
输入:x,第一个单词x<1>等等,输出:y 第i个结果:y<i>。Tx代表输入的长度(有几个词),x/y中的t是某个时间点的意思。
要识别某个词,首先要有一个字典,然后将语句中的词语映射成one-hot形式:(一般商用词典大小都在30,000以上)
对于不在字典里的单词一般可以统一定为UNK
3. 循环神经网络(RNN)
为什么不用标准神经网络?
存在两个缺陷:
1)不同的例子中输入输出可以使不同的长度,很难控制
2)不能共享在不同位置学到的特征
左右都是RNN的结构表示,这里倾向于使用左边的,更清晰。
输入的a<0>是零向量。该网络可以使用之前的预测y,但是有缺点:不能使用之后的词。解决:使用BRNN。
如何计算a<t>、yhat<t>:
可以将Waa和Wax合起来减少参数数量:
4. 穿越时间的反向传播
5. 不同类型的RNN
第一种,输入与输出都很多Tx=Ty(多对多结构 many to many,一种特别的是机器翻译,Tx!=Ty),第二种,很多的输入,一种输出(多对一结构 many to one),第三种,一个输入多种输出(one to many 如生产一段音乐)
6. 语言模型和序列生成
什么是语言模型:同样的发音生成两句话,语言模型判断每个句子出现的概率是多少,以此来选择正确的句子。
句子末尾可以用EOS(end of sentence)代表一句话结束,也可以用句号“.”
RNN的模型会预测句子第一个词出现的概率,预测在第一个词是确定的某词后第二个词出现的概率......损失函数如下
7. 对新序列采样
能知道序列学会了什么的方法:
采样:将a0输入后得到的yhat<1>作为x<2>输入到下一个层,就能看到各种位置可能的词语。
在特定领域应用(如用莎士比亚的风格写东西):
8. RNN中的梯度消失
在RNN中遇到梯度爆炸会出现很多的NaN,很好发现,使用梯度修剪就可以增强它的鲁棒性,但是梯度消失不好发现。
在很深的网络中,最后的反向传播很难影响到最前面的参数,导致记住很前面的单复数很难(见例子)
如何解决:GRU
9. GRU单元(门控制单元)
首先看一下普通的RNN单元:
简化的GRU
使用tanh是因为大部分情况下它的值都是0或者1。
门记录下某个状态,在需要更新的时候才更新。输出也变成了c和伽玛的表达式
10.LSTM(长短期记忆)
对比:
11. 双向RNN
如何确定Teddy是人名还是玩具:
使用双向的RNN来获得之前和之后的词语,加以判断
12. deep RNNs
像一般的网络结构一样,不过横向有很多单元,不会很深,因为计算量很大,但是会见到某部分深的情况(笔画的)