我想在LSTM中编写一个时间步长。我的重点是了解忘记浇口层,输入栅极层,候选值,目前未来 细胞状态.

假设我在t-1和xt的隐藏状态如下。为了简单起见,假设权重矩阵是单位矩阵,并且所有偏差都为零。

htminus1=np.数组([0,0.5,0.1,0.2,0.6])xt=np.数组([-0.1,0.3,0.1,-0.25,0.1])

我知道遗忘状态是h减1xt(文本)

那么,是吗?

英尺=1/(1+np.exp(-(htminus1+xt))>>ft=阵列([0.47502081,0.68997448,0.549834,0.4875026,0.66818777])

我指的是这个链接实现一个块LSTM的一次迭代。链接上说英尺应为0或1。我是不是遗漏了什么?

如何按照下图中给出的模式获得遗忘门层?一个例子对我来说很有说明意义。

在此处输入图像描述

沿着同样的路线,如何获得输入门层,和新候选值的向量,\波浪形花纹{C} _(t)如下图所示?

在此处输入图像描述

最后,如何获得新的隐藏状态ht(高温)按照下图给出的方案?

一个简单的例子将有助于我理解。提前谢谢。

在此处输入图像描述

2
  • 你为什么没有包括权重矩阵,你/打算如何初始化权重?
    – d-xa型
    评论 2020年12月9日10:46
  • 为了简单起见,假设权重矩阵是一个单位矩阵,偏差为零。
    – 凌国
    评论 2020年12月9日10:49

3个答案

重置为默认值
5

因此,从数字上看,这并不明显,但以下是它的工作原理-

  1. 如果您看到两条线连接在一起形成一条线,这是一个串联操作。您已将其解释为添加。

  2. 无论你在哪里乙状结肠坦纳块,暗示了与可训练权重矩阵的乘积。

  3. 如果两行通过显式x个+,您正在分别进行元素的乘法和加法。

所以不是乙状结肠(htminus1+xt),正确的操作应该是sigmoid(Wf*np.连接(htminus1+xt))+bf.Wf公司是可训练参数的矩阵高炉是相应的偏差项。

请注意,我刚刚用numpy在图像右侧写下了方程,其他的就不多了。翻译[甲,乙]作为之间的连接操作b条.

您可以类似地定义其他操作。

ft=sigmoid(Wf*np.连接(htminus1,xt))+bfit=sigmoid(Wi*np.contenate(htminus1,xt))+biCtt=tanh(Wc*np.连接(htminus1,xt))+bcOt=S形(Wo*np.连接(htminus1,xt))+boCt=(C_{t-1}*ft)+(Ctt*it)ht=Ot*tanh(Ct)

注:我已代表C^{tilda}作为中央电视台

4
  • 谢谢你的回答。这很有帮助。即使在串联之后,我们如何在遗忘门中只得到0或1?
    – 凌国
    评论 2020年12月9日10:51
  • 1
    你能告诉我博客上说忘记门应该是0还是1的确切位置吗?因为据我所知,它应该在0和1之间,这正是乙状结肠所给出的。
    – 阿南达
    评论 2020年12月9日10:55
  • 2
    你不能得到只有遗忘门中的0或1:sigmoid输出[0,1]之间的值。训练完重量后,当忘记门被触发时,此门的输出将非常接近1。 评论 2020年12月9日10:56
  • 阿南达,伊尼戈:明白了。它说在[0,1]之间。谢谢。
    – 凌国
    评论 2020年12月9日10:57
2

除了已经介绍的细节之外,我想阐明计算和级联的一些更精细的方面。

权重矩阵W_f(_ f)实际上由两个并排连接的权重矩阵组成,即沿轴=1,每个权重矩阵处理以前的时间步长激活(h减1)和电流输入(xt(文本)). 然而,符号[htminus1,xt]表示串联后获得的矩阵h减1xt(文本)垂直堆叠,即沿轴=0。

这些忽略偏差的矩阵计算可以这样表示-LSTM矩阵计算

了解这些计算是如何在张量流LSTM模型中进行的,也很有用。下面的代码块仅包含此处要讨论的相关主要计算,对于完整的代码,请遵循以下内容链接

#电流输入的栅层计算x_i=K.dot(输入_i,自内核_i)x_f=K.dot(输入s_f,self.kernel_f)x_c=K.dot(输入_c,自内核_c)x_o=K.dot(输入_o,自内核_o)#添加偏差如果self.use_bias:x_i=K.bias_add(x_i,self.bias_i)x_f=K.bias_add(x_f,self.bias_f)x_c=K.bias_add(x_c,self.bias_c)x_o=K.bias_add(x_o,self.bias_o)#使用以前的输出--->h_tm1即htminus1计算门层i=自我保护激活(x_i+K.dot(h_tm1,self.recurrent_kernel_i))f=自身安全激活(x_f+K.dot(h_tm1,self.recurrent_kernel_f))c=f*c_tm1+i*自激活(x_c+K.dot(h_tm1,self.recurrent_kernel_c))o=自我保护激活(x_o+K.dot(h_tm1,self.recurrent_kernel_o))
1

遗忘之门在这张图中有清楚的解释

忘记大门

.将ct-1作为at-1

1
  • 1
    正如目前所写的那样,你的答案还不清楚。拜托编辑添加其他详细信息,帮助其他人了解这是如何解决问题的。你可以找到更多关于如何写出好答案的信息在帮助中心.
    – 社区 机器人程序
    评论 2022年3月16日6:20

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.