LSTM& RNN模型学习(principle & practice)

这个月忙着毕设 , 做的是森林覆盖率的预测 使用的深度学习模型LSTM 之前是小白(虽说现在也是) 趁着有时间 就把今天学习的内容 巩固回顾一下好了

1.RNN(Recurrent Neural Network)

  • 首先想说,LSTM其实是RNN的一个变种,由于其解决了rnn网络模型的某些问题,更加广泛应用,因此大范围情况下主要使用的是LSTM.先从RNN介绍
  • RNN:拿说话举例子:如果需要预测下一句话要说的内容,肯定需要对当前的词语来进行推断,因此需要记得当前和之前说过的话。传统的神经网络无法完成这一任务,但是RNN可以解决。RNN包含循环的网络,允许信息持久化。
    single rnn
  • 单个RNN循环 :该神经网络模块A ,根据输入的前一个循环信息 A t − 1 A_{t-1} At1 X t X_{t} Xt 并且经过激活函数输出一个当前值 h t h_{t} ht。其实RNN可以被堪称是同一神经网络的多次迭代,每个模块将信息传递给下一个,将其循环展开得到:

unfold diagram

  • 在过去几年 ,rnn在语音识别 语言建模 翻译 图片描述中获得成功 建议参考这篇博文 了解一下rnn的应用

在这里插入图片描述

RNN前向传播算法推导:

在这里插入图片描述

RNN反向传播算法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

长期依赖问题(long term dependencies)

  • 在简单的应用场景可以使用RNN实现,如 i am chinese.i love china.接下来的单词rnn预测是china 因此可以很简单的预测出来。
    在这里插入图片描述

LSTM model

rnn

  • 标准rnn只有单一层
    lstm
  • LSTM MODEL重复层包括4个交互层

CORE IDEAS

在这里插入图片描述

  • 关键是细胞状态。我们可以看作 C t − 1 C_{t-1} Ct1保存当前输入 x t x_{t} xt之前的状态 h t − 1 h_{t-1} ht1
    设计了一个gate 来控制信息的增加和减少

  • LSTM拥有三个门 input gate output gate forget gate

first step

决定从细胞状态中遗忘哪些信息 由forget gate决定 其根据 h t − 1 h_{t-1} ht1 & x t x_{t} xt来输出一个0-1之间的值给每个 c t − 1 c_{t-1} ct1的细胞状态 0表示遗忘 1表示记住
equation: f t = σ ( W f ∗ [ h t − 1 , x t ] + b f ) f_{t} = \sigma(W_{f} * [h_{t-1},x_{t}] + b_{f}) ft=σ(Wf[ht1,xt]+bf)
在这里插入图片描述

second step

决定何种信息被存储 分成2step

part 1

  • 通过input gate的sigmoid层决定更新何种值
  • 再由tanh层通过 h t − 1 h_{t-1} ht1 x t x_{t} xt 得到新的候选向量 C t ~ \tilde{C_{t}} Ct~
    在这里插入图片描述
    i t = σ ( W f ∗ [ h t − 1 , x t ] + b f ) i_{t} = \sigma(W_{f} * [h_{t-1,x_{t}}] + b_{f}) it=σ(Wf[ht1,xt]+bf)
    C t ~ = ( W c ∗ [ h t − 1 , x t ] + b c ) \tilde{C_{t}} = (W_{c} * [h_{t-1,x_{t}}] + b_{c}) Ct~=(Wc[ht1,xt]+bc)

part 2

在这里插入图片描述

  • 根据上一步得到的 C t ~ , i t \tilde{C_{t}},i_{t} Ct~,it以及forget gate得到的 C t − 1 C_{t-1} Ct1的值 就可以更新细胞状态了:包含两部分 1.通过遗忘门的 C t − 1 C_{t-1} Ct1 f t f_{t} ft的相乘 2.经过input gate的 i t i_{t} it C t ~ \tilde{C_{t}} Ct~之间的处理

Equation: C t = C t − 1 ∗ f t + i t ∗ C t ~ C_{t} =C_{t-1}*f_{t}+i_{t}*\tilde{C_{t}} Ct=Ct1ft+itCt~

last step

  • 决定输出值 该值由 C t C_{t} Ct和输出门过滤的结果

在这里插入图片描述

  • 1.将输出层的值通过sigmoid层过滤得到 o t o_{t} ot
  • 2. c t c_{t} ct通过tanh层过滤使得值保持在[-1,1]
  • 3.将前两项相乘即可
    o t = σ ( W 0 [ h t − 1 , x t ] ) o_{t}=\sigma(W_{0}[h_{t-1},x_{t}]) ot=σ(W0[ht1,xt])
    h t = o t ∗ t a n h ( c t ) h_{t}=o_{t}*tanh(c_{t}) ht=ottanh(ct)

实现部分参考这篇github

tensorflow基础教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值