神经网络学习笔记-04-循环神经网络算法解释
本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记。
门控循环单元 - GRUs (Gated Recurrent Units)
先看看计算公式:
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不可能学习到名词、形容词等概念。
(为了方便理解,后面,会继续用这个比喻来说明。)
实际情况是什么呢?我还不知道。
-
\(E\)是单词特征值集合。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:神经网络学习笔记-04-循环神经网络算法解释 - Python技术站