文章目录
上节课介绍了神经网络,神经网络的核心是通过一层层的感知器从输入数据中提取模式特征,关键是求解每一层的权重向量,通过反向传播结合梯度下降算法可以很容易的求解出来。那么神经网络应该配置多少神经元,配置多少层呢?这两个配置决定了神经网络的结构,而神经网络的结构设计是关键。这是本节课讨论的内容。
13.1 Deep Neural Network
首先对比一下浅层网络和深层网络。其中“深”与“浅”是指隐藏层的数目。两类网络的优缺点如下:
浅层网络:
- 更容易训练;
- 结构简单,容易设计;
- 理论上通过多个神经元同样可以达到深度神经网络的效果。
深层网络:
- 不容易训练;
- 结构复杂,不容易设计;
- fit能力过强;
- ……(之后介绍)
下面看一下其意义:
可以看到,神经网络将输入的图片看作一个个像素(pixel),不同的神经元关注的地方不同,通过不同的神经元来学习不同的特征,最后通过组合再做判断;对于浅层神经网络,需要单层配置多个神经元,这样会使得每层的负担(burden)过重,并且需要提取的特征会更复杂;对于深层神经网络来说,每层提取的特征较少,通过组合不同的层来提取复杂的特征,这在计算机视觉领域非常常用,即通过深层神经网络从比较复杂的原始数据中提取特征。下面看一下深度学习的挑战和关键技术:
深度神经网络的困难及其应对策略主要有四点:
- 网络结构不容易确定:针对不同领域的问题有不同的应对策略,例如在CV领域,常常通过卷积NN来提取features。
- 模型复杂度高:如果data足够,则不用担心overfit;但常常配置正则化方式。
- 不容易优化:梯度下降对起始点敏感,初始化方法重要,所以常常需要预训练。
- 计算量大,计算困难:常常使用小批量梯度下降,并用GPU训练。
需要注意的是正则化和初始化方法是深度神经网络的关键。下面看一个简单的两阶段的深度学习框架:
一般的深度学习流程包含两个阶段:
- 首先通过与训练的方法,找出隐藏层比较好的权重,并作为初始权重;
- 然后通过反向传播算法进行训练。
将着重介绍最简单的预训练技术以及正则化技术。
习题1:
13.2 Autoencoder
上一小节已经介绍了深度学习的基本架构,也知道权重初始化和正则化技术是DNN的关键,常通过两阶段的方式训练DNN。首先介绍第一个阶段——预训练是如何进行的。
神经网络中的权重实际上是对输入数据进行特征转换,或者说是对输入数据进行了编码(encoding)。一个好的神经网络的初始化权重,应该可以尽可能的包含该层输入的所有特征,以便下一层网络可以准确地解码(decode),并且层层传递过程中信息不会丢失,只是使用不同的表示形式。可以通过一个简单的神经网络来实现:
这类神经网络称为自动编码器(autoencoder)。实际上,自动编码器是在对输入数据做逼近恒等映射函数的操作。其中
w
i
j
(
1
)
w^{(1)}_{ij}
wij(1) 表示编码器权重,
w
i
j
(
2
)
w^{(2)}_{ij}
wij(2) 表示解码器权重。下面看一下这么做的好处:
如果真可以得到逼近恒等映射函数的自动编码器,那么其输入输出满足关系式:
g
(
x
)
≈
x
g(x) \approx x
g(x)≈x 。说明自动编码器可以通过隐藏层很好地学习输入数据的特征。那么对于监督学习来说,这些隐藏层实际上是在对输入数据进行特征转换,并且是很好的特征转换,即可以很好地表示输入数据。那么这组权重就可以作为初始的权重。对于无监督学习,自动编码器可以用来做密度估计(density estimation)。如果输入与输出满足关系式:
g
(
x
)
≈
x
g(x) \approx x
g(x)≈x ,则说明密度较大,如果输入与输出相差很远,则表示密度较小。特就是说可以根据输入
x
x
x 与
g
(
x
)
g(x)
g(x) 的差距来估计测试数据是落在密度较大还是密度较小的区域。自动编码器还以用来做离群值/异常值检测(outlier detection)。这样就可以从数据中学习到具有代表性的典型地表示,告诉网络哪些是典型资料,哪些不是典型资料,方便做预测。即自动编码器可以通过近似的恒等映射函数进行表示学习。
上图展示了基本的自动编码器的特点。自动编码器使用平方误差函数,因为层数较少,所以可以很容易的应用反向传播算法结合优化算法进行优化求解;通过自动编码器可以达到降维的效果,即将高维的输入特征空间转化为低维的特征表示;通常可以看做无监督学习方法,因为不需要样本标签;通常还限制编码和解码的权重是相同的,这样就起到了类似正则化的效果,即限制了算法的复杂度,但需要注意加上这个限制条件会使得计算梯度时比较复杂。在深度学习中,可以将自动编码器视为一个预训练的方法,通过逐层的训练,可以得到整个神经网络的预训练权重。自动编码器中的
d
~
\tilde{d}
d~ 等于下层的神经元个数。
除了自动编码器之外,还有许多其它的与训练方法,其基本思想都是通过不同的网络结构和正则化方法得到不同的复杂的(‘fancier’ )的自动编码器。
习题2:
13.3 Denoising Autoencoder
上一小节介绍了自动编码器可以通过预训练找出深度神经网络的初始化权重。本小节介绍深度学习中通过正则化控制模型复杂度的方法。
对于复杂度很高的模型一般需要正则化方法加以限制。常用的方法有:
- 设计网络时,加以限制;比如不用全连接的方式;
- 常用的正则化方法;
- early stopping;
下面复习一下过拟合的成因:
可以看出造成过拟合的关键原因之一是数据中含有噪声。这也为下一步处理指明了方向,那么应该如何处理噪声呢?一种直觉的做法是将噪声都去除掉;今天从另外一个角度考虑,即在数据中添加噪声。一个具有鲁棒性的自动编码器应该满足对于含有噪声/杂讯(noise)的输入,其输出也能很好地逼近不含noise的原始输入,这说明这个编码器对noise容忍度很高,称这类编码器为降噪自动编码器(denoising autoencoder)。如果自动编码器可以达到去除noise的目的,说明其抗噪能力很强,得到的初始权重更有鲁棒性。实际应用过程中,常常在原始数据中添加噪声数据,训练降噪自动编码器,让初始权重更有鲁棒性,起到了正则化作用。
习题3:
13.4 Principal Component Analysis
上文介绍的自动编码器都是非线性的情况,因为隐藏层使用的是
t
a
n
h
tanh
tanh 激活函数,其是非线性的。本小节介绍线性的自动编码器相关内容,主成分分析(Principal Component Analysis,PCA)与之有很大关联。首先看线性的自动编码器的情况:
考虑三个特殊的条件:
- 不包括 x 0 x_0 x0;
- 添加限制条件;
- 假设 d ~ < d \tilde{d} < d d~<d。
下面看一下线性自动编码器的误差函数:
直接通过最小化在输入样本上的误差
E
i
n
E_{in}
Ein 求得解析解是比较困难的,因为权重向量
w
i
j
w_{ij}
wij 的4次多项式。一个想法是通过线性代数的方法求解。其关键步骤有:
-
首先明确求解参数,即权重向量 W W W ,在误差函数的公式中,该向量以半正定矩阵的形式 W W T WW^T WWT 存在,一种做法是对其做 特征分解(Eigen decompose),又称为谱分解(Spectral decomposition),是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。那么问题就转化为求解矩阵 V V V 和 Γ \Gamma Γ 。经过分解之后得到的矩阵 V V V 中的向量是相互正交的(orthogonal),即满足 V V T = V T V = I d VV^T = V^TV = I_d VVT=VTV=Id。 V V V 表示正交矩阵(Orthogonal Matrix); I d I_d Id 表示第 d d d 个维度的单位矩阵(Identity Matrix)。 Γ \Gamma Γ 表示对角矩阵(Diagonal Matrix),对角线上各元素为特征值。这里需要注意,因为 W W W 的维度为 d × d ~ d \times \tilde{d} d×d~ ,其中 d ~ \tilde{d} d~ 表示编码器中隐藏层的维度,是一个相对较小的值,因此 W W T WW^T WWT 的秩(Rank)最大为 d ~ \tilde{d} d~ ,而 V V V 和 Γ \Gamma Γ 是由 W W W 分解而来的,因此对角矩阵 Γ \Gamma Γ 的秩最大也为 d ~ \tilde{d} d~ ,即主对角线上的元素不为零的个数最多为 d ~ \tilde{d} d~ 。经过分解,对 W W W 的限制就转化对对价矩阵 Γ \Gamma Γ 的限制。
-
经过特征分解之后,有 W W T x n = V Γ V T x n WW^Tx_n = V\Gamma V^Tx_n WWTxn=VΓVTxn。下面逐一来看,首先, V T x n V^Tx_n VTxn 表示向量 x n x_n xn 左乘正交矩阵 V T V^T VT ,其实际上是一种变换关系(在几何关系上,类似旋转或映射),只是改变了坐标系统。 V T x n V^Tx_n VTxn 继续左乘对角阵 Γ \Gamma Γ 得到 Γ V T x n \Gamma V^Tx_n ΓVTxn ,因为对角阵 Γ \Gamma Γ 主对角线上的元素至多有 d ~ \tilde{d} d~ 个不为零,所以 Γ V T x n \Gamma V^Tx_n ΓVTxn 至少有 d − d ~ d-\tilde{d} d−d~ 个元素等于零,其它不为零的位置,相当于做了缩放操作。最后继续左乘 V V V ,得到 V Γ V T x n V\Gamma V^Tx_n VΓVTxn ,表示通过系数(coefficients)和偏差(bias)转换为原始的坐标系,这样就可以比较与原始数据的误差。
-
可以将 x n x_n xn 替换为 V I V T x n VIV^T x_n VIVTxn ,乘以单位矩阵不影响原向量,相当于什么都没有做,只是为了便于公式推导。
接下来,通过优化
Γ
\Gamma
Γ 和
V
V
V 来最小化
E
i
n
E_{in}
Ein。首先看一下对角阵
Γ
\Gamma
Γ 的优化过程:
特征转换
V
V
V 对求模没有影响,因此可以去掉,那么最小化公式就转换为
m
i
n
Γ
∣
∣
(
I
−
Γ
)
(
s
o
m
e
v
e
c
t
o
r
)
∣
∣
2
min_{\Gamma} ||(I-\Gamma)(some \ vector)||^2
minΓ∣∣(I−Γ)(some vector)∣∣2 ,希望矩阵
(
I
−
Γ
)
(I-\Gamma)
(I−Γ) 中元素为零的个数越多越好,一种做法是让两个矩阵中对应元素尽可能相等,在上述两个矩阵中,即对角阵的主对角元素尽可能为1,这样就可以保证与单位阵
I
I
I 的主对角元素尽可能的相等,从而得到更多的零值。零多说明经过特征转换后的数据与原来的数据差距小,说明可以很好地表示原来的数据,并且特征维度更低,达到了降低算法复杂度的目的。对于对角阵
Γ
\Gamma
Γ 主对角线最多可以实现有
d
~
\tilde{d}
d~ 个1。确定了
Γ
\Gamma
Γ ,可以优化
V
V
V。
上式中,
I
d
−
d
~
I_d - \tilde{d}
Id−d~ 表示对角阵中不为零的元素组成的矩阵。接下来看看如何优化
V
V
V 。
当隐藏层的维度(神经元个数)为
d
~
\tilde{d}
d~ 时,
V
T
V^T
VT 中只有第一行
v
T
v^T
vT 有用,最大化问题转化为上式;接着引入拉格朗日乘子,转化为
∑
n
=
1
N
x
n
x
n
T
v
=
λ
v
\sum^N_{n=1}x_nx^T_nv=\lambda v
∑n=1NxnxnTv=λv。此时,易知
v
v
v 为矩阵
X
T
X
X^TX
XTX 的特征向量,
λ
\lambda
λ 为其对应的特征值,所以最优解
v
v
v 就是矩阵
X
T
X
X^TX
XTX 的最大特征值对应的特征向量。当
d
~
>
1
\tilde{d} >1
d~>1 时,求解方法类似,最优解
{
v
j
}
j
=
1
d
~
\{v_j \}^{\tilde{d}}_{j=1}
{vj}j=1d~ 就是矩阵
X
T
X
X^TX
XTX 前
d
~
\tilde{d}
d~ 个最大的特征值对应的特征向量。以上,就是线性自动编码器的推导过程。那么它与PCA有什么关系呢?
PCA的不同之处在于会减去原始数据的均值。一般认为,将高维数据投影(降维)到低维空间中,应保证数据的方差越大越好,噪声的方差越小越好,PCA正是基于此原理推导的。线性自动编码器和PCA都可用于数据压缩,但PCA有统计学理论作保证,更常用。
习题4:
Summary
本节课介绍了深度神经网络,相当于是神经网络的延伸。之后分别介绍了自动编码器,降噪自动编码器,以及线性的自动编码器。自动编码器可以用来做权重初始化,降噪自动编码器使得模型抗噪能力更强,更有鲁棒性,有类似正则化效果。线性自动编码器可以用来做数据压缩和降维。