李宏毅《机器学习》第36-37讲 循环神经网络

循环神经网络RNN

RNN有记忆,即使input一样,输出值也会因store内容不一样而不一样,store每次循环的时候都会叠加以前的hidden layer的output


rnn输出值因store不一样
RNN存储机制

RNN分为Elman和Jordan这两种,其中Elman存储hidden layer的output,后者存储单次网络整个的output。


Elman和Jordan

Bidirectional RNN
正向逆向都train,把正向和逆向的hidden layer的output都丢给yt


双向RNN

LSTM

给memory cell设置input gate和output gate去把控memory cell的输入和输出(个人理解相当于多了2个把门的保安)。还有一个forget gate,来决定什么时候把存在memory里的值忘记,这些都是model自己学的。


LSTM memory cell
Multiply
LSTM Example
LSTM计算

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。


LSTM机制1

Input到每一个cell的值是每个vector z的一个dimension,运算的时候4个z multiply。


LSTM机制2

接入下一次运算的时候还会把hidden layer的output一起传过去。


LSTM机制3

还不止,还会加peephole,就是存在memory里的值也拉过来。


LSTM机制4

LSTM训练

也是梯度下降,算法叫BPTT


BPTT

RNN训练曲线比较震荡


RNN训练曲线

为什么?RNNError surface比较陡峭


RNN Error Surface

RNN创始人的解决办法是设置clipping,就是gradient小于等于15。

RNN为什么难训练?

因为它有time sequence,同样的信息在不同的时间点被反复使用。

LSTM可以让Error surface不那么崎岖,因为它会帮助handle 梯度消失gradient vanish的问题,可以避免让gradient特别小。所以训练LSTM可以把learning rate调小一点。

为什么?


Why
  • Memory and input are added.
  • The influence never disappears unless forget gate is closed. —> No Gradient vanishing (If forget gate is opened.)


    LSTM handle gradient vanish

    所以有一个理论是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


Sentiment analysis

Key term extraction


Key term extraction

Many to Many (Output is shorter)

Speech recognition
传统RNN只能输出好棒,不能输出好棒棒


Speech recognition

怎么办?要用一招叫CTC。


CTC

CTC怎么做training?
穷举一切可能。


CTC traning

CTC例子


CTC example

Sequence to Sequence

RNN做翻译,会不知道怎么停止。


No limitation

怎么停下来?可以多加一个symbol让它断


Add a symbol

英文的声音讯号可不可以直接出来中文翻译的文字?


Machine Translation

Beyond Sequence


Syntactic parsing

Sequence-to-sequence

Auto-encoder - Text


文义辨识

input一个word sequence,通过一个recurrent network把它变成一个embadding的vector。再把这个vector当初encode的输入,再让这个decoder返回一个一摸一样的句子。就是说不需要label标注。
这个结构甚至可以hierarchical的。就是多个句子组成一个encoder。


文义辨识hierarchical

也可以用在语音上。

Sequence-to-sequence

Auto-encoder - Speech


语义辨识

还可以做语音搜索
先把语音切成一段一段,再用audio segment to vector的技术变成一个一个vector,再把提问变成一个vector,再去做比对。


语音搜索

怎么把audio segment 变成vector?
做法是先把audio segment抽成ascoustic features,然后丢到RNN Encoder里面去,最后一个时间点的值就代表了整个input的声音讯号,就是我们想要的vector。


Segment to vector

还需要train一个decoder,就是把Encoder存在memory里的值作为自己的input,当成ascoustic features,训练的target就是decoder的输出y1-y4跟x1-x4越接近越好。
RNN Encoder和Decoder是一起train的。


Auto-encoder
可视化embadding

Chat-bot

搜集对话data然后让LSTM auto-encoder去学。


聊天机器人

Attention-based Model 进阶版

Attention-based Model

Input先传进一个DNN/RNN的处理器里,这个处理器会操控一个读写头,就是Reading Head Controller,这个controller会去决定reading head放在database的位置。处理器再去Reading head里去读取information出来,再输出至output。


Reading Head Controller

这个model还有一个v2版本,就是增加一个writing head controller,处理器通过这个controller把information写进database里。这个就是大名鼎鼎的Neural Turing Machine。


Writing Head Controller

Attention-based Model应用——Reading Comprehension

就是把一堆document通过semantic analysis变成一堆vector,然后输入一个query给处理器,处理器控制Reading Head Controller,去决定现在databse里哪些句子跟现在的query相关。会从不止一个地方提取信息,最终输出成一个答案。


Reading Comprehension

一个Q&A test


Q&A test

Visual Question Answering

Visual Question Answering

怎么做呢?
输入一张图,经CNN处理,图上每一小块变成一个vector,然后输入一个query给中央处理器,处理器控制Reading Head Controller,去决定在图片上信息读取的位置。


A vector for each region

Speech Question Answering

Speech Question Answering

先让machine读一下question,把它做语义分析,再读取语音做语义分析,然后再做一个attention去决定在这段语音里哪些是跟回答问题有关。再输出答案,再在选项里选相似度最高的。


Model Architecture

一个实验


Proposed Approach

一些ref


To learn More

RNN v.s. Structured Learning

RNN和Structured Learning都可以做sequence的学习,那哪个更强?


RNN v.s. Structured Learning

整体说来RNN更强。两者也能结合起来。

RNN + Structured Learning

RNN+Structured

Speech Recognition

Semantic Tagging

Is structured learning practical?
这一段没看懂,因为还没有看结构化学习的部分


Considering GAN
Conditional GAN

未来研究方向是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。

b站学习链接:https://www.bilibili.com/video/BV1Ht411g7Ef?p=36

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容