一/为什么需要循环神经网络
普通的神经网络:输入->网络结构->输出 数据都是固定的数据,不是变长。(例如文本)
循环神经网络———序列式问题:
1。一对多问题:图片生成描述,给定一张图片,生成一个描述(文本),文本是不定长的
2。多对一问题:文本分类(文本情感分析),输入不定长
3。多对多问题:机器翻译,非实时翻译。需要写完需要翻译的文本。
视频解说翻译,实时翻译
二/循环神经网络
网络结构
多了一个自我指向的路径,表达了:输入可能是多个,需要保存一个中间状态,中间状态可以了解之前的情况。
维护一个状态作为下一步的额外输入,每一步使用同样的激活函数和参数,半数共享。
维护的中间状态值表示函数,由上一步的状态和当前的输入做一个拼接。
反向传播时,用Tanh输出在-1和1之间容易梯度消失,当序列长的时候。较远的步骤梯度贡献很小。
如果用了其他函数,每一步的梯度会累积放大,会导致梯度爆炸。
损失函数的计算,每一步的损失函数之和。把整个序列分批计算梯度。这些都是基于单层网络。
三/多层网络
底层输出作为高层输入
同层之间依旧递归
增加网络的拟合能力
一般隐层维数递增
四/LSTM
长短期记忆网络
普通的RNN的信息不能长久传播(存在于理论上)
引入选择性机制
选择性输出
选择性输入
选择性遗忘
选择性机制的实现:用门的方式 Sigmoid函数:[0,1]