Python人工智能深度学习RNN模型结构流程
1.RNN基础模型
RNN主要特点是,在DNN隐藏层的输出内容会被存储,并且可以作为输入给到下一个神经元。
如下图所示,当“台北”这个词被输入的时候,前面的词有可能是“离开“,有可能是”到达“,如果把上一次输入的”离开“,所得的隐藏层内容,输入给下一层,这样就有可能区分开是”离开台北“,还是”到达台北“。
如果隐藏层存储的内容并给下次使用,叫做Elman Network
如果最终的输出内容给下次使用,叫做Jordan Network
双向RNN:从正向输入的内容,得到的存储内容,以及反向输入内容得到的存储内容,同时输入给模型。
2.LSTM
Long Short-term Memory,其实当人们说到使用RNN的时候,通常都是使用的LSTM。对于LSTM的每一个单元,除了输入的数据之外,还有另外三个“门”来控制输入,输出,存储。如下图所示,如此一来,每一个LSTM单元共有4个输入,以及1个输出。
这些控制的门都是向量,并且输入之后都需要进行一个sigmoid函数转换,因此输入和门进行计算之后,得到的输出是位于0-1之间的数据,这样就可以实现对输入、输出、存储与否的把控。而门的参数都需要由RNN学习得到。
3.流程结构
如下图,假如输入的是z,经过函数转换,得到g(z),输入门的数据z(i),经过一个sigmoid函数转换,将其相乘,得到g(z) * f(z(i))
同样的,当控制存储数的门得到的结果是1的时候,那么以前的数据就会和1相乘,并于前面算的结果相加,这样就实现了对上次存储数据的利用。是0的时候就会删除上次的数据,实现存储数据的格式化。
最终得到的输出是h(c),但如果输出门输入z0后计算的结果是0,则该输出就无法输出,是1的时候才可以输出。
LSTM和DNN的区别,就是把神经元换成了LSTM单元,输入的数据乘上权重之后,来控制各个门。因此参数变成平常DNN参数的4倍。
将整个流程简化来表示,如下。
实际中,LSTM不只是一个,它是多个组合,并且每一个的输出,以及存储的内容也会添加到下一次的输入当中。如下图所示:
以上便是LSTM的整体结构。