循环神经网络
循环神经网络的基本结构
通俗讲,循环神经网络的结构就是将网络的输出保存在一个记忆单元中,这个记忆单元和下一次的输入一起进入神经网络中。使用一个简单的两层网络示范,如下图:图中,我们可以看到网络在输入的时候会联合记忆单元一起作为输入,其中,网络不仅输出结果,还会将结果保存到记忆单元中。上图就是一个最简单的循环神经网络在一次输入时的结构示意图。可以发现,输入序列的顺序改变,网络输出的结果也会随之改变,这是因为记忆单元的存在,使得两个序列在顺序改变之后记忆单元中的元素也改变了,所以会影响最终的输出结果。
上面是序列中一个数据点传入网络的示意图,整个序列只需将每个数据点依次传入网络即可,如下图所示:无论序列多长,都能不断输入网络,最终得到结果。这里网络使用了参数共享的概念,网络的输出依赖于输入和记忆单元。如下图所示:图中左边就是循环神经网络实际的网络流,右边是将其展开的结果,可以看到网络中具有循环结构,这也是循环神经网络名字的由来。同时根据循环神经网络的结构也可以看出它在处理序列类型的数据上具有天然的优势,因为网络本身就是一个序列结构,这也是所有循环神经网络最本质的结构。
上述网络都是单方向的,这代表网络只能知道单侧的信息,有时候序列的信息不只是单边有用,双边的信息对预测结果也很重要,比如语音信号,这时候就需要看到两侧信息的循环神经网络结构。我们并不需要用两个循环神经网络分别从左右两边开始读取序列输入,只使用一个双向的循环神经网络就可以解决,如下图所示:
图中,网络会先从序列的正方向读取数据,再从反方向读取数据,最后将网络输出的两种结果合在一起形成网络的最终输出结果。
存在的问题
记忆最大的问题在于它有遗忘性,我们总是更加清楚地记得最近发生发生的事情而遗忘很久之前发生的事情,循环神经网络同样具有这样的问题。如果一项任务需要依赖近期的信息来预测结果,循环神经网络往往具有比较好的表现,比如给出”我住在中国,我会讲中文“,使用循环神经网络就能够依据前面内容中的”中国“来预测后面的”中文“,循环神经网络能够很好地解决这种短时依赖地问题。但是对于长时依赖地问题,循环神经网络的表现就不再那么尽如人意了。比如将”我住在中国“放在一篇文章的开头,希望循环神经网络在文章的末尾能够预测”我会讲中文“,由于记忆的信息和预测位置之间的跨度太大,循环神经网络不能记忆这么长时间的信息,就不能很好地预测这个结果。
这些问题导致循环神经网络在实际应用上一直没办法取得很好地效果,从理论上说,循环神经网络是完全能够解决这种长时依赖问题的,可以针对具体的问题,人为挑选一些特定的参数来解决,但这并不具有普适性,因为循环神经网络没有办法自己决定该挑选哪些参数。后面介绍目前循环神经网络最为流行的两种结构:
L
S
T
M
LSTM
LSTM和
G
R
U
GRU
GRU,解决了长时依赖的问题。