本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记。
先看看计算公式: x_e = Ex_t \\ z = \sigma(U^zx_e + W^zs_{t-1} + b^z) \\ r = \sigma(U^rx_e + W^rs_{t-1} + b^r) \\ h = tanh(U^hx_e + W^h(s_{t-1} \circ r) + b^h) \\ s_t = (1 - z) \circ h + z \circ s_{t-1} \\ o_t = Vs_t + c
首先,我们有一个单词集合,包含了常用的单词和标点符号。 这个单词集合,在训练前就已经确定了。因此:单词量在训练和预测的过程中是固定的。比如:8000。 我们想象现在正在学习需要句子,用来自动生成有一定含义的语句。
在训练的过程中,会建立以下数据:
如果你看懂了我的上面的烂文。就明白\(E, V, s_t\)是核心。它们包含的数据到底有什么意义呢? \(E\)对每个单词有一个100维的矢量。用来保存每个单词的特征值。 \(V\)对每个单词有一个100维的矢量。是计算输出单词概率的权值。 \(s_t\)是一个100维的矢量。用来保存上下文。 很容易理解,这三个100维的数据,在同一维度上是关联的。 单词的每个特征值的含义会是什么?那么,上下文和\(V\)的每维的含义呢?
我在这里猜测一下。由于训练的目的(被训练数据决定)是学习如何产生一句自然语言。 那么这些数据都是和单词前后位置有关的信息。这些信息会是什么? 比如:我会出现在首位,我会出现在末尾,我们几个会一起出现等等等等,可能性很多。 \(E\)中每个单词的特征值可能是位置信息。 \(s_t\)可能是当前已输入单词组成的句子结构。 \(V\)可能是每个单词在句子结构中的位置可能性。
一个常常想到的问题是:会不会有语法和语法结构的概念? 直观的回答是:不会。因为,训练数据中,并没有这个东西。算法也不可能知道那怕名词、动词这样的概念。 如果,我们从机器的角度看,训练结果可以理解为机器学习到的语法结构。 机器没有主谓宾的概念,所以不会说:“我学习到了主谓宾的语法结构”。 但是一个有趣的问题是:机器的语法结构和人类的语法结构是否会匹配? 我觉得是很有可能的。毕竟它学习的是人类语言。 它很可能学会了"cannot help doing"这样的关系;发现某些词容易出现在有问号结尾的句字开头; 发现有一类词很可能出现在另一类词的后面。 机器没有给这些关系起名字,描述这些关系。而这些是我们可以做的。