LSTM算法


1.LSTM

1.1 三个门

  • forget gate 遗忘门 决定了上一个时刻的单元状态 c t − 1 c_{t-1} ct1有多少保留到当前状态 c t c_t ct

  • input gate 输入门 决定当前时刻网格的输入 x t x_t xt有多少可以保存到单元状态 c t \displaystyle c_t ct

  • output gate 输出门 控制单元状态 c t c_t ct有多少输出到 L S T M LSTM LSTM的当前输出值 h t h_t ht

1.2 LSTM单元细节

在这里插入图片描述
符号介绍

  • c t c_t ct为时刻 t t t时的单元状态

  • forget gate

    f = σ ( w f [ h t − 1 , x t ] ) f=\sigma(w_f[h_{t-1},x_t]) f=σ(wf[ht1,xt]) t-1时刻 c t − 1 \displaystyle c_{t-1} ct1在t时刻保留 f ∗ c t − 1 f*c_{t-1} fct1

  • input gate

    i = σ ( w i [ h t − 1 , x t ] ) i=\sigma(w_i[h_{t-1},x_t]) i=σ(wi[ht1,xt])

    z = tanh ⁡ ( w z [ h t − 1 , x t ] ) z=\tanh(w_z[h_{t-1},x_t]) z=tanh(wz[ht1,xt])

    t − 1 t-1 t1时刻在 t t t时刻输入 x t x_t xt保留 i ∗ z i*z iz

  • output gate

    c t = f ∗ c t − 1 + i ∗ z c_t=f*c_{t-1}+i*z ct=fct1+iz

    o = σ ( w o [ h t − 1 , x t ] ) o=\sigma(w_o[h_{t-1},x_t]) o=σ(wo[ht1,xt])

    输出为 h ( t ) = tanh ⁡ ( c t ) ∗ o h(t)=\tanh(c_t) * o h(t)=tanh(ct)o

2.LSTM变种

2.1 GRU

在这里插入图片描述

  • GRU对LSTM做了两个比较大的改动
    • update gate 更新门 z t \displaystyle z_t zt
    • reset gate 重置门 r t \displaystyle r_t rt
    • 将单元状态合并为一个状态 h t \displaystyle h_t ht
  • GRU的前向计算公式为

z t = σ ( W z [ h t − 1 , x t ] ) z_t=\sigma(W_z[h_{t-1},x_t]) zt=σ(Wz[ht1,xt])

r t = σ ( W r [ h t − 1 , x t ] ) r_t=\sigma(W_r[h_{t-1},x_t]) rt=σ(Wr[ht1,xt])

h ~ t = tanh ⁡ ( W [ r t ∗ h t − 1 , x t ] ) \widetilde h_t=\tanh(W[r_t*h_{t-1},x_t]) h t=tanh(W[rtht1,xt])

h = ( 1 − z t ) h t − 1 + z t ∗ h ~ t h=(1-z_t)h_{t-1}+z_t*\tilde h_t h=(1zt)ht1+zth~t

2.2 Bi-RNN (Bidirectional Recurrent Neural Network)

在这里插入图片描述

  • RNN无法利用未来信息,Bi-RNN可以同时输入历史和未来的数据信息,时序相反时两个循环神经网络连接统一输出,输出层可以同时获取历史未来信息。

  • 双向循环神经网络的基本思想是: 每一个训练序列向前和向后分别是两个RNN,而且这两个都连接着一个输出层。这个结构提供给输出层输入序列中每一个点完整的过去和未来的上下文信息。6个独特的权值在每一时步被重复利用,六个权值分别对应着输入层到前向层隐含层和反向层隐藏层 ( w 1 , w 5 ) (w_1,w_5) (w1,w5)、前向/后向隐含层到前向/后向隐含层 ( w 2 , w 5 ) (w_2,w_5) (w2,w5)、向前和向后隐含层到输出层 ( w 4 , w 6 ) (w_4,w_6) (w4,w6)

3.RNN使用场景

在这里插入图片描述
RNN网络适合处理序列数据1,序列长度一般不是固定的。

上图最下层为输入向量,中间层为RNN的状态,最上层为输出向量

RNN的五个应用场景,一次对应上面的5个图

  1. 没有使用RNN的Vanilla模型,从固定的大小的输入得到固定大小的输出
  2. 序列输出(比如图片字幕,输入一张图片输出一段文字序列)
  3. 序列输入(比如情感分析,输入一段文字,然后将它分类为积极或者消极情感)
  4. 序列输入和序列输出(比如机器翻译:一个RNN读取一条英文语句,然后将它以法语形式输出)
  5. 同步序列输入输出(比如视频分类,为视频中每一帧打标签)

  1. 与使用固定计算步骤的固定网络相比,使用序列进行操作要更加强大。RNN将输入向量与状态向量用一个固定函数绑定起来,用来产生一个新的状态向量。在编程层面上,在运行一个程序时可以用特定的输入和一些内部变量对其进行解释。从这个角度上讲,RNN本质上可以描述程序。事实上,RNN是图灵完备的,即他们可以模拟任意程序。 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EKF-LSTM算法是一种基于LSTM的自适应学习算法,用于处理序列数据。该算法结合了扩展卡尔曼滤波(EKF)和长短期记忆(LSTM)网络的优势,能够有效地处理长序列依赖问题。 EKF-LSTM算法的核心思想是将EKF应用于LSTM网络的训练过程中,以提高模型的学习效果。具体而言,EKF-LSTM算法通过对LSTM网络的参数进行迭代更新,使得网络能够更好地适应输入序列的特征。在每次迭代中,EKF-LSTM算法使用EKF来估计网络参数的梯度,并根据梯度信息更新参数。这样,算法可以在训练过程中动态地调整网络的权重,以适应不同的输入序列。 EKF-LSTM算法的优点在于它能够处理长序列依赖问题,并且具有较好的学习效果。通过结合EKF和LSTM的特点,该算法能够更好地捕捉序列数据中的长期依赖关系,从而提高模型的预测准确性。 以下是EKF-LSTM算法的一个示例代码[^1]: ```matlab % 初始化参数 theta = randn(1, 3); P = eye(3); % 迭代更新参数 for t = 1:T % 前向传播 [h, c] = lstm_forward(x(:, t), theta); % 计算梯度 [dtheta, dP] = lstm_backward(x(:, t), h, c, theta); % 更新参数 [theta, P] = ekf_update(theta, P, dtheta, dP); end ``` 以上代码展示了EKF-LSTM算法的基本流程。在每次迭代中,算法通过前向传播计算LSTM网络的输出,然后通过反向传播计算梯度。接下来,算法使用EKF来更新网络参数,并迭代进行训练。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值