文章目录
- Learning Target
- Learning
- Unfortunately
- Helpful Techniques
- Long Short-term Memory(LSTM)
- GRU简介
- More Applications……
- 输入和输出都是一个向量序列
- 输入一个向量序列,输出是一个向量,多对一
- 输入和输出都是向量序列,但是输出更短,多对多
- 输入和输出都是向量序列,向量长度不同,多对多,sequence to sequence learning
- Beyond Sequence
- Syntactic parsing 句法分析
- Sequence-to-sequence Auto-encoder-Text
- Sequence-to-sequence Auto-encoder-Speech
- Demo:Chat-bot
- Attention-based Model
- RNN vs Structured Learning
- Integrated Together
- Is structured learning practical?
Learning Target
Learning
RNN是也用梯度下降训练的,有一套新的算法,Backpropagation through time,在high sequence上做运算,所以BPTT要考虑时间的信息。
Unfortunately
基于RNN的的网络不总是容易去学习
The error surface is rough.
要不很扁平要不很陡峭
在悬崖上的gradient很大,但是之前的gradient很小learning rate很大,所以现在很大的gradient乘以很大的learning rate,导致参数update很大,起飞。
解决方法——clipping
设置一个阈值,高于这个阈值的值就都设置为这个阈值。
Why?为什么不好训练
举个例子
梯度爆炸,梯度消失
RNN的训练问题来自于,把同样的东西反复使用,w的改变可能会几乎没有影响(上图下面的情况),有影响的话就会是很严重的影响。(上图上面的情况)。
RNN不好训练的原因不在于**函数,而是来自于他有high sequence,同样的weight在不同的时间点被反复地使用。
Helpful Techniques
Long Short-term Memory(LSTM)
LSTM可以让error surface不那么崎岖,可以把那些平坦的地方去除。
LSTM可以解决梯度消失的问题,但是不能解决梯度爆炸的问题。
在使用LSTM的时候,大部分地方都是变化很剧烈地,所以需要把learning rate设置的很小,进行训练。
关键点:用lstm overfitting严重,可以尝试改用GRU
GRU简介
GRU只有两个gate,需要参数量变少,所以在训练的时候比较鲁棒。 在用lstm overfitting严重,可以尝试改用GRU,GRU的精神是旧的不去新的不来,把input gate和forget gate联系起来,当input gate打开的时候,forge gate会关闭,洗掉内存中的值,只有把内存中的值清除掉,才能存入新的值。
当用一般RNN的网络时候,用单位矩阵初始化transition matrix weight转换矩阵的权重,再使用ReLU的**函数的时候,可以得到很好的效果。
一般的训练方法,初始化weight是random的时候,ReLU与sigmoid相比,sigmoid的效果会更好,但是如果用单位矩阵初始化transition matrix weight转换矩阵的权重的情况下,使用ReLU效果更好。
当用了上述方法,使用普通RNN,他的performance就可以吊打原来的LSTM,玄学。。。
More Applications……
输入和输出都是一个向量序列
输入一个向量序列,输出是一个向量,多对一
情绪分析
输入和输出都是向量序列,但是输出更短,多对多
语音辨识
Trimming:把重复的东西删掉
CTC
CTC:Training
枚举,把所有可能的都假设做正确的。
CTC:Example
输入和输出都是向量序列,向量长度不同,多对多,sequence to sequence learning
推出一个断就停止
这样减少中间转换,会较少误差传播
Beyond Sequence
Syntactic parsing 句法分析
给machine一个句子,得到这个句子的文法树
Sequence-to-sequence Auto-encoder-Text
为了理解一个词项序列的含义,词的顺序很重要,而不可以简单使用bag of word
所以我们需要使用Sequence-to-sequence Auto-encoder的做法,来在考虑词项序列顺序的情况下,使一个document变成一个vector。
输入一个词项序列,通过一个RNN把他变成一个embedding的vector,再把这个embedding的vector作为decoder的输入,找回一个一模一样的句子。
如果RNN做到了这个事情,那么这个encoding的vector就代表了输入的词项序列的重要的信息。
Sequence-to-sequence Auto-encoder-Speech
把一段音频序列变成一个定长的向量。
具体用途
最后一个时间点存在内存里的值,代表了整个输入音频信号的信息。
只有一个RNN encoder没办法训练,我们还需要一个RNN decoder来把encoder存在内存中的值来当作输入,产生一个序列,希望y1和x1越接近越好,再依次产生y2,y3。。。
RNN的encoder和decoder是同时训练的。单独是无法训练的。
Demo:Chat-bot
Attention-based Model
根据一个问题,搜集组织记忆里的信息,得到一个回答
把输入传给一个中央处理器(DNN/RNN),中央处理器操控一个读控制头,读控制头来控制Reading Head的位置,读取内容,传给中央处理器,得到输出。
V2.0比前面的多一个Writing Head Controller,功能类似
Attention-based Model的应用
阅读理解
蓝色是reading head的位置,可以看到机器处理的思路过程
Visual Question Answer
Speech Question Answering
Mode Architecture
RNN vs Structured Learning
Integrated Together
输入先通过RNN,LSTM,输出再作为HMM,CRF的输入。。。渐渐地听不懂了,,,
Is structured learning practical?
后面就没怎么听懂了QAQ
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【李宏毅机器学习】Recurrent Neural Network Part2 循环神经网络(p21) 学习笔记 - Python技术站