机器学习技法笔记 – Deep Learning(深度学习)

Deep Neural Network

一言以概之的说,Deep Learning(深度学习)通常也指Deep Neural Network(深度神经网络),也即DNN。

DNN通常设计并使用了多层神经网络,相对于浅层神经网络,他们通常分别具有如下特点:

对于浅层神经网络,它通常具有训练速度快、层次结构简单、泛化能力强。

而对于深度神经网络,它通常较难训练、层次结构复杂、泛化能力非常强,对于一些特定问题中使用的特定的深度神经网络模型,如CNN时,它可能还具有一定的物理意义,例如下图用于手写数字识别的DNN:

可以看出,在该DNN中,第二层的神经元分别都只专注于原始图像的某一块区域,这使得在这种问题,特别是图像处理问题中,赋予了这些神经元以物理意义。

而对于上文提到的DNN存在的较难训练、层次结构复杂等问题,随着硬件软件的进步带来的性能提升,已经逐渐不再是主要的问题。

我们在上节提到,对于Neural Network而言,不同的\(w^{(l)}_{ij}\)的Initialization(初始化)与Regularization可能会带来非常不同的局部最优解。

所以在本节,我们将更专注于训练DNN时的Regularization与Initialization问题上。

AutoEncoder

所谓Initialization也即是Pre-training。接下来我们介绍一种在实际中非常流行的Pre-training技术,称之为AutoEncoder。

AutoEncoder使用了一种被称之为Information-Preserving Encoding的思想。

对于\(l+1\)层第\(j\)个神经元的输入\(s^{(l+1)}_{ij}\),它们本质上第\(l\)层的输入\(x^{(l)}_{i}\)向量左乘了一个权重矩阵\(w^{(l+1)}_{ij}\)得到的。

Information-Preserving Encoding认为,一个好的\(w^{(l+1)}_{ij}\)应该尽可能使得:

$$tanh(s^{(l+1)}_{ij}) =w^{(l+1)}_{ij} ·x^{(l)}_{i} ≈ x^{(l)}_{i}$$

而AutoEncoder即是这样一种技术:

某种意义上,AutoEncoder训练出的每层权重,更像是一个Approximating Identity Function(近似恒等函数),它的作用如下:

即对于Supervised Learning(监督式学习)来说,Identity Function可以用于发现某些数据集隐藏的具有代表性的特征,而对于Unsupervised Learning(非监督式学习)来说,某些时候可以用于孤立点检测。

对于Basic AutoEncoder(一种最基本的AutoEncoder),它的Error Function具有如下形式:

$$e = \sum^{d}_{i=1} (g_{i}(x) – x_i)^2$$

使用Basic AutoEncoder用于Pre-training过程如下:

  • 利用AutoEncoder与反向传播算法逐层训练神经网络。
  • 使用\(w^{(1)}_{ij} =w^{(2)}_{ji}\)用于Regularization。

Denoising AutoEncoder

本节将会介绍一种用于对抗噪声的AutoEncoder,一言以概之,即是在Pre-training的时候主动添加人工噪声,通过这样被称之为Denoising AutoEncoder的方式进行Pre-training后,在之后的训练中,将具有更强的鲁棒性:

截至目前,我们已经有了四种Regularization的方法,他们分别是:Structural Constraints(结构化约束)、L1、L2 Regularizer(权重衰减正则化)、Early Stopping(提前停止)。

Principal Component Analysis

在本节中,我们将从最优化理论角度来分析为什么使用AutoEncoder来做Pre-training可以使得最终的DNN表现更好。

为了简化问题,我们假设某DNN的第\(k\)层输出\(h(x)\)具有如下形式:

$$h_k(x) = \sum^{\widetilde{d}}_{j=0} w_{kj}(\sum^{d}_{i=1} w_{ij}x_{i})$$

同时约定:

  • 移除\(x_0\)偏置项
  • 以\(w^{(1)}_{ij} = w^{(2)}_{ji} =w_{ij}\)作为Regularizer
  • 假设输出维度\( \tilde{d}\)远小于输入维度\(d\):

同时,将\(h_{k}(x)\)写成矩阵乘法形式如下:

$$\mathbf{h(x) = \color{red}{W}\color{blue}{W^{T}}X}$$

在上式中:

  • \(X\)是\(d×1\)的矩阵
  • \(\color{blue}{W^T}\)是\(\tilde{d} × d\)的矩阵
  • \(\color{blue}{W^T}X\)是\(\tilde{d}×1\)的矩阵
  • \(\color{red}{W}\)是\(1×\tilde{d}\)的矩阵
  • \(\color{red}{W}\color{blue}{W^T}X\)是实数

其Error Function具有如下形式:

$$E_{in}(W) = \frac{1}{N} \sum^{N}_{n=1} \begin{Vmatrix}X_n – \color{red}{W}\color{blue}{W^{T}}X_n \end{Vmatrix}^2$$

为了最小化\(E_{in}\),回忆线性代数的知识,我们首先对\(\color{red}{W}\color{blue}{W^{T}}\)做特征分解:

$$\color{red}{W}\color{blue}{W^{T}} =\color{red}{V}\Gamma\color{blue}{V^{T}}$$

其中,\(V\)为\(\Gamma\)矩阵中每个特征值对应的特征向量构成的矩阵,\(\Gamma\)为特征值构成的对角矩阵。

我们令:

$$X_n = \color{red}{V}I\color{blue}{V^{T}}X_n$$

则可以将原式改写为以下形式:

$$\min\limits_{v}\min\limits_{\Gamma} \frac{1}{N} \sum^{N}_{n=1} \begin{Vmatrix}\color{red}{V}I\color{blue}{V^{T}}X_n – \color{red}{V}\Gamma\color{blue}{V^{T}}X_{n} \end{Vmatrix}^2$$

首先最优化\(\Gamma\),此时\(V\)可以视为常数,通过观察上式,我们可以发现原函数值只与\(I – \Gamma\)有关,其中\(\Gamma\)是对角矩阵,它的秩小于等于\(\tilde{d}\),我们希望\(I – \Gamma\)的值越小越好,即\(\Gamma\)越接近单位矩阵\(I\)越好。

所以,我们将最优化的\(\Gamma\)记作:

$$\begin{bmatrix} I_{\tilde{d}} & 0 \\ 0 & 0 \\ \end{bmatrix}$$

然后我们将\(\Gamma\)视为常数,最优化\(V\),此时原函数可以改写为以下形式:

$$\min\limits_{V} \sum^{N}_{n=1} \begin{Vmatrix} \begin{bmatrix} 0 & 0 \\ 0 &I_{d- \widetilde{d}} \\ \end{bmatrix}V^{T}X_{n} \end{Vmatrix}^2$$

我们通过替换\(I_{d-\tilde{d}}\)为\(I_{\tilde{d}}\)改变了原函数的符号,将最小化问题替换为最大化问题:

$$\max\limits_{V} \sum^{N}_{n=1} \begin{Vmatrix} \begin{bmatrix}I_{\widetilde{d}} & 0 \\ 0 & 0 \\ \end{bmatrix}V^{T}X_{n} \end{Vmatrix}^2 $$

我们甚至可以通过观察发现,我们希望\(V\),即由特征向量组成的矩阵越大越好。

我们首先考察一种简单的情况,即\(\tilde{d}=1\),则原函数可由矩阵形式改写回原形式:

$$\begin{align} \max\limits_{V} \sum^{N}_{n=1} v^{T}x_{n}x^{T}_{n}v  && \text{subject to } v^{T}v = 1 \end{align}$$

上式是一个等式约束的最优化问题,回忆拉格朗日乘数法:即原函数的梯度与约束条件的梯度平行且方向相反,通过解其Lagrange Function来求得最优解:

$$\nabla{E_{in}} = \sum^{N}_{n=1} x_{n}x^{T}_{n}v – \lambda v = 0$$

而最优解的\(v\)正是在约束\(v^Tv=1\)下矩阵\(X^TX\)(输入数据集构成的\(n×n\)矩阵)的最大的一组特征向量。

而对于更一般\(\tilde{d}\),因为\(I_{\tilde{d}}\)是对角矩阵且有可能非满秩,即存在特征值为\(0\)为行列,所以对于每一个非零的特征值\(\gamma_j\),都存在一个最大的\(v_j\)与之对应,他们都是\(X^TX\)的特征向量。

求出了矩阵\(\Gamma\)与矩阵\(V\),则原矩阵\(\color{red}{W}\color{blue}{W^{T}}\)即为所求。

即我们得到了第\(k-1\)层各个输入与\(k\)层各个输入的特征转换关系,然后通过反向传播算法,进而计算出各个层的最佳权重,从而完成Pre-training。

以上是对Deep Learning在台湾大学机器学习技法课程的笔记总结。

在下一篇文章中,将会讨论Radial Basis Function Network。

《机器学习技法笔记 – Deep Learning(深度学习)》上有2条评论

评论已关闭。