您的位置:首页 > 理论基础 > 计算机网络

神经网络学习笔记-04-循环神经网络算法解释

2017-02-16 20:11 686 查看

神经网络学习笔记-04-循环神经网络算法解释

本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记。

门控循环单元 - GRUs (Gated Recurrent Units)

先看看计算公式:

\[
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。

我们想象现在正在学习需要句子,用来自动生成有一定含义的语句。

在训练的过程中,会建立以下数据:

输入数据

\(x_t\)的维度为\(8000\)。每个维度对应一个单词。是一个one-hot vector。

就是说8000个维度里,只有一维为1,其它都是0。

表示当前输入的单词。

输出数据

\(o_t\)的维度为\(8000\)。含义同\(x_t\)。可以理解为,根据已输入的单词,预测下一个应该是哪个单词。

内部状态

\(s_t\)的维度为\(100\)。内部状态。取值范围[-1, 1]。

\(s_t\)是算法中的关键,可以理解为语言中的上下文。或者记忆。

由算法可以看出\(s_t\)决定\(o_t\)。

参数

\(E\)的维度为:\(100 \times 8000\)。为单词集合中的每个单词建立一个单词特征值。每个单词特征值的维度为100。

\(U^z, U^r, U^h\)的维度为:\(100 \times 100\)

\(W^z, W^r, W^h\)的维度为:\(100 \times 100\)

\(b^z, b^r, b^h\)的维度为:\(100\)

\(V\)的维度为:\(8000 \times 100\)

\(c\)的维度为:\(8000\)

计算过程和计算变量

\(x_e = Ex_t\)的意思是从\(E\)取出单词\(x_t\)的状态。(SELECT state FROM E WHERE word_id = x_t)

\(x_e\)的维度为:\(100\)

\(z\)的维度是\(100\)。每个数的取值范围为[0, 1]。可以简单地理解为\(0\)或\(1\)。就像一个开关。\(0\)表示不要。\(1\)表示要。

\(z\)这个开关,控制上下文中哪些数据要保留

\(r\)的维度是\(100\)。同\(z\)。

\(r\)这个开关,控制上下文中哪些数据需要重置。

\(h\)的维度是\(100\)。每个数的取值范围为[-1, 1]。可以简单地理解为\(-1\)或\(1\)。控制输出单词的可能性。

\(h\)这个开关,控制上下文中(由\(z\)确定的)不保留的数据的新值

\(h\)就是\(s_t\)(的新值)。

\(h\)决定了\(s_t\)。

参数的意义

\(E\)是单词特征值集合。

我们可以想象特征可以表示为这个单词是否是名词,是否是形容词,是否表示否定等等各种语言特征。

上面所说的是一个比喻。因为没有输入词性的信息。RNN不可能学习到名词、形容词等概念。

(为了方便理解,后面,会继续用这个比喻来说明。)

实际情况是什么呢?我还不知道。:(。

我猜测很可能是这样的特征信息:


是否容易出现在开头。

是否容易出现在结尾。

关系1

关系1,我在前面

关系1,我在后面

关系2

关系2,我在第一位

关系2,我在最后一位

...

如果,两个单词的" 前后关系1“的值都为1。在前面的单词已经出现了,那么后面的那个单词出现的可能性就大了。



上下文\(s_t\)的含义

可以很容易的注意到,上下文和单词特征有一对一的关系。

\(s_t\)是根据前一个上下文\(s_{t-1}\)和当前输入单词的特征\(x_e\)变化而来。

\(s_t\)的值是直接从\(h\)来的,取值范围是\([-1, 1]\)。有方向性的表示,比如:名词的相关程度(和不相关程度)。

因此:\(s_t\)的含义是当前语境下,各个语言特征的相关程度

比如:有一个名字,一个动词,否定语气。

\(s_t\)最终又决定了输出单词的概率。我们仔细看看它是如何决定\(o_t\)的?

通过和\(V\)的乘积!这是什么意思呢?

我们要理解\(V\)。 \(V\)表示对每个单词,上下文(语言特征相关性)决定的下一个单词出现可能性的权值。

\(U^z\)是单词特征值的保留权值。

在决定上下文中哪些特征需要保留的时候,单词特征值的价值。

比如:如果这个单词是个名词的话,价值更大,需要保留。是个介词的话,价值较小。

\(W^z\)是前上下文的保留权值。

在决定上下文中哪些特征需要保留的时候,前上下文的价值。

\(b^z\)是保留偏差。

\(U^r\)是单词特征值的重置权值。

在决定上下文中哪些特征需要重置的时候,单词特征值的价值。

比如:如果这个单词是个名词的话,价值更大,需要重置上下文。是个介词的话,价值较小,不太需要重置上下文。

\(W^r\)是上下文的重置权值。

在决定上下文中哪些特征需要重置的时候,前上下文的价值。

\(b^r\)是重置偏差。

\(U^h\)是单词特征值变成上下文值的权值。

\(W^h\)是前上下文值变成当前上下文值的权值。

\(b^h\)是上下文值的偏差。

\(V\)是每个单词对应上下文,产生输出单词的概率权值。

\(V\)表示对每个单词,上下文(语言特征相关性)决定的下一个单词出现可能性的权值。

\(c\)是输出单词概率的偏差。

随想

如果你看懂了我的上面的烂文。就明白\(E, V, s_t\)是核心。它们包含的数据到底有什么意义呢?

\(E\)对每个单词有一个100维的矢量。用来保存每个单词的特征值。

\(V\)对每个单词有一个100维的矢量。是计算输出单词概率的权值。

\(s_t\)是一个100维的矢量。用来保存上下文。

很容易理解,这三个100维的数据,在同一维度上是关联的。

单词的每个特征值的含义会是什么?那么,上下文和\(V\)的每维的含义呢?

我在这里猜测一下。由于训练的目的(被训练数据决定)是学习如何产生一句自然语言。

那么这些数据都是和单词前后位置有关的信息。这些信息会是什么?

比如:我会出现在首位,我会出现在末尾,我们几个会一起出现等等等等,可能性很多。

\(E\)中每个单词的特征值可能是位置信息。

\(s_t\)可能是当前已输入单词组成的句子结构。

\(V\)可能是每个单词在句子结构中的位置可能性。

一个常常想到的问题是:会不会有语法和语法结构的概念?

直观的回答是:不会。因为,训练数据中,并没有这个东西。算法也不可能知道那怕名词、动词这样的概念。

如果,我们从机器的角度看,训练结果可以理解为机器学习到的语法结构

机器没有主谓宾的概念,所以不会说:“我学习到了主谓宾的语法结构”。

但是一个有趣的问题是:机器的语法结构和人类的语法结构是否会匹配?

我觉得是很有可能的。毕竟它学习的是人类语言。

它很可能学会了"cannot help doing"这样的关系;发现某些词容易出现在有问号结尾的句字开头;

发现有一类词很可能出现在另一类词的后面。

机器没有给这些关系起名字,描述这些关系。而这些是我们可以做的。

参照

Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs

softmax损失函数的求导

Understanding LSTM Networks
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: