今天的学习资料是这篇文章,写的非常详细,有理论有代码,本文是补充一些小细节,可以二者结合看效果更好:
https://zybuluo.com/hanbingtao/note/541458
在文末有关于 RNN 的文章汇总,之前写的大多是概览式的模型结构,公式,和一些应用,今天主要放在训练算法的推导。
本文结构:
- 模型
- 训练算法
- 基于 RNN 的语言模型例子
- 代码实现
1. 模型
- 和全连接网络的区别
- 更细致到向量级的连接图
- 为什么循环神经网络可以往前看任意多个输入值
循环神经网络种类繁多,今天只看最基本的循环神经网络,这个基础攻克下来,理解拓展形式也不是问题。
首先看它和全连接网络的区别:
下图是一个全连接网络:
它的隐藏层的值只取决于输入的 x
而 RNN 的隐藏层的值 s 不仅仅取决于当前这次的输入 x,还取决于上一次隐藏层的值 s:
这个过程画成简图是这个样子:
其中,t 是时刻, x 是输入层, s 是隐藏层, o 是输出层,矩阵 W 就是隐藏层上一次的值作为这一次的输入的权重。
上面的简图还不能够说明细节,来看一下更细致到向量级的连接图:
Elman and Jordan networks are also known as “simple recurrent networks” (SRN).
其中各变量含义:
输出层是一个全连接层,它的每个节点都和隐藏层的每个节