循环神经网络RNN
RNN有记忆,即使input一样,输出值也会因store内容不一样而不一样,store每次循环的时候都会叠加以前的hidden layer的output
RNN分为Elman和Jordan这两种,其中Elman存储hidden layer的output,后者存储单次网络整个的output。
Bidirectional RNN
正向逆向都train,把正向和逆向的hidden layer的output都丢给yt
LSTM
给memory cell设置input gate和output gate去把控memory cell的输入和输出(个人理解相当于多了2个把门的保安)。还有一个forget gate,来决定什么时候把存在memory里的值忘记,这些都是model自己学的。
LSTM机制
Ct-1是一个vector,xt是它在时间t的input,xt乘以一个transform以后得到z,z的每一个维度代表一个memory cell的input。xt再乘以另一个transform得到zi,zi操控每一个memory cell的input gate,再乘一个transform,得到zf操控forget gate,再一个zo操控output gate。
Input到每一个cell的值是每个vector z的一个dimension,运算的时候4个z multiply。
接入下一次运算的时候还会把hidden layer的output一起传过去。
还不止,还会加peephole,就是存在memory里的值也拉过来。
LSTM训练
也是梯度下降,算法叫BPTT
RNN训练曲线比较震荡
为什么?RNNError surface比较陡峭
RNN创始人的解决办法是设置clipping,就是gradient小于等于15。
RNN为什么难训练?
因为它有time sequence,同样的信息在不同的时间点被反复使用。
LSTM可以让Error surface不那么崎岖,因为它会帮助handle 梯度消失gradient vanish的问题,可以避免让gradient特别小。所以训练LSTM可以把learning rate调小一点。
为什么?
- Memory and input are added.
-
The influence never disappears unless forget gate is closed. —> No Gradient vanishing (If forget gate is opened.)
所以有一个理论是LSTM的forget gate不要给它太大的bias,可以确保forget gate在大多数情况不是关闭状态(就是不forget)。
GRU比LSTM少一个gate,它把input gate和forget gate联动,所以可以少一些参数,如果overfit可以试一下GRU。
还有一些其他防抖技术
有个神奇的paper讲RNN用identity matrix+ReLU的激活表现会比一般LSTM(用sigmoid激活)的效果好。
更多应用
Many to one
Sentiment analysis
Key term extraction
Many to Many (Output is shorter)
Speech recognition
传统RNN只能输出好棒,不能输出好棒棒
怎么办?要用一招叫CTC。
CTC怎么做training?
穷举一切可能。
CTC例子
Sequence to Sequence
RNN做翻译,会不知道怎么停止。
怎么停下来?可以多加一个symbol让它断
英文的声音讯号可不可以直接出来中文翻译的文字?
Beyond Sequence
Sequence-to-sequence
Auto-encoder - Text
input一个word sequence,通过一个recurrent network把它变成一个embadding的vector。再把这个vector当初encode的输入,再让这个decoder返回一个一摸一样的句子。就是说不需要label标注。
这个结构甚至可以hierarchical的。就是多个句子组成一个encoder。
也可以用在语音上。
Sequence-to-sequence
Auto-encoder - Speech
还可以做语音搜索
先把语音切成一段一段,再用audio segment to vector的技术变成一个一个vector,再把提问变成一个vector,再去做比对。
怎么把audio segment 变成vector?
做法是先把audio segment抽成ascoustic features,然后丢到RNN Encoder里面去,最后一个时间点的值就代表了整个input的声音讯号,就是我们想要的vector。
还需要train一个decoder,就是把Encoder存在memory里的值作为自己的input,当成ascoustic features,训练的target就是decoder的输出y1-y4跟x1-x4越接近越好。
RNN Encoder和Decoder是一起train的。
Chat-bot
搜集对话data然后让LSTM auto-encoder去学。
Attention-based Model 进阶版
Input先传进一个DNN/RNN的处理器里,这个处理器会操控一个读写头,就是Reading Head Controller,这个controller会去决定reading head放在database的位置。处理器再去Reading head里去读取information出来,再输出至output。
这个model还有一个v2版本,就是增加一个writing head controller,处理器通过这个controller把information写进database里。这个就是大名鼎鼎的Neural Turing Machine。
Attention-based Model应用——Reading Comprehension
就是把一堆document通过semantic analysis变成一堆vector,然后输入一个query给处理器,处理器控制Reading Head Controller,去决定现在databse里哪些句子跟现在的query相关。会从不止一个地方提取信息,最终输出成一个答案。
一个Q&A test
Visual Question Answering
怎么做呢?
输入一张图,经CNN处理,图上每一小块变成一个vector,然后输入一个query给中央处理器,处理器控制Reading Head Controller,去决定在图片上信息读取的位置。
Speech Question Answering
先让machine读一下question,把它做语义分析,再读取语音做语义分析,然后再做一个attention去决定在这段语音里哪些是跟回答问题有关。再输出答案,再在选项里选相似度最高的。
一个实验
一些ref
RNN v.s. Structured Learning
RNN和Structured Learning都可以做sequence的学习,那哪个更强?
整体说来RNN更强。两者也能结合起来。
RNN + Structured Learning
Is structured learning practical?
这一段没看懂,因为还没有看结构化学习的部分
未来研究方向是Deep+Structured
总结:RNN有记忆,即使input一样,输出值也会因memory cell内容不一样而不一样,memory cell每次循环的时候都会叠加以前的hidden layer的output。LSTM可以让Error surface不那么崎岖,避免gradient过小,LSTM给memory cell设置input gate和output gate去把控memory cell的输入和输出,还有一个forget gate来决定什么时候忘记。RNN有很多应用,比如多对1(Sentiment analysis)或是多对多(Seq to Seq),Auto-encoder可以帮助LSTM做文义辨识或者语义辨识,高阶版本是attention-based,就是有一个DNN/RNN的中央处理器去控制reading甚至是writing head(划重点),这种attention-based可以解决Q&A或者阅读理解这一类复杂问题,RNN比结构化学习强,因为可以做deep,未来方向是Deep+Structured。