lstm数学推导_Long short-term memory(LSTM)数学推导

本文是根据以下三篇文章整理的LSTM推导过程,公式都源于文章,只是一些比较概念性的东西,要coding的话还要自己去吃透以下文章。

前向传播:

1、计算三个gate(in, out, forget)的输入和cell的输入:

\begin{align}

{z_{i{n_j}}}(t) = \sum\limits_m {{w_{i{n_j}m}}{y_m}(t - 1) + \sum\limits_{v = 1}^{{S_j}} {{w_{i{n_j}}}c_j^v{S_{c_j^v}}(t - 1)} } ,

\end{align}

\begin{align}

{z_{{\varphi _j}}}(t) = \sum\limits_m {{w_{{\varphi _j}m}}{y_m}(t - 1) + \sum\limits_{v = 1}^{{S_j}} {{w_{{\varphi _j}}}c_j^v{S_{c_j^v}}(t - 1)} } ,

\end{align}

\begin{align}

{z_{ou{t_j}}}(t) = \sum\limits_m {{w_{ou{t_j}m}}{y_m}(t - 1) + \sum\limits_{v = 1}^{{S_j}} {{w_{ou{t_j}}}c_j^v{S_{c_j^v}}(t - 1)} } ,

\end{align}

\begin{align}

{z_{c_j^t}}(t) = \sum\limits_m {{w_{c_j^t}}_m{y_m}(t - 1) + \sum\limits_{v = 1}^{{S_j}} {{w_{c_j^t}}c_j^v{S_{c_j^v}}(t - 1)} } ,

\end{align}

2、计算上述各个gate和cell的激活值:

\begin{align}

{y_{i{n_j}}}(t) = {f_{i{n_j}}}({z_{i{n_j}}}(t)),

\end{align}

\begin{align}

{y_{{\varphi _j}}}(t) = {f_{{\varphi _j}}}({z_{{\varphi _j}}}(t)),

\end{align}

\begin{align}

{y_{ou{t_j}}}(t) = {f_{ou{t_j}}}({z_{ou{t_j}}}(t)),

\end{align}

\begin{align}

{S_{c_j^v}}(0) = 0,{S_{c_j^v}}(t) = {y_{{\varphi _j}}}(t){S_{c_j^v}}(t - 1) + {y_{i{n_j}}}(t)g({z_{c_j^v}}(t)),

\end{align}

\begin{align}

{y_{c_j^v}}(t) = {y_{ou{t_j}}}{S_{c_j^v}}(t),

\end{align}

3、假定该网络为一个标准的三层结构(如下图所示),即一个输入层,一个隐层和一个输出层。则对于一个输出单元,我们可以按下述的方式计算它的输入和激活值。其中m为所有与该输出单元连接的单元(包括输入层的和隐层的)。

\begin{align}

{z_k}(t) = \sum\limits_m {{w_{km}}{y_m}(t),}

\end{align}

\begin{align}

{y_k}(t) = {f_k}({z_k}(t)),

\end{align}

4、计算当前时间点对应状态对input gate和、forget gate以及cell的偏导数。这里跟CNN不一样,CNN前向只是求值,没有传递梯度。但对于lstm,由于内部状态的改变依赖前一时间点的状态,因此内部状态的参数也会把错误传递到网络下一层,因此前向也涉及到梯度传递。

\begin{align}

dS_{in,m}^{jv}(t) = \frac{{\partial {S_{c_j^v}}(t)}}{{\partial {w_{i{n_j}m}}}}\overset{tr}{=}\frac{{\partial {S_{c_j^v}}(t - 1)}}{{\partial {w_{i{n_j}m}}}}{y_{_{{\varphi _j}}}}(t) + g({z_{c_j^v}}(t)){{f'}_{i{n_j}}}({z_{i{n_j}}}(t)){y_m}(t - 1),

\end{align}

\begin{align}

dS_{\varphi m}^{jv}(t) = \frac{{\partial {S_{c_j^v}}(t)}}{{\partial {w_{{\varphi _j}m}}}}\overset{tr}{=}\frac{{\partial {S_{c_j^v}}(t - 1)}}{{\partial {w_{{\varphi _j}m}}}}{y_{_{{\varphi _j}}}}(t) + {S_{c_j^v}}(t - 1){{f'}_{{\varphi _j}}}({z_{{\varphi _j}}}(t)){y_m}(t - 1),

\end{align}

\begin{align}

dS_{cm}^{jv}(t) = \frac{{\partial {S_{c_j^v}}(t)}}{{\partial {w_{c_j^vm}}}}\overset{tr}{=} \frac{{\partial {S_{c_j^v}}(t - 1)}}{{\partial {w_{c_j^vm}}}}{y_{_{{\varphi _j}}}}(t) + g'({z_{c_j^v}}(t)){y_{i{n_j}}}(t){y_m}(t - 1),

\end{align}

后向传播:

1、对于每个输出单元(output unit),我们可以计算它的 输出错误如下,其中${t_k}(t)$为前向计算的输出,${y_k}(t)$为真实值。

\begin{align}

{e_k}(t) = {t_k}(t) - {y_k}(t),

\end{align}

2、接下来计算每个输出单元的残差,这里的计算和CNN是一样的,就是对该层网络求导。

\begin{align}

{\delta _k}(t) = {{f'}_k}({z_k}){e_k}(t)

\end{align}

3、输出output gate的残差计算方式和output unit类似。(output unit只针对每一个小单元的权重,而output gate针对的是所有output unit连接到输出层的权重)

\begin{align}

\delta ou{t_j}(t) = {{f'}_{ou{t_j}}}({z_{ou{t_j}}}(t))(\sum\nolimits_{v = 1}^{{S_j}} {h({S_{c_j^v}}(t))} \sum\nolimits_k {{w_{kc_j^v}}{\delta _k}(t)} ),

\end{align}

4、第2和第3条针对的是外部残差,内部残差(包括input gate, forget gate和cell)计算方式如下:

\begin{align}

{e_{{S_{c_j^v}}}}(t) = {y_{ou{t_j}}}(t)h'({S_{c_j^v}}(t))(\sum\nolimits_k {{w_{kc_j^v}}{\delta _k}(t)} ),

\end{align}

5、最后,根据残差更新各个参数(weight),注意外部和内部的表达式不一样,具体推导见原文。

1).output unit:

\begin{align}

\Delta {w_{km}}(t) = \alpha {\delta _k}(t){y_m}(t - 1),

\end{align}

2).output gate:

\begin{align}

\Delta {w_{out,m}}(t) = \alpha {\delta _{out}}(t){y_m}(t - 1),

\end{align}

3).input gate:

\begin{align}

\Delta {w_{in,m}}(t) = \alpha \sum\nolimits_{v = 1}^{{S_j}} {{e_{{S_{c_j^v}}}}(t)dS_{in,m}^{jv}(t)} ,

\end{align}

4).forget gate:

\begin{align}

\Delta {w_{\varphi m}}(t) = \alpha \sum\nolimits_{v = 1}^{{S_j}} {{e_{{S_{c_j^v}}}}(t)dS_{\varphi m}^{jv}(t)} ,

\end{align}

5).cell:

\begin{align}

\Delta {w_{c_j^vm}}(t) = \alpha {e_{{S_{c_j^v}}}}(t)dS_{cm}^{jv}(t),

\end{align}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值