1. 深度学习为什么难训练?
之前提到过深度学习,那么深度学习跟普通的神经网络相比,难点在于哪里呢?
1.1 梯度的不稳定性
深度学习的根本问题在于梯度的不稳定性。
σ导数在 σ′(0) = 1/4 时达到最⾼。现在,如果我们使⽤标准⽅法来初始化⽹络中的权重,那么会使⽤⼀个均值为 0 标准差为 1 的⾼斯分布。因此所有的权重通常会满⾜
|wj|<1
。有了这些信息,我们发现会有
|wjσ(sj)|<14
。并且在我们进⾏了所有这些项的乘积时,最终结果肯定会指数级下降:项越多,乘积的下降的越快。
倘若选择较大的权重,就会出现梯度爆炸现象。
总之,梯度是不稳定的,会出现前面的隐藏层与后面的隐藏层学习速度差距太大这一现象。
1.2 模型复杂度太高
使用深度学习,将会有很多的层次、很多的神经元。这将会增加我们的决策难度。
如何组织网络结构?如何克服过度拟合?如何快速的计算?
根据之前我们的讨论,最关键的问题是解决梯度不稳定这一问题。其实梯度不稳定的影响在于不同层次之间的学习速率差距很大,从而导致学习的时间复杂度太高。如何解决这一问题呢?
2. 深度学习的预训练
一层一层训练的话,我们的问题就解决了。深度学习的基本构架如下:
- 首先逐层构建单层神经元,这样每次都是训练一个单层网络。
- 当所有层训练完后,再使用反向传播算法。
现在的问题是:如何逐层训练?
回想一下深度学习的原理:就是逐层次抽象;层次越高,抽象程度越强。只要我们保证每个抽象层次丢失的信息很少,那么这个抽象过程就是成功的。
2.1 自动编码
我们将抽象的过程称为编码。
如何训练这一层神经元?就是
x
编码之后得到的结果解码之后
approximating Identity Function
上面图片表示的是一个approximating Identity Function。他有什么作用呢?
对于监督式学习来说,它相当于对输入进行了特征转换,学习到了另一种表示x的方法;对于非监督式学习来说,它捕捉到了训练集大多数数据的典型结构。
那么我们使用这一策略来逐层训练神经元即可。
2.2 自动编码的正则化
在神经网络那一讲中,我们提到了L1/L2正则化、提前终止,drop out等等正则化技巧,现在我们来看,另一种方式:在自动编码的过程中假如正则化技巧。
2.2.1 稀疏自动编码
对自动编码训练过程加上L1正则化。也即使得损失函数为
2.2.2 降噪自动编码
我们知道过拟合就是对噪声太敏感,如果模型抗噪声能力强一些,那么过拟合程度就会少一点。
训练数据加入噪声,自动编码器必须学习去去除这种噪声而获得真正的没有被噪声污染过的输入。因此,这就迫使编码器去学习输入信号的更加鲁棒的表达。
3. 网络结构
确定使用怎样的网路结构也是一个难题。
3.1 卷积神经网络
仍然以手写数字识别为例。使用全连接的网络结构是有点奇怪的。原因是这样的⼀个⽹络架构不考虑图像的空间结构。例如,它在完全相同的基础上去对待相距很远和彼此接近的输⼊像素。在于图像有关的神经网络中,我们多使用卷积神经网络。
卷积神经网络有三个概念:局部感受野( local receptive fields) , 共享权重( shared weights) ,和混合( pooling)。
其中局部感受野指的是:输入神经元只考虑邻近的一个局部区域:
假设局部感受野为5*5,这样如果输入神经元是28*28,那么第一个隐藏层就是24*24。
共享权重是指:所有局部感受野拥有相同的权重和偏置。这是什么意思呢?这意味着第⼀个隐藏层的所有神经元检测完全相同的特征,只是在输⼊图像的不同位置。
因为这个原因,我们有时候把从输⼊层到隐藏层的映射称为⼀个特征映射。我们把定义特征映射的权重称为共享权重。我们把以这种⽅式定义特征映射的偏置称为共享偏置。共享权重和偏置经常被称为⼀个卷积核或者滤波器。
很自然的,我们不可能只检测一个特征。譬如人脸,需要检测眼睛、鼻子、嘴巴等等。所以⼀个完整的卷积层由⼏个不同的特征映射组成:
混合层: 除了刚刚描述的卷积层,卷积神经⽹络也包含混合层( pooling layers)。混合层通常紧接着在卷积层之后使⽤。它要做的是简化从卷积层输出的信息。详细地说,⼀个混合层取得从卷积层输出的每⼀个特征映射并且从它们准备⼀个凝缩的特征映射。例如,混合层的每个单元可能概括了前⼀层的⼀个(⽐如) 2 × 2 的区域。作为⼀个具体的例⼦,⼀个常⻅的混合的程序被称为最⼤值混合( max-pooling)。在最⼤值混合中,⼀个混合单元简单地输出其 2 × 2 输⼊区域的最⼤激活值。
我们可以把最⼤值混合看作⼀种⽹络询问是否有⼀个给定的特征在⼀个图像区域中的哪个地⽅被发现的⽅式。然后它扔掉确切的位置信息。直观上,⼀旦⼀个特征被发现,它的确切位置并不如它相对于其它特征的⼤概位置重要。⼀个很⼤的好处是,这样可以有很多被更少地混合的特征,所以这有助于减少在以后的层所需的参数的数⽬。
⽹络中最后连接的层是⼀个全连接层。更确切地说,这⼀层将最⼤值混合层的每⼀个神经元连接到每⼀个输出神经元。