擅长:python、mysql、java
<p>从数字上看这并不明显,但这是它的工作原理-</p>
<ol>
<li><p>如果您看到两行连接形成一行,则这是一个串联操作。您已将其解释为添加</p>
</li>
<li><p>无论您在哪里看到<code>sigmoid</code>或<code>tanh</code>块,都意味着与可训练权重矩阵相乘</p>
</li>
<li><p>如果两行由一个显式的<code>x</code>或<code>+</code>连接,则分别执行元素乘法和加法</p>
</li>
</ol>
<p>因此,正确的操作不是<code>sigmoid(htminus1+xt)</code>,而是<code>sigmoid(Wf * np.concatenate(htminus1+xt)) + bf</code><code>Wf</code>是可训练参数的矩阵,<code>bf</code>是相应的偏差项</p>
<p>请注意,我刚刚用numpy在图像的右侧写下了方程式,其他的不多。将<code>[a, b]</code>解释为<code>a</code>和<code>b</code>之间的concetenation操作</p>
<p>您可以类似地定义其他操作</p>
<pre><code>ft = sigmoid(Wf * np.concatenate(htminus1, xt)) + bf
it = sigmoid(Wi * np.concatenate(htminus1, xt)) + bi
Ctt = tanh(Wc * np.concatenate(htminus1, xt)) + bc
Ot = sigmoid(Wo * np.concatenate(htminus1, xt)) + bo
Ct = (C_{t-1} * ft) + (Ctt * it)
ht = Ot * tanh(Ct)
</code></pre>
<p>注:我将<code>C^{tilda}</code>表示为<code>Ctt</code></p>