首页
学习
活动
专区
圈层
工具
发布

核LSTM核
EN

Data Science用户
提问于 2017-12-31 23:10:56
回答 3查看 1.7K关注 0票数 7

我试图了解LSTM单元中的权重矩阵是如何使用的。一个LSTM单元有几个权重矩阵:Wf, Wi, Wc, Wo,如下所示:

(来自http://colah.github.io/posts/2015-08-Understanding-LSTMs/ )

同时,我正在使用Keras并研究它的源代码:https://github.com/keras-team/keras/blob/master/keras/layers/recurrent.py#L1871

在源代码中,只提到了一个内核。我想知道它是否仅指Wc?那么,其他权重矩阵Wf, Wi, Wo在哪里初始化和使用?谢谢!

EN

回答 3

Data Science用户

发布于 2018-05-19 18:07:51

了解LSTM单元中的权重矩阵是如何使用的

在LSTM中,您有一个单元格向量,用于跟踪手头任务的必要信息。

LSTM通过设计具有简单的线性运算(*/+)来更新单元向量,从而便于梯度流。

其关键思想是通过门通过线性交互操作单元向量,在当前输入和先前隐藏的特征之间引入一些非线性,以获得介于0到1之间的新特征,表明我们对新特征向量的每个元素进行了多少操作(添加/删除/更新)。

  1. 我们需要跟踪多少信息?w_f:从先前隐藏的特征与当前输入之间的相互作用中猜测,方法是将两个向量串联起来,并将它们与权重矩阵相乘,并应用乙状结肠非线性来获得0,1之间的值,看看我们应该从旧的单元矢量中忘记多少。modified_old_cell = old_cell * forgetting_some_dimensions (忘记门f_t)。
  2. 我们需要从当前输入中提取多少信息。我们引入两个特征向量,通过将两个向量(输入、先前隐藏)连接起来,并分别应用tanh、sigmoid来获得所提出的单元特征、输入门特征。proposed_cell = non_linearity(previous_hiddens,输入),因此我们使用tanh在-1 +1之间获取值。modified_proposed_cell = proposed_cell * input_gate.因此,我们不需要添加当前时间步骤中的所有信息。current_cell =集成(modified_old_cell,modified_proposed_cell)。因此,集成操作就是加法运算。
  3. 我们需要传递多少信息到下一个时间步骤,因此,如果问题是序列标记,也许某些输出特性只对当前时间步骤很重要。与上面相同的机制是: current_hidden_features = current_cell * outputting_some_dimensions (输出门o_t)。
票数 1
EN

Data Science用户

发布于 2018-01-19 12:16:28

他们使用这个变量通过连接来保存所有的权重矩阵。

call函数的LSTMCell中,您可以看到它们是如何解压缩的:

代码语言:javascript
复制
self.kernel_i = self.kernel[:, :self.units]
self.kernel_f = self.kernel[:, self.units: self.units * 2]
self.kernel_c = self.kernel[:, self.units * 2: self.units * 3]
self.kernel_o = self.kernel[:, self.units * 3:]
票数 0
EN

Data Science用户

发布于 2020-01-05 04:01:41

我很高兴在下面的表达式中提供内核、recurrent_kernel和偏向的直接用法。我想知道在编程语言中,Keras的使用是非常罕见的。应该有人给数组表达式一个精确的解释。

代码语言:javascript
复制
### kernel--weights between x_{t} and units
W_i = W[:, :units]   
W_f = W[:, units:units * 2]
W_c = W[:, units * 2:units * 3]
W_o = W[:, units * 3:]

### recurrent kernel--weights between h_{t-1} and Units
U_i = U[:, :units]  #
U_f = U[:, units:units * 2]
U_c = U[:, units * 2:units * 3]
U_o = U[:, units * 3:]

### bias
b_i = b[:units]
b_f = b[units:units * 2]
b_c = b[units * 2:units * 3]
b_o = b[units * 3:]
票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/26175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档