接上篇:7. 深度学习实践:正则化
7. 参数绑定和参数共享
表达对模型参数的先验知识:经常想要表达的一种常见依赖是某些参数应当彼此接近。例如,两个模型执行相同的分类任务,但输入分布稍有不同,因此我们认为模型参数应彼此靠近。可通过正则化利用这个信息,具体的例如,参数范围惩罚为
上述2006年提出,正则化一个模型(监督模式下的分类器)的参数,使其接近于另一个无监督模式下的模型(捕捉观察到的输入数据的分布)参数。
更常用:强迫某些参数相等。这种正则化方法称为参数共享。CNN中常用此:在图像多个位置上共享参数,相同的特征在输入的不同位置上计算获得。显著降低了模型参数量。
8. 稀疏表示
权重衰减直接惩罚模型参数。另一种策略:惩罚NN中的激活单元,稀疏化激活单元。这种策略间接地对模型参数进行了复杂惩罚。
L1惩罚诱导稀疏的参数:
A是参数,较为稀疏。
另一种是表示稀疏:
h是y的函数,表示存在于y中的信息,但只是用一个稀疏向量来表示。
表示的范数惩罚正则项:
例如可用L1惩罚使得表示稀疏:
还有一些方法通过激活值的硬性约束来获得表示稀疏。例如正交匹配追踪(OMP-k法)通过解决约束优化问题,将输入值x编码为表示h:
W被约束为正交,则 Wh 可以看做将 h 投入到 W 各基向量上。非零特征值小于k。则 h 会保留 k 个和 x 对应的较大量,较小分量都为0了。
9. Bagging和其他集成方法
关于集成学习的论述,见之前博文:
《统计学习方法》笔记08:boosting(1)
《统计学习方法》笔记08:boosting(2)
《西瓜书》笔记08:集成学习
例子讲的挺好:
描述Bagging如何工作的草图。假设我们在上述数据集(包含一个 8, 一个 6 和一个 9)上训练数字 8 的检测器。假设我们制作了两个不同的重采样数据集。Bagging训练程序通过替换采样构建这些数据集。第一个数据集忽略 9 并重复 8。在这个数据集上,检测器得知数字顶部有一个环就对应于一个 8。第二个数据集中,我们忽略 6 并重复 9。在这种情况下,检测器得知数字底部有一个环就对应于一个 8。这些单独的分类规则中的每一个都是不可靠的,但如果我们平均它们的输出,就能得到鲁棒的检测器,只有当 8 的两个环都存在时才能实现最大置信度。
问:NN的解可达到足够多的变化,意味着可从模型平均中受益,但所有模型都是在同一数据集上训练的啊?
答:NN中存在着随机初始化,小批量的随机选择,超参数的差异等,往往足以使得集成中的不同成员具有部分独立的误差。
模型平均是一个减少泛化误差的非常强大可靠的方法。ML比赛中取胜算法往往集成几十个模型。我们在TSA比赛(2017年5月-6月)末期时,将不同模型(LR,LightGBM,XGB)的预测结果,仅仅做了个简单的求和平均,就实现了千分位上的提升,确实很神奇。
作者也说到,不是所有构建集成的技术都是为了让集成模型比单一模型更加正则化。Boosting技术是为了构建比单个模型容量更高的集成模型。但总体来看,都是以提高模型的泛化能力为目的。
10. Dropout
随机失活:提供了正则化一大类模型的方法,计算方便,功能强大。可以被认为是集成大量深层NN的实用的Bagging算法。
NN一个模型通常很大,直接使用Bagging方法不太现实,时间和内存上开销巨大。2014年有集成6个网络从来赢得ILSVRC竞赛的例子。然而Dropout提供了一种廉价的Bagging集成近似,能够训练和评估指数级数量的NN。
具体的,Dropout训练的集成包括:所有从基础网络除去非输出单元后形成的子网络。
注:此处仅作示例。该网络较小,子集中有的没输入,有的没路径。当层较宽时,这个问题不太可能出现。
NN基于一系列仿射变换和非线性变换。我们只要将一些单元的输出乘以0就可以有效删除一个单元。具体的,在训练中使用Dropout时,使用基于小批量的学习算法和较小的步长,每次在小批量中加载一个样本,然后随机抽样应用于网络中所有输入和隐藏单元的不同二值掩码。对于每个单元,掩码是独立采样的(彼此间失活不相关的)。掩码值=1的采样概率是训练前的一个超参数,比如50%的概率,则随机失活有一半单元。通常在一个小批量训练的NN中,一个输入单元失活概率为0.2,隐藏单元失活的概率为0.5。然后运行前向传播,BP,学习更新,和之前一样的。
上图是一个前馈网络。下图是Dropout的前向传播。随机对向量
Dropout下,所有模型共享参数。每个模型继承自父网络参数的不同子集。参数共享使得在有限可用的内存下表示指数级数量的模型变得可能。
假定模型输出一个概率分布。在Bagging情况下,每个模型i产生一个概率分布,集成的预测推断通过算术平均值求出。在Dropout下,通过掩码u定义每个子模型的概率分布,算术平均值计算为:
p(u)是训练时采样u的概率分布。该求和包含多达指数级的项,不可计算。一个更好方法能不错的近似整个集成的预测,且只需要一个前向传播即可,改用集成成员预测分布的几何平均而非算法平均。通过几何分布直接定义的非标准化概率为:
标准化集成为:
涉及Dropout一个重要观点是:可通过评估模型中
因为通常使用
Dropout强大的大部分原因:施加到隐藏单元的掩码噪声。破坏了提取的特征,而非原始值,让破坏过程充分利用该模型迄今获得的关于输入分布的所有知识。
11. 对抗训练
在很多情况上,NN在独立同分布的测试集上进行评估已达到人类表现。我们要怀疑模型是否获得了真正的人类层次的理解。2014年在精度达到人类水平的NN上,通过优化过程故意构造数据点,其上误差率接近100%。模型在该点的输出与附近数据非常不同。人类基本不会察觉原始样本和对抗样本的差异,但网络会做出非常不同预测。
左图是原始样本,加上点噪声,右图是生成的对抗样本。人不会觉得有啥不同,但模型从熊猫判断成了长臂猿。
11.1 对抗训练
谈论这个和正则化有什么联系呢?我们可以通过对抗训练,减少原有独立同分布测试集的错误率——在对抗扰动的训练集样本上训练网络。即拿左、右图训练网络,提高网络泛化能力。
为什么对抗样本会这样?过渡线性。NN主要是基于线性块构建的,在一些实验中,它们实现的整体函数被证明是高度线性的。如果一个线性函数具有许多输入,那么其值可以非常迅速的改变。如果用
对抗训练:鼓励网络在训练数据附近的局部区域恒定,来限制这一高度敏感的局部线性行为。可看做是一种明确的向监督NN引入局部恒定先验的方法。
纯粹的线性模型,如LR,由于被限制在线性而无法抵抗对抗样本。NN能够将函数从接近线性转化为局部近似恒定。可灵活捕捉训练集的线性趋势的同时,学习抵抗局部扰动。
11.2 半监督学习
对抗样本也可做半监督学习。在数据集中某些点
再搜索一个对抗样本
这鼓励分类器学习:一个沿着未标签数据所在流形上任意微小变化都很鲁棒的函数。前提假设是:不同类别通常位于不同流形上,小扰动不会使得数据点从一个类的流形跳到另一个类的流形上。
12. 正切传播、流形正切分类器
该部分仅了解下概念。书中未做深入讨论。
曲线表示不同类别的流形,嵌入到二维空间中的一维流形。选择一个点,绘制一个与类别流形相切的向量(Tangent)和一个相交的向量(Normal)。我们希望分类函数在垂直于流形方向上快速变化(跨类),并且在类别流形的方向上保持不变。这就是正切传播和流形正切分类器的主要思想的示意图。