What's RNN

RNNs(RECURRENT NEURAL NETWORKS)是目前我学到的最复杂的模型,其中的LSTM(Long Short Term Memery)更复杂。而Coursera上的Neural Networks for Machine Learning的相关章节也讲得我云里雾里,等我学完这课再来吐槽。
于是只得在网上找资料进一步学习,其中RECURRENT NEURAL NETWORKS TUTORIAL讲CNN讲得非常好,其中引用的相关文章也非常值得一读。而且其有代码实现,对程序员来讲,阅读代码也能从实现角度能更好地理解CNN。
这里也不再重复相关内容,只是简单记录一下要点。

相关阅读材料

总结

  • Input is sequence
  • Interate in sequence steps
  • Intract with previous status
  • $U, V, W$ also interpreted as $W_{xh}, W_{hh}, W_{hy}$ are shared accross every iteration. And these parameters need to be trained.

CNN公式

A recurrent neural network and the unfolding in time of the computation involved in its forward computation. Source: Nature
From RECURRENT NEURAL NETWORKS TUTORIAL
计算公式
$s_t=\sigma(U\cdot x_t + W\cdot s_{t-1})$
$o_t = softmax(V\cdot s_t)$
其中$\sigma$可以是sigmoid,tanh或者ReLU函数。
Cost Function
Cross-entropy Loss
$L(y,o)=-\frac{1}{N}\sum_{n\in N}y_nlog(o_n)$

LSTM公式

The repeating module in an LSTM contains four interacting layers.
From Understanding LSTM Networks
$i=\sigma(x_t\cdot U^i + s_{t-1}\cdot W^i),$ —— Input Gate
$f=\sigma(x_t\cdot U^f + s_{t-1}\cdot W^f),$ —— Forget Gate
$o=\sigma(x_t\cdot U^o + s_{t-1}\cdot W^o),$ —— Ouput Gate
$g=tanh(x_t\cdot U^g + s_{t-1}\cdot W^g)$
$c_t=c_{t-1}\circ f + g \circ i$
$s_t = tanh(c_t)\circ o$
其中$U^i, U^f, U^o, U^g$是维度相同的不同参数,都需要训练。$W^i,W^f,W^o,W^g$同理。
梯度怎么求?
RECURRENT NEURAL NETWORKS TUTORIAL没有给出明确的计算公式或者算法,而是用Theano的自动求导算法。这是下一步需要搞懂的事情。

GRU公式

$z=\sigma(x_t\cdot U^z + s_{t-1}\cdot W^z),$ —— Update Gate
$r=\sigma(x_t\cdot U^r + s_{t-1}\cdot W^r),$ —— Reset Gate
$h=tanh(x_t\cdot U^h + (s_{t-1}\circ r) W^h)$
$s_t = (1-z)\circ h + z \circ s_{t-1}$

CNN思维导图

CNN思维导图

What’s Next

  • CNNs为什么能工作?
    对我来说还是magical or mythical……
  • Backpropagation Through Time
    相关计算公式和算法细节
  • LSTM/GRU的梯度
    计算公式或者实现算法
  • TensorFlow实现
    准备用TensorFlow来行实现LSTM/GRU。

To be continued…

坚持原创技术分享,据说打赏的人都实现一个小目标,赚了一个亿!