我想在LSTM中编码一个时间步。我的重点是理解忘记门层、输入门层、候选值、当前和未来单元状态的功能
假设我在t-1和xt的隐藏状态如下。为了简单起见,我们假设权重矩阵是恒等矩阵,所有偏差都为零
htminus1 = np.array( [0, 0.5, 0.1, 0.2, 0.6] )
xt = np.array( [-0.1, 0.3, 0.1, -0.25, 0.1] )
我知道遗忘状态是htminus1
和xt
的乙状结肠
那么,是吗
ft = 1 / ( 1 + np.exp( -( htminus1 + xt ) ) )
>> ft = array([0.47502081, 0.68997448, 0.549834 , 0.4875026 , 0.66818777])
我指的是this link来实现一个块LSTM的一次迭代。这个链接说ft
应该是0或1。我是不是遗漏了什么
如何根据下图中给出的模式获得忘记门层?一个例子将对我起到说明作用。
沿着相同的路线,如何获得输入门层,it
和新候选值的向量,\tilde{C}_t
,如下图所示?
最后,如何根据下图给出的方案获得新的隐藏状态ht
?
一个简单的例子将有助于我理解。提前谢谢
从数字上看这并不明显,但这是它的工作原理-
如果您看到两行连接形成一行,则这是一个串联操作。您已将其解释为添加
无论您在哪里看到
sigmoid
或tanh
块,都意味着与可训练权重矩阵相乘如果两行由一个显式的
x
或+
连接,则分别执行元素乘法和加法因此,正确的操作不是
sigmoid(htminus1+xt)
,而是sigmoid(Wf * np.concatenate(htminus1+xt)) + bf
Wf
是可训练参数的矩阵,bf
是相应的偏差项请注意,我刚刚用numpy在图像的右侧写下了方程式,其他的不多。将
[a, b]
解释为a
和b
之间的concetenation操作您可以类似地定义其他操作
注:我将
C^{tilda}
表示为Ctt
除了已经介绍的细节外,我还想阐明计算和连接的一些更精细的方面
权重矩阵
W_f
实际上由两个并排连接的权重矩阵组成,即沿轴=1,每个权重矩阵处理前一时间步激活(htminus1
)和当前输入(xt
)。然而,表示法[htminus1, xt]
表示通过堆叠(即沿轴=0)将htminus1
和xt
垂直串联而获得的矩阵这些忽略偏差的矩阵计算可以这样表示-
了解这些计算是如何在tensorflow LSTM模型中进行的也是一个信息。下面的代码块只包含与此处讨论相关的主要计算,因为完整的代码如下link
相关问题 更多 >
编程相关推荐