Chapter5-从卷积到循环神经网络
前馈网络 无法处理序列问题
假设每次输入都是独立的,也就是说每次网络的输出只依赖于当前的输入。
连接存在层与层之间,每层的节点之间是无连接的。(无循环)
输入和输出的维数都是固定的,不能任意改变。无法处理变长的序列数据。
如何实现有记忆的模型呢
我们引入有限状态机,每个状态都是一个记忆
延时神经网络
引入延时器记忆,但是有数量限制k个
循环神经网络
循环神经网络通过使用带自反馈的神经元,能够处理任意长度的时序数据
图中显示,隐藏层输出ht是由前一个时刻的隐状态ht-1和输入xt决定的,同时将当前隐状态输出ht存入寄存器。
隐藏状态是一个压缩的记忆,试用的时候,x是真实输入,比如我,输入后,输出是爱,输出隐藏内容是“我”的概念。
第二个时间点,输入是上一时刻的输出“爱”,以及“我”的概念,输出是自然,输出隐藏内容是“我爱”的概念。
第三个时间点,输入是上一时刻的输出“自然”,以及“我爱”的概念,输出是EOS。
RNN的应用
序列分类输入是一个序列,输出是一个标签。
序列标注一个输入对应一个输出,比如标注主谓宾定状补
序列生成是输入一个序列,输出一个序列。
但是RNN有问题:
多步连乘存在爆炸和消失的问题
容易忘记早期的记忆
怎么办?
长程依赖问题
梯度爆炸:
在惩罚项·中添加一个权重参数
或者截断两侧的梯度
梯度消失:
只能改模型
LSTM(必考)
是一种框架
设计四层门控层
对于RNN只能存储一个隐藏变量 没有长期保留信息的通路
LSTM实现了长程依赖记忆路径
将信息专门放到橙色的链路
通过门控实现
这里ppt讲的非常好!
变体
输入门的量用1-遗忘门的量考虑
ht-1是要处理的 那么要遗忘的+要记忆的就一定等于1
或者每一次门控都要考虑记忆
☆ 考试:画流程图 公式应用
为什么LSTM能改善?
可以有选择的保留信息
GRU
历史信息哪些需要参与计算
哪些需要写入
再更新
总结
RNN应用
Encoder-Decoder Seq2Seq
编码器压缩元语句 然后decoder解码这个压缩语义 实现翻译 (GRU)
训练的时候不可以使用自回归 否则会一路错下去
在使用的时候才会使用自回归
但是这样的代价是如果在推理的时候遇到错误的上下文输入时,又会发生级联放大
反转 可以剪短路径依赖 比如i和我反转后依赖路径很短
注意力机制
seq2seq要求encoder全部压缩所有上下文后再翻译,越长压缩的损失越大
如果能离散化 让每个词拥有自己的记忆锚点 翻译的时候就可以准确对应一个词 而不是塞一大段上下文了 decoder每次可以去原文搜索最相关的词
模型不会强制规定一对一输出 而是允许所有encoder的隐藏状态参与输出 而是取所有上下文的权重和