MLP
考虑一个只有一个隐藏层的MLP(多层感知机)。如下:

给定数据样本X∈Rn×d\boldsymbol{X} \in \mathbb{R}^{n \times d}X∈Rn×d,其中 nnn 为样本数量,ddd 为特征向量的维度。ϕ\phiϕ 为隐藏层的激活函数,隐藏层的输出为H∈Rn×h\boldsymbol{H} \in \mathbb{R}^{n \times h}H∈Rn×h,其中 hhh 为隐藏层神经元个数, H\boldsymbol{H}H 的计算公式为:
H=ϕ(XWxh+bh)
\boldsymbol{H} = \phi(\boldsymbol{X} \boldsymbol{W}_{xh} + \boldsymbol{b}_h)
H=ϕ(XWxh+bh)
其中隐藏层权重参数Wxh∈Rd×h\boldsymbol{W}_{xh} \in \mathbb{R}^{d \times h}Wxh∈Rd×h,隐藏层偏差参数 bh∈R1×h\boldsymbol{b}_h \in \mathbb{R}^{1 \times h}bh∈R1×h。若输出层为Linear层,输出个数为 qqq,则隐藏层的H\boldsymbol{H}H作为输出层的输入,输出层的输出为
O=HWhq+bq
\boldsymbol{O} = \boldsymbol{H} \boldsymbol{W}_{hq} + \boldsymbol{b}_q
O=HWhq+bq
其中输出变量O∈Rn×q\boldsymbol{O} \in \mathbb{R}^{n \times q}O∈Rn×q, 输出层权重参数Whq∈Rh×q\boldsymbol{W}_{hq} \in \mathbb{R}^{h \times q}Whq∈Rh×q, 输出层偏差参数bq∈R1×q\boldsymbol{b}_q \in \mathbb{R}^{1 \times q}bq∈R1×q。
RNN
将上面的网络结果简化为如下:

在该网络加上一个时间维度,如下所示:

此时,给定数据样本Xt∈Rn×d\boldsymbol{X_t} \in \mathbb{R}^{n \times d}Xt∈Rn×d是时间步 ttt 的输入。隐藏层的输出为Ht∈Rn×h\boldsymbol{H_t} \in \mathbb{R}^{n \times h}Ht∈Rn×h, 此时,Ht\boldsymbol{H_t}Ht 的计算需要使用到上一个时间步的Ht−1\boldsymbol{H_{t-1}}Ht−1,Ht\boldsymbol{H_t}Ht 的计算公式为:
Ht=ϕ(XtWxh+Ht−1Whh+bh) \boldsymbol{H_t} = \phi(\boldsymbol{X_t} \boldsymbol{W}_{xh} + \boldsymbol{H_{t-1} W_{hh}} + \boldsymbol{b}_h) Ht=ϕ(XtWxh+Ht−1Whh+bh)
与多层感知机相比,这里新增了Ht−1Whh\boldsymbol{H}_{t-1} \boldsymbol{W}_{hh}Ht−1Whh这一项。由上式中相邻时间步的隐藏变量Ht\boldsymbol{H}_tHt和Ht−1\boldsymbol{H}_{t-1}Ht−1之间的关系可知,这里的隐藏变量能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。
Ot=HtWhq+bq
\boldsymbol{O_t} = \boldsymbol{H_t} \boldsymbol{W}_{hq} + \boldsymbol{b}_q
Ot=HtWhq+bq
输出与多层感知机类似。