这个月忙着毕设 , 做的是森林覆盖率的预测 使用的深度学习模型LSTM 之前是小白(虽说现在也是) 趁着有时间 就把今天学习的内容 巩固回顾一下好了
1.RNN(Recurrent Neural Network)
- 首先想说,LSTM其实是RNN的一个变种,由于其解决了rnn网络模型的某些问题,更加广泛应用,因此大范围情况下主要使用的是LSTM.先从RNN介绍
- RNN:拿说话举例子:如果需要预测下一句话要说的内容,肯定需要对当前的词语来进行推断,因此需要记得当前和之前说过的话。传统的神经网络无法完成这一任务,但是RNN可以解决。RNN包含循环的网络,允许信息持久化。
- 单个RNN循环 :该神经网络模块A ,根据输入的前一个循环信息 A t − 1 A_{t-1} At−1和 X t X_{t} Xt 并且经过激活函数输出一个当前值 h t h_{t} ht。其实RNN可以被堪称是同一神经网络的多次迭代,每个模块将信息传递给下一个,将其循环展开得到:
- 在过去几年 ,rnn在语音识别 语言建模 翻译 图片描述中获得成功 建议参考这篇博文 了解一下rnn的应用
RNN前向传播算法推导:
RNN反向传播算法
长期依赖问题(long term dependencies)
- 在简单的应用场景可以使用RNN实现,如 i am chinese.i love china.接下来的单词rnn预测是china 因此可以很简单的预测出来。
LSTM model
- 标准rnn只有单一层
- LSTM MODEL重复层包括4个交互层
CORE IDEAS
-
关键是细胞状态。我们可以看作 C t − 1 C_{t-1} Ct−1保存当前输入 x t x_{t} xt之前的状态 h t − 1 h_{t-1} ht−1
设计了一个gate 来控制信息的增加和减少 -
LSTM拥有三个门 input gate output gate forget gate
first step
决定从细胞状态中遗忘哪些信息 由forget gate决定 其根据
h
t
−
1
h_{t-1}
ht−1 &
x
t
x_{t}
xt来输出一个0-1之间的值给每个
c
t
−
1
c_{t-1}
ct−1的细胞状态 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∗[ht−1,xt]+bf)
second step
决定何种信息被存储 分成2step
part 1
- 通过input gate的sigmoid层决定更新何种值
- 再由tanh层通过
h
t
−
1
h_{t-1}
ht−1和
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∗[ht−1,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∗[ht−1,xt]+bc)
part 2
- 根据上一步得到的 C t ~ , i t \tilde{C_{t}},i_{t} Ct~,it以及forget gate得到的 C t − 1 C_{t-1} Ct−1的值 就可以更新细胞状态了:包含两部分 1.通过遗忘门的 C t − 1 C_{t-1} Ct−1和 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=Ct−1∗ft+it∗Ct~
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[ht−1,xt])
h t = o t ∗ t a n h ( c t ) h_{t}=o_{t}*tanh(c_{t}) ht=ot∗tanh(ct)