从本质认识RNN到LSTM【附实例】
(一)说明
这里写一下RNN的相关公式推导,以及代码中RNN的理解,简单的说明本质问题,不再详细介绍RNN相关发展以及相关概念。有相关基础肯能会比较好懂。主要介绍RNN、LSTM并简单介绍其他RNN的变种。
(二)本质分析开始--RNN推导与理解
给出最直观理解RNN的图:
参数这里是共享的。
接下来是RNN的前向传播计算公式:
RNN时间序列的反向传播公式推导:
首先简化上面前向计算的公式:
反向传播公式推导,举一反三:
以上用公式推导了RNN的计算,接下来看不同情况下RNN的应用场景:
One to one : 传统文本分类
One to many: 英文释义
Many to one: 情感分析
Many to many: 机器翻译
Many to many(同步):文本序列标注
(三)深度学习的“著名”问题即引出LSTM
上述RNN计算会有一个深度学习中有名的问题:梯度消失或梯度爆炸。
在深度学习的非线性函数的不断嵌套使得参数的梯度在后边越来越小或越来越大,尤其是使用sigmoid函数,很显然的是sigmoid函数的导数最大也只是0.25的**值。具体可以推导一下。当参数值在后边越来越小或越来越大,RNN前边信息都很快被丢失。(还记得刚说过的sigmoid的0.25吧!)接下来看一下过程:
既然RNN对信息不能很好地记住,那么接下来就说说能记点东西的LSTM吧!
这里直接上我看过的书上的图吧:
(四)总结与实例
剩下其他RNN变种举一反三去认识即可,例如现在用的较多的GRU。
另外在写代码的时候要确定输入单元的数量,以及输入步长(序列)的数量,隐藏层的数量,输出层的数量,接下来的工作即用tensorflow搭模型即可。
提供一个字符级别RNN的例子:
-- Tensorflow版本
https://github.com/sherjilozair/char-rnn-tensorflow
--