RNN以及LSTM的介绍和公式梳理

                     

前言

好久没用正儿八经地写博客了,csdn居然也有了markdown的编辑器了,最近花了不少时间看RNN以及LSTM的论文,在组内『夜校』分享过了,再在这里总结一下发出来吧,按照我讲解的思路,理解RNN以及LSTM的算法流程并推导一遍应该是没有问题的。

RNN最近做出了很多非常漂亮的成果,比如Alex Graves的手写文字生成、名声大振的『根据图片生成描述文字』、输出类似训练语料的文字等应用,都让人感到非常神奇。这里就不细说这些应用了,我其实也没看过他们的paper,就知道用到了RNN和LSTM而已O(∩_∩)O

本文就假设你对传统的NN很熟悉了,不会的话参考http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial和我之前的文章http://blog.csdn.net/dark_scope/article/details/9421061学习一下~~

RNN(Recurrent Neural Network)

RNN以及LSTM的介绍和公式梳理
今天我这里讲到的RNN主要是上图这种结构的,即是Hidden Layer会有连向下一时间Hidden Layer的边,还有一种结构是Bidirectional Networks,也就是说会有来自下一时间的Hidden Layer传回来的边,但这不在我们今天的讨论范围内,讲完LSTM,如果你想推导一下Bidirectional Network,应该也是顺理成章的。为了方便推导和描述,我们后面都将左边简化为右边这样一个结构。

RNN和传统的多层感知机不同的就是跟时间沾上边了,下一时间(理解为step)会受本时间的影响,为了更好地说明这个东西,我们可以将网络按照时间进行展开:
RNN以及LSTM的介绍和公式梳理
主要的参数就是三部分:在RNN中每一个时间步骤用到的参数都是一样的,要理解清楚的是:一般来说,每一时间的输入和输出是不一样的,比如对于序列数据就是将序列项依次传入,每个序列项再对应不同的输出(比如下一个序列项),举个栗子(预测后面的状态):
RNN以及LSTM的介绍和公式梳理

BPTT(Back Propagation Through Time)算法

将RNN展开之后,似乎一切都很明了了,前向传播(Forward Propagation)就是依次按照时间的顺序计算一次就好了,反向传播(Back Propagation)就是从最后一个时间将累积的残差传递回来即可,跟普通的神经网络训练并没有本质上的不同。

前向传播

直接上公式啦:
RNN以及LSTM的介绍和公式梳理
本文用到的公式基本来自Alex的论文,其中a表示汇集计算的值,b表示经过**函数计算的值,w是不同节点之间连接的参数(具体睡谁连谁看下标),带下标k的是输出层,带下标h的是隐藏层相关的,除此之外你看到所有带括号的的函数都是**函数, ϵϵ

后记

推导一遍之后你完全可以自己实现一次了,用到的东西也不复杂,可惜对于RNN和DL这些东西来说,确定网络结构和调参才是对最后效果有着决定性的影响,RNN和LSTM里可以调的东西太多了,每一个未知的**函数选择,具体网络到底怎么连接,还有学习速率这种老问题。也是个大工程的说
ps.这MD的编辑器还可以啊~~!!

引用

【1】A. Graves. Supervised Sequence Labelling with Recurrent Neural Networks. Textbook, Studies in Computational Intelligence, Springer, 2012.

           
                     

前言

好久没用正儿八经地写博客了,csdn居然也有了markdown的编辑器了,最近花了不少时间看RNN以及LSTM的论文,在组内『夜校』分享过了,再在这里总结一下发出来吧,按照我讲解的思路,理解RNN以及LSTM的算法流程并推导一遍应该是没有问题的。

RNN最近做出了很多非常漂亮的成果,比如Alex Graves的手写文字生成、名声大振的『根据图片生成描述文字』、输出类似训练语料的文字等应用,都让人感到非常神奇。这里就不细说这些应用了,我其实也没看过他们的paper,就知道用到了RNN和LSTM而已O(∩_∩)O

本文就假设你对传统的NN很熟悉了,不会的话参考http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial和我之前的文章http://blog.csdn.net/dark_scope/article/details/9421061学习一下~~

RNN(Recurrent Neural Network)

RNN以及LSTM的介绍和公式梳理
今天我这里讲到的RNN主要是上图这种结构的,即是Hidden Layer会有连向下一时间Hidden Layer的边,还有一种结构是Bidirectional Networks,也就是说会有来自下一时间的Hidden Layer传回来的边,但这不在我们今天的讨论范围内,讲完LSTM,如果你想推导一下Bidirectional Network,应该也是顺理成章的。为了方便推导和描述,我们后面都将左边简化为右边这样一个结构。

RNN和传统的多层感知机不同的就是跟时间沾上边了,下一时间(理解为step)会受本时间的影响,为了更好地说明这个东西,我们可以将网络按照时间进行展开:
RNN以及LSTM的介绍和公式梳理
主要的参数就是三部分:在RNN中每一个时间步骤用到的参数都是一样的,要理解清楚的是:一般来说,每一时间的输入和输出是不一样的,比如对于序列数据就是将序列项依次传入,每个序列项再对应不同的输出(比如下一个序列项),举个栗子(预测后面的状态):
RNN以及LSTM的介绍和公式梳理

BPTT(Back Propagation Through Time)算法

将RNN展开之后,似乎一切都很明了了,前向传播(Forward Propagation)就是依次按照时间的顺序计算一次就好了,反向传播(Back Propagation)就是从最后一个时间将累积的残差传递回来即可,跟普通的神经网络训练并没有本质上的不同。

前向传播

直接上公式啦:
RNN以及LSTM的介绍和公式梳理
本文用到的公式基本来自Alex的论文,其中a表示汇集计算的值,b表示经过**函数计算的值,w是不同节点之间连接的参数(具体睡谁连谁看下标),带下标k的是输出层,带下标h的是隐藏层相关的,除此之外你看到所有带括号的的函数都是**函数, ϵϵ

后记

推导一遍之后你完全可以自己实现一次了,用到的东西也不复杂,可惜对于RNN和DL这些东西来说,确定网络结构和调参才是对最后效果有着决定性的影响,RNN和LSTM里可以调的东西太多了,每一个未知的**函数选择,具体网络到底怎么连接,还有学习速率这种老问题。也是个大工程的说
ps.这MD的编辑器还可以啊~~!!

引用

【1】A. Graves. Supervised Sequence Labelling with Recurrent Neural Networks. Textbook, Studies in Computational Intelligence, Springer, 2012.