知识其实是积累的过程,

从开始死磕神经网络到现在搞清楚其内部细节问题也算是颇费工夫,

一步一个脚印,过了时间点 自然就会豁然开朗,

当初搞CNN画了一个多星期才明白其中的细节

RNN花掉了好几倍的时间

 

今天把我对RNN的思索反馈写出来

CNN是根据人的视觉神经环路开发出来的神经网络,具有明显的层次

而RNN是一个链条式的神经网络,有着时间属性,当然你可以并行多部个RNN单元并进行计算

这也是将来的一大进展,

 

重点在如RNN的 long short term memroty 这个算法,初学者很难理解

 

其中的各种门让人无语,如果没有门 我认为更好记忆

只需要明白RNN干了些什么事情

 

A LSTM neural network.

 

 

我们对ht进行分析

输入:

Xt    t时间点的数据

Ct-1     上一个时间点的细胞状态

 

处理过程:

首先生成一个过滤器,其实即使对新数据和细胞状态做sigmoid操作:f=sigmoid(Wt[Xt,Ct-1]+Bt)

这个过滤器很重要,RNN后面的处理都需要这个过滤器来进行操作

 

生成过滤器以后,我们要想办法算出细胞最新的状态

其中先看看我们过滤上个细胞状态的多少数据

f输出是[0 1]之间的数据

那么过滤后的上个细胞状态Cf=f*Ct-1

我们可以知道上个状态的保留情况

再做一次过滤器 Mf=sigmoid(Wm[Xt,Ct-1]+Bm)

同时利用激励函数tahn对Xt 和 Ct-1进行处理 得到Tf=tahn(Wc[Xt,Ct-1]+Bc)

 

最终细胞状态FF=Cf+Mf*Tf  其中 Cf=f*Ct-1

 

那么后面的问题就是要计算输出结果

 

如果计算输出结果,一样是结合过滤器

 

Nf=sigmoid(Wf[Ct-1,Xt]+Bf)

 

Fo =Nf*tahn(FF)

 

 

注意红色部分输入都是一样只是参数不同,都可以统称为过滤器

 

LSTM充分利用了上个状态和本次输入数据进行三次操作,有神奇的效果 可为什么 其实是不知道的

 

第一的过滤器是用来 对上个状态进行过滤

第二个过滤器是进行多tanh后的数据进行过滤

第三个过滤器是对tanh后的状态进行过滤

 

三次过滤完成后LSTM的操作流程

 

One popular LSTM variant, introduced by Gers & Schmidhuber (2000), is adding “peephole connections.” This means that we let the gate layers look at the cell state.

A slightly more dramatic variation on the LSTM is the Gated Recurrent Unit, or GRU, introduced by Cho, et al. (2014). It combines the forget and input gates into a single “update gate.” It also merges the cell state and hidden state, and makes some other changes. The resulting model is simpler than standard LSTM models, and has been growing increasingly popular.

A gated recurrent unit neural network.

These are only a few of the most notable LSTM variants. There are lots of others, like Depth Gated RNNs by Yao, et al. (2015). There’s also some completely different approach to tackling long-term dependencies, like Clockwork RNNs by Koutnik, et al. (2014).