Deep Learning学习笔记(2)——前馈神经网络

读《神经网络与深度学习》一书,随笔。

上篇提到前馈神经网络,那么针对多层的网络,如何求解隐层的权值呢?Hiton提出了BP算法,其核心思想是信号正向传播和误差反向传播,将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号作为修正各单元权值的依据。

1. BP算法的问题

5层以内的神经网络,可以用BP算法训练,5层以上的神经网络用BP算法训练就很不理想。具体地,BP算法存在如下问题:

(1)梯度越来越稀疏:从顶层往下,误差校正信号越来越小;

(2)收敛到局部最小值。主要原因是,深度结构涉及多个非线性处理单元,非凸目标函数中普遍存在局部最小值,随机初始化参数会导致陷入局部最优中出不来;

(3)只能用有标签的数据来训练,现实中大部分数据是没有标签的,大脑却可以从没有标签的数据中学习。

2. 深度学习训练过程

步骤1:用无监督自下而上一层一层训练,每一层单独训练,例如,在学习完第n-1层后,将n-1层的输出作为第n层的输入,训练第n层。

步骤2:最上层改用监督学习,依据误差反向调整(fine-tune)每层参数。

上述步骤1可以看做是特征学习的过程,目的是挑选更好的特征(如何挑选见下节)。这和传统机器学习中用\chi^{2}检验等手段进行特征选择是一回事。步骤2本质上就是BP算法,只不过在前面加上了个预训练,好处是整个模型的参数不是随机初始化的,而是通过一定的算法挑选了最接近全局最优的区域,能有效避免陷入局部最优。

3. 自编码器(AutoEncoder,AE)

上述步骤1中学习特征用的方法就是自编码器。其定义是,输入I,让输入经过S_{1},S_{2},...S_{n}个隐层之后输出值和输入相等,即没有信息损失。每个隐层都可以看成输入信息的另一种表示,即一层特征。隐层中神经元数目要小于输入层神经元数目,这是为了实现压缩表示,更高的抽象,特征的降维。

从最原始的自编码器衍生出很多不同的种类,现实中更多使用的是衍生类:

— 降噪自编码器(Denoising Autoencoder,DAE),训练时输入添点噪音,即输入的数据有一部分是“损坏”的

— 稀疏自编码器(Sparse Autoencoder),在AE的基础上加上正则化项L1,从而约束每一层的节点大部分都要为0 

— 栈式自编码器(Stacked Autoencoder,SAE),由多层稀疏自编码器级联而成,一层比一层神经元少,层提取抽象特征

对比抗噪效果:

栈式自编码器>降噪自编码器>自编码器

栈式自编码器缺点是:每层的贪婪学习权值矩阵,也带来了过长的训练时间。在大量的数据面前 DNN的效果已经不差于预训练的深度学习结构了。最终DBN也是看成是“生成模型”。CNN也没有pre-train过程,训练算法也是用BP。因为加入卷积可以更好的处理2D数据,例如图像和语音,并且目前看来相比其它网络有更好的表现。

 

 

你可能感兴趣的:(Deep,Learning,深度学习,神经网络,人工智能)