动手学深度学习9.3 深度循环神经网络

237 阅读2分钟

这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战

更多可以看这里:草履虫都能看懂的 白话解析《动手学深度学习》专栏(juejin.cn)

还在更新中…………


这一节写的是深度循环神经网络,有的也称之为堆叠循环神经网络(Stacked Recurrent Neural Network,SRNN),即把多个循环网络堆叠起来。堆叠循环神经网络具体可以看邱锡鹏老师的《神经网络与深度学习》。

之前学神经网络的时候我们知道单层神经网络就是只有一个输入层和一个输出层,多层感知机才会有隐藏层。

其实RNN也可以有多个隐藏状态。

之前我们讨论的RNN只有一个隐藏状态,长这样:

image.png

多个隐状态的深度循环神经网络长下边这样,是1991年被提出的深度RNN(Recurrent Multi-Layer Perceptron,RMLP)。

image.png

模型一目了然就不再赘述了,看不懂图上吗,模型的建议回去复习RNN。

公式可以简写为:

Ht1=f1(Ht11,Xt)...Htj=fj(Ht1j,Htj1)...Ot=g(HtL)\begin{aligned} &\mathbf{H}_{t}^{1}=f_{1}\left(\mathbf{H}_{t-1}^{1}, \mathbf{X}_{t}\right) \\ & ... \\ &\mathbf{H}_{t}^{j}={ f}_{j}\left( \mathbf{H}_{t-1}^{j}, \mathbf{H}_{t}^{j-1}\right) \\ & ... \\ &\mathbf{O}_{t}=g\left(\mathbf{H}_{t}^{L}\right) \end{aligned}

解析

  • ffgg都是对应的函数计算,在这里仅表示映射关系。

  • Ht(1)=ϕl(XtWxh(1)+Ht1(l)Whh(1)+bh(1))\mathbf{H}_t^{(1)} = \phi_l(\mathbf{X}_t \mathbf{W}_{xh}^{(1)} + \mathbf{H}_{t-1}^{(l)} \mathbf{W}_{hh}^{(1)} + \mathbf{b}_h^{(1)})

    第一层就是和普通的RNN一样的计算。每一时间步的隐状态都由本时间步的输入和上一时间步的隐状态所决定。

  • Ht(j)=ϕl(Ht(j1)Wxh(j)+Ht1(j)Whh(j)+bh(j))\mathbf{H}_t^{(j)} = \phi_l(\mathbf{H}_t^{(j-1)} \mathbf{W}_{xh}^{(j)} + \mathbf{H}_{t-1}^{(j)} \mathbf{W}_{hh}^{(j)} + \mathbf{b}_h^{(j)})

    中间层无非就是把输入XX换成HH。之前是用输入作来计算,现在深层的隐状态用浅层的隐状态计算。

  • Ot=Ht(L)Who+bo\mathbf{O}_t = \mathbf{H}_t^{(L)} \mathbf{W}_{ho} + \mathbf{b}_o

    输出也可普通的RNN一样计算。

  • 与多层感知机一样,隐藏层的数目 LL 和隐藏单元的数目 hh 都是超参数,可以由我们来调整或指定。

另外,用门控循环单元或长短期记忆网络的隐藏状态来代替上边的隐藏状态进行计算,可以很容易地得到深度门控循环神经网络。