深度学习概述
深度学习是利用包含多个隐藏层的人工神经网络实现的学习。两个隐藏层足以解决任何类型的非线性分类问题,因而浅层神经网络最多只会包含两个隐藏层。相比于浅层神经网络,正是这“多个”隐藏层给深度学习带来了无与伦比的优势。 在深度学习中,每个层可以对数据进行不同水平的抽象,层间的交互能够使较高层在较低层得到的特征基础上实现更加复杂的特征提取。不同层上特征的组合既能解决更加复杂的非线性问题,也能识别更加复杂的非线性模式。
推动深度学习走到聚光灯下的还是工程上的两大进步,也就是数据的井喷和计算力的飙升。
深度前馈网络
深度前馈网络(Deep Feedforward Network)是具有深度结构的前馈神经网络,可以看成是进化版的多层感知器。与只有一个或两个隐藏层的浅层网络相比,深度前馈网络具有更多的隐藏层数目,从而具备了更强的特征提取能力。
网络架构的建立、损失函数的选择、输出单元和隐藏单元的设计、训练误差的处理等问题就成为深度前馈网络设计中的一系列核心问题。
-网络架构的建立:在深度前馈网络的设计中,确定架构是首要考虑的关键问题。架构决定着网络中包含多少基本单元,以及这些基本单元之间如何相互连接。使用深度架构的模型既能减少表示目标函数时所需要的单元数量,也能有效降低泛化误差,在一定程度上抑制过拟合的发生。深度架构采用的最常见的方式是全连接,意味着相邻层次中的任意神经元都两两相连。深度前馈网络也利用梯度信息进行学习,在处理误差时采用的是反向传播方法,利用反向传播求出梯度后再使用随机梯度下降法寻找损失函数的最小值。
-损失函数的选择是深度神经网络设计中另一个重要环节。深度前馈网络选择损失函数的准则与其他机器学习算法并无二致:回归问题的损失函数通常是最小均方误差,而分类问题的损失函数通常是交叉熵(Cross-Entropy)。 交叉熵
损失函数
其实无论是最小均方误差还是交叉熵,体现的都是概率论中最大似然估计的原理。 输出层的作用是对隐藏层提取出的特征施加额外的变换以得到输出,变换的形式则有多种选择。最简单的变换形式就是线性变换。除了线性变换,对数几率函数也是一种常用的变换函数,将对数几率函数加以推广就可以得到 softmax 函数,也叫柔性最大值函数。对数几率函数只能解决二分类问题,softmax 函数则可以解决多分类问题,也就是每个样本可以同时属于不同的类别。
-而在深层前馈网络的设计中,一个独有的问题就是隐藏单元的设计,也就是隐藏神经元的传递函数如何选择。但这个问题目前尚不存在放之四海而皆准的通用准则,关于这个环节的有限知识全都集中在一类常用的激活函数上,也就是整流线性单元(Rectified Linear Unit, ReLU)。
整流线性单元的一个缺点是它可能会“杀死”特定的隐藏神经元,因为一旦取值为 0,这个函数就不会重新激活。解决这个问题的方法是对原始函数做一些微小的修正,得到的变体包括渗漏整流单元(Leaky ReLU)和指数整流单元(Exponential ReLU),它们的共同点是将原来的 0 输出替换为一个较小的数值,以避免神经元的失效。除了整流线性单元之外,对数几率函数和双曲正切函数等其他函数也可以用于隐藏神经元中,但并不常见。
正则化从概率论角度看,许多正则化技术对应的是在模型参数上施加一定的先验分布,其作用是改变泛化误差的结构。正则化是对欠拟合和过拟合的折中,在不过度增加偏差的情况下显著减少方差。正则化能够改变数据分布,让通过模型得到的数据分布尽可能和真实的数据生成过程相匹配。
正则化就是一类通过显式设计降低泛化误差,以提升算法通用性的策略的统称。正则化被定义为对学习算法的修改,这些修改的目的在于减少泛化误差。通常说来,泛化误差的下降是以训练误差的上升为代价的,但有些算法也能兼顾泛化误差和训练误差的良好性能。正则化处理可以看成是奥卡姆剃刀原则(Occam's razor)在学习算法上的应用。“当两个假说具有完全相同的解释力和预测力时,以那个较为简单的假说作为讨论依据。” 从概率论角度看,许多正则化技术对应的是在模型参数上施加一定的先验分布,其作用是改变泛化误差的结构。正则化能够改变数据分布,让通过模型得到的数据分布尽可能和真实的数据生成过程相匹配。
正则化策略就可以分为以下几类:
- 基于训练数据(data)的正则化
- 基于网络架构(network architecture)的正则化
- 基于误差函数(error function)的正则化
- 基于正则化项(the regularization term)的正则化
- 基于最优化过程(optimization)的正则化
数据集增强的对象通常只包括输入层和隐藏层,而不包括输出层。这样做的效果是将训练数据集映射到一个新的概率分布上,并用这个新分布来计算经验风险函数。变换中参数的随机性使我们可以在不同的参数之下生成多组新数据,从而通过数据量的增加来减小期望风险和经验风险之间的差别。Dropout 是一种集成方法,通过结合多个模型来降低泛化误差。之所以说 Dropout 属于基于训练数据的正则化,是因为它构造不同的数据集来训练不同的模型,每个数据集则通过对原始数据集进行“有放回采样”得到。
基于网络架构的正则化通常会简化关于映射的假设,再让网络架构逐步逼近简化后的映射。参数共享(weight sharing)是一类重用参数的正则化方法。通过强迫某些参数相等,可以让不同模型共享唯一的参数,从而让它们对相似的输入产生相似的输出。另一种针对网络架构的处理是对传递函数的正则化(activation regularization)。
正则化项也叫做惩罚项。与误差函数不同,正则化项与目标无关,而是用于表示所需模型的其他属性。误差函数表示的是算法输出与目标输出之间的一致性,正则化项表示的则是关于映射关系的额外的假设。 这一特点决定了正则化项的值可以通过未标记的测试样本来计算,利用测试数据改进学习模型。常用的正则化项是权重衰减项(weight decay)。深度学习中的参数包括每个神经元中的权重系数和偏置。由于每个权重会指定两个变量之间相互作用的方式,因而拟合权重所需要的数据量要比拟合偏置多得多。相比之下,每个偏置只控制一个变量,即使不对它做正则化也不会产生太大方差,正则化的方式不对反而还会增加算法的偏差。这是正则化的对象只包括权重而不包括偏置的原因。
最后一类正则化方法是基于最优化过程的正则化。根据其作用阶段的不同,这类正则化方法可以分为三种:对初始化(initialization)的正则化,对参数更新(weight update)的正则化,对终止条件(termination)的正则化。早停(early dropping)是一类重要的正则化方法,它是针对终止条件的正则化。当训练的表示能力过强时,泛化误差会呈现出 U 形:随着训练时间的增加先降低再升高。当测试集上的泛化误差在预先指定的循环次数内没有改善时,训练就会终止,这种策略就是早停。早停的简单性和有效性使它成为深度学习中应用最广泛的正则化方法。它不需要改变训练过程,也就不会影响到学习动态,唯一要注意的问题就是要避免陷入局部最优解。
以上的分类方式并不是互斥的,一种正则化方法通常针对的是学习算法中的多个变量。
极客时间《人工智能基础课》学习笔记 Day9