RNN用于处理序列类型的数据,比如语音,文字。这类数据的最大特点,是后面的信息,与之前的信息有关。比如一句话,每一个字如果是之前信息的函数,那不可能只是前一个字的函数,而是之前很多个字的函数。
之前将神经元简化为输入的函数,这样的神经元无法包含前序的信息,因此在RNN中,神经元的结构大致为:
每一个单元的输入,除了原来的数据输入之外,还有上一个单元的输出,也要同时作为输入
如果用RNN处理What time is it ?
这句话,那处理过程是这样的:
当输入为what
时,输出为01
,当再输入一个is
时,结合上一个what
的输出,会得到输出02
,这样反复执行下去,最后一个?
就包含了之前所有的信息,这时候可以得到结果05
RNN对之前所有的数据都不加区分地统一作为输入,这样无法反应之前数据不同的重要性。LSTM在一定程度上解决了这个问题。
LSTM的每一个单元,除了类似RNN的一个输入之外,另外还有一个输入。这两个输入其中一个受较近的前序数据影响(变化较快),另一个受较远的前序数据影响(变化较慢)。