为了解决深度学习需要大量标注数据集的问题,优化器元学习方法通过利用元网络来学习最佳优化器,从而帮助实现我们当前功能的基础网络具有更好的性能。这种方法有一个比较长名字:通过梯度下降来学习怎样学习梯度下降算法。这样说比较抽像,我们以一个具体的例子业说明这一过程。
在传统的深度学习中,我们首先会根据训练样本计算出代价函数,然后求出代价函数对连接权值和偏置值的微分,再在优化器的帮助下,根据梯度下降算法,调整连接权值和偏置值,从而达到使代价函数值最小,最终求出连接权值和偏置值的最优解。
在优化器元学习中,我们用基础网络来实现图像分类任务,用一个递归神经网络来学习优化器。我们同样利用训练样本求出代价函数值,然后求出代价函数对连接权值和偏置值的微分,接下来我们将该微分作为第
t
t
t时刻的输入,加上元网络
t
−
1
t-1
t−1时刻的隐藏状态,输入到元网络中,元网络输出基础网络连接权值和偏置值调整量,我们据此调整基础网络的连接权值和偏置值,循环往复,从而最终得到执行图像分类任务最佳的基础网络架构。
接下来,我们利用数学语言来描述这一过程。我们假设用于图像分类的基础网络为
f
f
f,其参数为
θ
\boldsymbol{\theta}
θ,我们需要找到最佳的参数
θ
∗
\boldsymbol{\theta}^{*}
θ∗,来使得代价函数值达到最小值。
我们假设基础网络的代价函数为
L
(
θ
)
\mathcal{L}(\boldsymbol{\theta})
L(θ),在第
t
t
t个时间点,求出基础网络的代价函数,然后求出长价函数对网络参数(连接权值和偏置值)的微分:
∇
t
(
θ
)
=
∂
L
(
θ
)
∂
θ
\nabla_{t}(\boldsymbol{\theta})=\frac{\partial{\mathcal{L(\boldsymbol{\theta})}}} { \partial{\boldsymbol{\theta}} }
∇t(θ)=∂θ∂L(θ)
我们将上式的值送到元网络,其为一个递归神经网络(RNN),作为
t
t
t时刻输入,联合元网络在
t
−
1
t-1
t−1时刻的隐藏状态
h
t
−
1
\boldsymbol{h}_{t-1}
ht−1,元网络会最终产生一个输出
g
t
\boldsymbol{g}_{t}
gt和
t
t
t时刻的隐藏值
h
t
\boldsymbol{h}_{t}
ht,如下图所示:
我们设定元网络的参数为
ϕ
\boldsymbol{\phi}
ϕ,基础网络参数更新规则为:
θ
t
+
1
:
=
θ
t
+
g
t
\boldsymbol{\theta}_{t+1}:=\boldsymbol{\theta}_{t} + \boldsymbol{g}_{t}
θt+1:=θt+gt
通常我们用于优化器元学习的元网络为长短时记忆网络(LSTM),所以我们会首先讲解长短时记忆网络(LSTM)基础内容,然后回顾传统深度学习梯度调整算法,最后是将长短时记忆网络(LSTM)与深度学习算法相结合。
长短时记忆网络(LSTM)简介
根据\cite{r000001}中的介绍,长短时记忆网络(LSTM)是一种行之有效的递归神经网络(RNN)架构。我们先来看普通的递归神经网络(RNN),这是一种将自身隐藏层的输出又输入给自身隐藏层的网络结构,如下图所示:
如上图所示,神经元接收
t
t
t时刻输入
x
t
x_t
xt,会产生一个输出
h
t
h_t
ht,其会将
h
t
h_t
ht作为隐藏状态。同时还可以将这个输出
h
t
h_t
ht接入到输出层产生
t
t
t时刻输出
y
t
y_t
yt,当
t
+
1
t+1
t+1时刻时,输入为
x
t
+
1
x_{t+1}
xt+1,同时将
t
t
t时刻隐藏层输出
h
t
h_t
ht作为输入,会产生隐藏层输出
h
t
+
1
h_{t+1}
ht+1,作为
t
+
1
t+1
t+1时刻隐藏层状态,同时可以将
h
t
+
1
h_{t+1}
ht+1输入到输出层,产生
t
+
1
t+1
t+1时刻输出
y
t
+
1
y_{t+1}
yt+1。同时我们规定在
t
=
0
t=0
t=0时刻隐藏层的状态为0,则可以将递归神经网络表示为如下所示形式:
以上我们是以一个递归神经网络(RNN)神经元为例,实际上可以将图中的圆圈视为神经网络的层,这时图中的标量就变为向量了,其他规则均不变。\newline
我们可以将递归神经网络视为一个具有元限多层的多层感知器模型,只不过这个网络每一层的参数都相同,通过将上一时刻隐藏层的输出重新输入,可以使网络具有记忆以前输入的能力,也就是具有了记忆力,其与一般的多层感知器模型相比,它虽然层次多,但是参数量很少(只有一层的参数量),所以递归神经网络(RNN)在实践中通常比较难于训练达到收敛,但是一旦收敛,由于它的参数量较小,它比较不容易产生overfitting,这是递归神经网络(RNN)的一大优势。但是普通递归神经网络(RNN)会出现由于是由相同的多层组成,这时极易发生梯度爆炸和梯度消失现象,因为递归神经网各相当于是求一个数的n次方,而且n是一个很大的值,如果这个值明显大于1,则很容易得到无穷大的结果,也就是梯度爆炸现象,而如果这个数明显小于1,则很容易使其最终值为0,也就是梯度消失问题。
为了解决这个问题,研究人员提出了长短时记忆网络(LSTM)。
长短时记忆网络(LSTM)是在1997年提出的,原始论文中的架构图如下所示:
如图所示,长短时记忆网络(LSTM)由Cell组成,每个Cell里有输入门、遗忘门、输出门和Cell体组成。其中输入门的作用是控制是否允许输入信号进入,遗忘门是控制是否需要忘记过去的内容,输出门控制是否需要输出信号。长短时记忆网络(LSTM)的展开图如下所示:
每个长短时记忆网络(LSTM)单元在
t
t
t时刻的输入由三部分组成,一个是变化很快的隐藏层状态
h
t
−
1
\boldsymbol{h}_{t-1}
ht−1,代表短期记忆;另一个是变化很慢的Cell状态
c
t
−
1
\boldsymbol{c}_{t-1}
ct−1,代表长期记忆;最后一个是时刻
t
t
t的输入信号。同样,长短时记忆网络(LSTM)单元在
t
t
t时刻的输出也由三部分组成:第一个是隐藏层状态
h
t
\boldsymbol{h}_{t}
ht;第二个是Cell的状态
c
t
\boldsymbol{c}_{t}
ct;第三个是
将
h
t
\boldsymbol{h}_{t}
ht接入到输出层。我们可以将长短时记忆网络(LSTM)单元连接起来。\newline
下面我们来看长短时记忆网络(LSTM)单元的内部结构,由于原始论文中的网络不太直观,我们采用\cite{r000001}中所采取的结构:
下面我们分步来描述长短时记忆网络(LSTM)工作原理:
通过遗忘门
遗忘门的激活函数是sigmoid函数,可以控制信号是否可以通过,以及通过多少。如图所示:
f
t
=
σ
(
W
f
⋅
[
h
t
−
1
,
x
t
]
+
b
f
)
\boldsymbol{f}_{t}=\sigma( W_{f} \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_{t}] + \boldsymbol{b}_{f} )
ft=σ(Wf⋅[ht−1,xt]+bf)
如上所示,
t
−
1
t-1
t−1时刻隐藏层状态
h
t
−
1
\boldsymbol{h}_{t-1}
ht−1和
t
t
t时刻的输入叠加在一起,作为遗忘门的输入,乘以遗忘门的权值矩阵
W
f
W_{f}
Wf,再加上遗忘门的偏置值
b
f
\boldsymbol{b}_{f}
bf,最后再经过
σ
\sigma
σ激活函数,得到遗忘门的输出
f
t
\boldsymbol{f}_{t}
ft。通过对
W
f
W_{f}
Wf和
b
f
\boldsymbol{b}_{f}
bf的学习,可以根据当前输入
x
t
\boldsymbol{x}_{t}
xt,控制短期记忆
h
t
−
1
\boldsymbol{h}_{t-1}
ht−1可以进入本步计算的量,决定是记住还是遗忘一些内容。
通过输入门
输入门的激活函数也是sigmoid函数,控制输入信号可以通过的程度,如下图所示:
输入门首先通过下式来控制输入信号可进入的程度:
i
t
=
σ
(
W
i
⋅
[
h
t
−
1
,
x
t
]
+
b
i
)
\boldsymbol{i}_{t}=\sigma( W_{i} \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_{t}] + \boldsymbol{b}_{i} )
it=σ(Wi⋅[ht−1,xt]+bi)
式中
i
t
\boldsymbol{i}_{t}
it中每个元素均为一个0$\sim$1之间的数,代表该维度允许输入信号进入的多少。
接下来我们对输入信号在输入Cell前进行预处理:
C
~
t
=
t
a
n
h
(
W
C
⋅
[
h
t
−
1
,
x
t
]
+
b
C
)
\tilde{\boldsymbol{C}}_{t}=tanh( W_{C} \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_{t}] + \boldsymbol{b}_{C} )
C~t=tanh(WC⋅[ht−1,xt]+bC)
更新Cell
更新长期记忆状态,如下图所示:
Cell的状态变化公式为:
C
t
=
f
t
⊗
C
t
−
1
+
i
t
⊗
C
~
t
\boldsymbol{C}_{t}=\boldsymbol{f}_{t} \otimes \boldsymbol{C}_{t-1} + \boldsymbol{i}_{t} \otimes \tilde{\boldsymbol{C}}_{t}
Ct=ft⊗Ct−1+it⊗C~t
从这个式子可以清楚的看出,遗忘门的输出
f
t
\boldsymbol{f}_{t}
ft控制可以保留多少过去的记忆,而输入门的输出
i
t
\boldsymbol{i}_{t}
it控制经过预处理后可以进入的程度。
产生输出
接下来我们产生隐藏层输出:
首先通过输出门确定输出控制向量:
o
t
=
σ
(
W
o
⋅
[
h
t
−
1
,
x
t
]
+
b
o
)
\boldsymbol{o}_{t}=\sigma( W_{o} \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_{t}] + \boldsymbol{b}_{o} )
ot=σ(Wo⋅[ht−1,xt]+bo)
最后确定隐藏层的输出即本时刻的状态:
h
t
=
o
t
⊗
t
a
n
h
(
C
t
)
\boldsymbol{h}_{t}=\boldsymbol{o}_{t} \otimes tanh(\boldsymbol{C}_{t})
ht=ot⊗tanh(Ct)
另外,通常将
h
t
\boldsymbol{h}_{t}
ht接入到输出层,可以产生本时刻的输出
y
t
\boldsymbol{y}_{t}
yt。
本节讲述了优器元网络中的元网络基础结构之长短时记忆网络(LSTM),在下一节中我们将介绍优化器元网络的具体内容。
参考资料
长短时记忆网络(LSTM)介绍:http://colah.github.io/posts/2015-08-Understanding-LSTMs/