RNN循环神经网络是有其弊端的,例如有这样一段话我们需要处理:
今天我要做西红柿鸡蛋,我需要先去市场买两个西红柿,再买两个鸡蛋,回家之后,切西红柿,点火,放锅……
我们需要让计算机判断我们做了一道什么菜,使用RNN,误差在时间序列上不断的累加,可能忘记了最开始的“西红柿鸡蛋”这个事啦。
再来看看 RNN是怎样学习的吧. 西红柿鸡蛋这个信息原的记忆要进过长途跋涉才能抵达最后一个时间点. 然后我们得到误差, 而且在 反向传递 得到的误差的时候, 他在每一步都会 乘以一个自己的参数 W. 如果这个 W 是一个小于1 的数, 比如0.9. 这个0.9 不断乘以误差, 误差传到初始时间点也会是一个接近于零的数, 所以对于初始时刻, 误差相当于就消失了. 我们把这个问题叫做梯度消失或者梯度弥散 Gradient vanishing. 反之如果 W 是一个大于1 的数, 比如1.1 不断累乘, 则到最后变成了无穷大的数, RNN被这无穷大的数撑死了, 这种情况我们叫做剃度爆炸, Gradient exploding. 这就是普通 RNN 没有办法回忆起久远记忆的原因.