大家好,我是小轩
在上一篇文章学了又忘又学的RNN(一)中回顾了什么是RNN,以及RNN和普通神经网络有什么不一样
RNN解决了普通神经网络不能够将多个输入数据进行关联的问题,也就是解决了训练序列化数据时候遇到的问题
序列化数据在生活中非常常见,比如一段语音、一段文字等等
上一篇文章中也说了RNN为什么具有记忆功能
由RNN结构可知,看下面这幅图,RNN在每个时间都会将前一步计算好的值传递给当前步
但是RNN也存在一些问题
一般形式的RNN面对过于长的文字,会出现“遗忘”的情况,就是没有回忆起很早之前的记忆
比如:"我今天要学习机器学习,我先看第七章内容贝叶斯分类器,然后看第八章内容集成学习......最后看第十三章半监督学习..."
RNN最后预测的结果有可能不是“机器学习”,所以RNN就要开始学习这段长序列和“机器学习”之间的关系,但“机器学习”这个关键字却出现在句子开头
为了知道RNN为什么会出现这种情况,所以现在看看RNN是怎样学习的
上面那段文字中机器学习这个信息源记忆需要通过层层计算,才能到达最后
在反向传播时候,在每一层都会乘一个参数
这时候就会出现两种情况
w*大于1时候,梯度爆炸,反向传播时候不断乘w*参数,误差传到初始位置时候就会是一个无穷大的数
w*小于1时候,梯度下降,反向传播时候不断乘w*参数,误差传到初始位置时候也会是一个接近为0的数,所以对于初始时刻误差就相当于消失了
说了半天终于说到这篇文章的主角了——LSTM RNN
比普通RNN多了三个控制器:输入控制、输出控制、忘记控制
LSTM RNN的核心思想,就是有一个控制全局的记忆
比如上面这张图中,颜色较深的那条箭头(贯穿LSTM整个过程),我们把这个称为主线部分
我们把上面这张图的下面输入、忘记、输出称为分线部分
如果此时输入部分对整个计算比较重要,输入就会通过输入控制按重要程度加入到主线部分再进行计算分析
如果此时改变了对之前预测分析的结果,忘记控制就会将之前某些主线部分忘记,就是按比例重新计算
所以主线部分的计算主要取决于输入和忘记这两个控制
输出部分会基于主线部分和分线部分判断要输出什么结果
我们现在来看一下网上的LSTM RNN这幅图就不难理解了,这里只截取了其中的一层
图中标注了1、2、3,分别表示上文介绍的输入、遗忘、输出控制
END