在本文中,我们将对循环神经网络(RNN)进行简要的概述。循环神经网络只有一层,但是它有“记忆”功能,是分析序列数据的强大工具。现在让我们看看RNN是如何工作的。首先,输入数据流入模型的单层。数据的处理方式以与传统神经网络的数据处理方式相同,但是RNN不仅能接收输入,还能够接受当前的状态。如果这是第一个数据点,RNN则根据要被分析的数据选择要使用的某种形式的“初试状态”。
在这个过程后,RNN将输出表示最近点的新状态,这个新状态然后随着下一个输入数据被输入到网络,如此循环。我们重复这些过程,直到所有数据都被处理完为止。
请记住,由于每个步骤的状态都在发生变化,所以即使是每次输如相同的数据,可能输出结果也不一样。这就是使得循环神经网络能够进行序列数据分析。循环神经网络在处理序列数据方面有着广泛的应用。比如给图像添加字幕。Andrej Karpathy李飞飞创建了一个能够理解图像元素的模型。这个模型能够将单词分配给这些元素,然后将这些单词串起来,就形成了描述图像的字幕。另一个例子就是用于音乐写作。我们可以使用MIDI文件来训练网络,MIDI是数字音频的标准文件。在网络学习到了音乐节奏和旋律模式之后,网络能够输出可以被转换成MIDI格式的数据,这就创造了新的音乐。当然,这仅仅是两个例子,循环神经网络的变体模型正在继续解决更加复杂的问题。尽管RNN具有很多明显的优势,但是它也并非完美的模型。一方面,它能够记录序列化的数据,但如果数据太多,这将会带来计算问题,计算成本太高。
解决这个问题的一个折中的办法就是在时间窗口中仅仅存储一部分当前状态。另一方面,RNN对参数变化特别敏感,因此,梯度下降优化算法可能难以训练RNN。这可能会使RNN面临着“梯度消失”的问题,这时,梯度接近于,使训练接近停止;也可能面临着“梯度爆炸"问题,梯度呈指数级增长最后接近无穷大。在这两种情况下,模型的学习能力都会降低。当然,现在你应该对RNN有一个比较直观的理解了。