机器学习基础-循环神经网络RNN

Recurrent networks

继多层感知机面世后,在语言模型方面诞生了RNN模型。该模型所做的事情其实很简单:
输入:句子中前面出现过的词
输出:预测下一个新的词是什么
比如说:
输入:Hello
输出:预测==>World
简而言之,就是在已有的一条时序信息中,预测下一个时刻的信息是什么。

当然,我们也可以通过MLP来做这件事情,即通过输入已有的语言信息,把所有词元进行one-hot处理,每个词元(样本)就有得到一个输出,在下一个词元(样本)又会得到另外一个输出。如下图所示~

MLP in Sequence

单纯的MLP虽然也能处理该类问题,但是,每次我们进行预测只是基于上一个时刻的词元信息,并不能往前看更多时刻的词元信息。如预测"play"下个时刻的输出,仅能依赖于"play"这个词元,并不能看得到"play"之前的时序词元信息。

当然,你也可以将"I"和"like"这两个词元的信息与"play"做个信息的sum pooling,但是这样会缺乏时序信息的表示,因为" I like play"和"like play I"在pooling后表达的信息是一样的。

RNN in Sequence

对于RNN来说,每个样本(词元)的预测,不仅以来于当前时刻的样本时序信息,还有部分来自于上一时刻的样本隐藏状态的信息。如下图所示。

对于一个Simple RNN,根据以下公式:
h t = a c t i v a t i o n ( W h h h t − 1 + W h x x t + b h ) \mathbf{h}_{t}=activation\left(\mathbf{W}_{h h} \mathbf{h}_{t-1}+\mathbf{W}_{h x} \mathbf{x}_{t}+\mathbf{b}_{h}\right) ht=activation(Whhht1+Whxxt+bh)

可以看到,简单的一个RNN只是在MLP的基础上加了一个 W h h h t − 1 W_{hh}h_{t-1} Whhht1,表示每个样本不仅仅学习到当前 t 时刻的输入,还可以学习到 t-1 时刻的过去输出。注意,这里 t-1时刻的 h t − 1 h_{t-1} ht1 O t − 1 O_{t-1} Ot1是同一个东西; W h h W_{hh} Whh W h x W_{hx} Whx也是同一个权重矩阵,只是在将不同时刻时把他们区别分开。

LSTM

拓展一下,对于后来面世的LSTM和GRU,增加了阀门gate概念,通过阀门gate控制输入单元Xt、记忆单元Ct、输出值ht的留存,来使得在信息流过程中避免出现RNN的梯度消失和爆炸:

  • 输入阀门:用于控制网络当前输入数据xt流入记忆单元的多少,即有多少可以保存到ct。
    i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i t ∈ [ 0 , 1 ] \begin{gathered} i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right) \\ i_{t} \in[0,1] \end{gathered} it=σ(Wi[ht1,xt]+bi)it[0,1]

  • 遗忘阀门:遗忘门是LSTM单元的关键组成部分,可以控制哪些信息要保留哪些要遗忘,并且以某种方式避免当梯度随时间反向传播时引发的梯度消失和爆炸问题。遗忘门控制自连接单元 ,可以决定历史信息中的哪些部分会被丢弃。即上一时刻记忆单元Ct-1中的信息对当前记忆单元Ct 的影响。
    f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f t ∈ [ 0 , 1 ] \begin{gathered} f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right) \\ f_{t} \in[0,1] \end{gathered} ft=σ(Wf[ht1,xt]+bf)ft[0,1]

  • 通过上述的输入阀门和遗忘阀门,来控制当前记忆单元C_t的输出。
    C t = f t ⋅ C t − 1 + i t ⋅ tanh ⁡ ( W c ⋅ [ h t − 1 , , x t ] + b c ) C_{t}=f_{t} \cdot C_{t-1}+i_{t} \cdot \tanh \left(W_{c} \cdot\left[h_{t-1,}, x_{t}\right]+b_{c}\right) Ct=ftCt1+ittanh(Wc[ht1,,xt]+bc)

  • 输出阀门:控制记忆单元ct对当前隐藏层输出值ht的影响。
    O t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) h t = O t ⋅ tanh ⁡ ( C t ) h t ∈ [ − 1 , 1 ] \begin{gathered} O_{t}=\sigma\left(W_{o} \cdot\left[h_{t-1}, x_{t}\right]+b_{o}\right) \\ h_{t}=O_{t} \cdot \tanh \left(C_{t}\right) \end{gathered}\\ h_{t} \in[-1,1] Ot=σ(Wo[ht1,xt]+bo)ht=Ottanh(Ct)ht[1,1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Wiggles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值