惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
小众软件
小众软件
Engineering at Meta
Engineering at Meta
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
Security Archives - TechRepublic
Security Archives - TechRepublic
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MongoDB | Blog
MongoDB | Blog
L
LINUX DO - 热门话题
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Help Net Security
Martin Fowler
Martin Fowler
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
V
Vulnerabilities – Threatpost
云风的 BLOG
云风的 BLOG
博客园_首页
C
Cybersecurity and Infrastructure Security Agency CISA
量子位
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
Scott Helme
Scott Helme
A
About on SuperTechFans
博客园 - 司徒正美
Hacker News: Ask HN
Hacker News: Ask HN
The GitHub Blog
The GitHub Blog
Forbes - Security
Forbes - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Spread Privacy
Spread Privacy
T
Tailwind CSS Blog
S
Security Affairs
宝玉的分享
宝玉的分享

Posts on Changkun's Blog

Why High-Output Systems Are Often the First to Stop Growing Dark Forest Theory: A Formal Derivation Agents (or Humans) in Goal-Directed and Goalless Environments: On Pipelines, Priors, and the Rhythm Between Exploration and Exploitation At the Boundary of Self-Reference: From Stable Structures in Artificial Intelligence to the Self as a Recursive Model in an Open Dissipative System 2023 Reading List 2022 Reading List 2021 Reading List Are PSS/USS and RSS Actually the Same Thing? Performance Differences from Page Faults vs. Prefetching 2020 Year-End Review Migration with Zero Downtime 2020 Reading List The All in Go Stack Pointers Might Not Be Ideal for Parameters Eliminating A Source of Measurement Errors in Benchmarks Setup Wordpress in 10 Minutes 我为什么不再写博客了? 2019 年终总结 2018-2019 读书清单 Ten years of blogging Rethinking the Reflections on Communications and Trusts 2018 年终总结 Go source code study is open source Go source study: unsafe Pattern Go source study: sync.Pool Go runtime programming A Million WebSocket and Go Designing Asynchronous RESTful APIs 分布式杂谈01:CAP 理论的误解 Issues of Human-Bot Interaction Go in 1 Hour UMSLT04: The Past and Present of SGD UMSLT03: A Gentle Start of Learning Theory UMSLT02: A Breif History of Neural Networks UMSLT01: A Breif History of Regularization 不笑不足以为道 论文笔记:Generalization in Deep Learning 2017 年终总结 2017 读书清单 深度学习的泛化理论简介 删除 GitHub 上已经提交的敏感信息 硕士生涯的第一年就这样告一段落了 人肉计算(10): 系统参与激励 人肉计算(9): 陷阱的解法 别聊,一聊你就暴露 人肉计算(8): 人肉计算与数据科学中的陷阱 人肉计算(7): 社会行为分析 Hexo + GitHub + Travis CI + VPS 自动部署 人肉计算(6): 预测市场 人肉计算(5): 信用风险评级模型 读书与回报 瞎扯: 对现代企业理论与当下IT企业的商业模式和信息产业链的规律性的思考 人肉计算(4): 输入数据聚合与PageRank 又一次打整了一下博客 人肉计算(3): 输入数据聚合与链路预测 人肉计算(2): 意图博弈 GWAPs 人肉计算(1): 众包与群众智慧 对后辈同学在计算机专业上的答疑与解惑 在德国的医疗及住院体验 这可能不是一个技术博客了 实验楼楼赛第3期-Python-题解 迅速更换了 DISQUS Electron 深度实践总结 良好的编码体验的三个方面 2016 年终总结 2016 读书清单 最近在着手写的文章 微信小程序文档极致总结 谈谈过去三个月在实验楼的实习经历 Built a Desktop Client for My Blog Guacamole 源码分析与 VNC 中 RFB 协议的坑 《高速上手 C++11/14》正式发布 Docker 极速入门教程02 - 镜像与容器管理 Docker 极速入门教程01 - 基本概念和操作 阶段性沉默 ELK+Redis 最佳实践 终于全面启用了 HTTPS 苹果开源了LZFSE无损压缩 Hash 碰撞的一种思路 记一次完整的 Kaldi-TIMIT 示例运行 Kaldi 上的 TIMIT 例子 Kaldi 安装与部署 从科研写作谈起 Swift API 设计指南 有趣的人类 所以其实论文并没有什么鬼用 Githug 通关记录及指南 小结一下这学期的收获 2015 读书清单 2015 年终总结 负能量爆表 转眼就快两个月了 博客迁移记录 大三总结 这个世界,终究不会是我们的。 Linux 内核分析 之六:Linux 内核创建进程的过程 小说「泽缘」 Linux 内核分析 之五:system_call中断处理过程的简要分析 大创项目的标题真是每年都在考验同学们的想象力啊 Linux 内核分析 之四:使用库函数API和嵌入汇编两种方式使用同一个系统调用
压缩法与深度网络的泛化性
Changkun Ou · 2018-03-27 · via Posts on Changkun's Blog

压缩法与深度网络的泛化性

Published at发布于:   |   PV/UV: /   |   Reading阅读: 2 min

本文译自:http://www.offconvex.org/2018/02/17/generalization2/ 译者:欧长坤

本文是关于我最新的论文并提供了一些之于我之前一篇文章新的关于「泛化谜题」的观点。

这篇新论文引入了一个基于压缩的基本框架来证明泛化界。并表明深度网络的是高度噪音稳定并可进行压缩。这个框架同时还未去年的一些论文提供了简单的证据(下面会讨论)。

回忆关于泛化理论的基本定理:具有 $m$ 个样本的训练集则泛化误差(定义为训练数据和测试数据之差)是 $\sqrt{\frac{N}{m}}$ 的高阶项,其中 $N$ 是网络的有效参数(或复杂度度量);它最多可能是实际参数数,但实际上可能会少得多(为了便于说明,这篇文章将忽略 $\log N$等这些在计算中产生的干扰因素)。泛化之谜在于:当网络参数量高达百万级时即便当 $m=50K$,网络同样具有相当低的泛化误差(比如 CIFAR10)。反过来想,从某种意义上来说这似乎在告诉我们,网络的实际的参数量是远低于 $50K$ 的。

这里N是网络的有效参数(或复杂性度量)的数量; 它至多是可训练参数的实际数量,但可能会少得多。 (为了便于说明,这篇文章将忽略\ logN等这些也出现在这些计算中的讨厌因素)。神秘的是,即使当m = 50K时,具有数百万参数的网络也具有低泛化误差(如在CIFAR10数据集中) ,这表明真实参数的数量实际上远低于50K。

Bartlett et al. NIPS'17Neyshabur et al. ICLR'18 尝试类似于 PAC-Bayes 和 Margin 的有趣想法对复杂度度量进行量化(同时也影响了我们的论文)。但终究这种量化是不切实际的——量级比实际参数量还要多。相比之下,我们的新估计值要好几个数量级,并且更加有意义。下面的条形统计图进行了说明(所有的 bound 都忽略了干扰因素,可训练参数的数量仅用于表示比例):

比较近期论文的泛化界

「压缩」法

压缩法尝试对一个具有 $N$ 个可训练参数的深度网络 $C$ 压缩到另一个具有更少参数 $\hat{N}$ 、几乎相同训练错误的网络 $\hat{C}$。于是,只要训练样本的数量超过 $\hat{N}$,上面的基本定理就保证了,那么 $\hat{C}$ 就可以获得更好的泛化能力(即使 $C$ 没有)。对这种这种方法的扩展表明,如果我们让压缩算法依赖于某个任意长的随机字符串,只要在接触训练数据之前固定这个字符串,那么就能得到相同的结论。 我们将这种依赖固定串的压缩法,并以此为基础。

请注意,上述方法仅证明了压缩后的 $\hat{C}$ 具有较好的泛化性能,而并没有对原始的 $C$ 加以保障。(我觉得这些想法可能延伸到证明原始 $C$ 同样具有良好泛化能力,这种障碍应该只是技术性的)。一些早期的使用 PAC-Bayes 界的方法,这也证明了一些与 $C$ 相关的网络的泛化,而不是 $C$ 本身的泛化。 (经典文献 Langford-Caruana2002 的标题说明了一切。)

在实践中,深度网络可以使用一系列想法进行压缩,见这篇综述。然而,通常这种类型的压缩通常还包含对神经网络的再次训练,而我们的论文则没有考虑再训练的情况(因为他涉及对损失函数的推理),这也是未来的研究方向。

平坦极小值与噪声稳定性

如今的泛化能力结果通过对损失函数_平坦极小值(flat minimum)_的形式化进行处理。最早在上个世纪九十年代,Hochreiter 和 Schmidhuber 1995 就猜测平坦极小值是表现出泛化的根源。最近 Keskar et al 2016 的经验研究表明,损失函数的平坦度确实与泛化性存在一些关系。我们将在后面的文章中讨论这个问题到底有多复杂。

Flat v.s. Sharp Minima

我们先来聊一聊关于平坦极小值为什么会泛化得更小的原因(由 Hinton and Camp 1993 提出)。简单来说,如果在平坦极小值所在的区域是一个在损失函数表面上占据大小为 $\tau$ 的「体积」的区域(如果极小值区域越平,则$\tau$越大)于是损失函数中,严格平坦极小值区域的数量最多为 $S = \frac{总「体积」}{\tau}$。因此,我们可以将全部的平坦极小值区域从 1 到 $S$ 进行编号,这也就意味着平坦极小值可以用 $\log S$ 个 bit 进行表示(信息编码的结果,译者注)。那么文章最前面提到的基本定理其实就意味着如果训练样本的数量超过 $\log S$ 那么平坦极小值就会泛化得更好。

PAC-Bayes 方法试图通过定义平坦极小值来形式化上述直觉:如果网络 $C$中,使得其训练样本增加适当比例的高斯噪声并不会大大影响训练误差,那我们就称这样的区域为一个平坦极小值区域。这样可以根据概率/度量来对上面所说的「体积」一词进行量化(具体参见我的讲义或这篇Dziugaite-Roy论文),并对样本复杂性进行一些明确的估计。可惜的是,我们已经证明了从这个计算中要获得良好的定量估计相当困难,正如前面的条形图所示。

现在我们使用稍微不同的噪声稳定性来对「平坦最小值」进行形式化描述。 简单地说,如果我们在某层的输出处注入具有一定缩放因子的高斯噪声,那么随着噪声传播到更高层,这个噪声就会衰减(这里「顶部」方向是指网络的输出方向)。虽然他还没有在网络中以训练的方式出现,但它显然是和 Dropout 有关系。下图说明了在 VGG19(使用 CIFAR10 数据集)某一层注入的噪声是如何影响较高层的。 y 轴作为一层中被计算向量乘积的噪声的幅度( $\ell_2$ 范数),并展示了单个噪声向量在传播层时如何快速衰减。

噪声是如何在 VGG 各层之间传播的

显然,训练网络的计算是具有很强的抗噪声能力的。这似乎在暗示生物圣经网络。注意,这里的训练并没有涉及明显的噪声(例如 dropout)。当然随机梯度下降会隐式的将噪声添加到梯度中去,如果噪声稳定性来自于此或别的什么地方,那么更加严格的研究是很有必要的。

噪声稳定性及单层网络的可压缩性

为了理解什么噪声稳定的网络是可压缩的,我们首先来理解一个神经网络的单层噪声稳定性,这里我们忽略了非线性变换的因素。因此,这一层仅仅只是一个线性变换,即矩阵 $M$

矩阵 M 表示一层

矩阵的输出对噪声稳定是什么意思呢?假设上一层的输出向量是一个单位向量 $x$,那么 $x$ 可以被认为是当前层的「信号」。矩阵将 $x$ 变换为 $Mx$。如果我们在注入单位范数的噪声向量 $\eta$,那么输出就会变成 $M(x+\eta)$。如果这样的噪声对输出的影响很小,我们就说 $M$ 对于输入 $x$ 是噪声稳定的。这表明 $Mx$ 的范数要远大于 $M\eta$ 的范数。 前者不超过 $\sigma_{max}{M}$,即矩阵 $M$ 的最大奇异值。后者约为 $(\sum_i \sigma_i(M)^2)^{1/2}/\sqrt{h}$,其中 $\sigma_{i}{M}$ 表示矩阵 $M$ 的第 $i$ 个奇异值,而 $h$ 是 $Mx$ 的维数。这是因为在于高斯噪声可以在每个方向上进行分解,且每个方向上的方差为 $\frac{1}{h}$。于是,我们的结论是:

$$(\sigma_{max}(M))^2 \gg \frac{1}{h} \sum_i (\sigma_i(M)^2),$$

换句话说,矩阵 $M$ 具有奇异值不均匀分布的特点。不等式的左边和右边的比例称之为稳定秩,其最大值不超过其线性代数秩。此外,上述分析表明,「信号」$x$ 与奇异值更大的奇异方向有关,奇异值是噪声稳定性产生的根源。

我们在 VGG 和 GoogleNet 上进行了实验,实验结果表明深度神经网络的高层网络中(即大部分参数)确实表现出了及其不均匀的奇异值分布,并且信号与更大的奇异值方向一致。下图描述了使用 CIFAR10 训练 VGG19 的第十层的结果。

VGG19 第十层矩阵的奇异值的分布

多层网络的压缩

上面关于噪声稳定性的分析不能保证跨多层的深度网络,这是因为非线性的因素的存在,从而缺少奇异值的符号表示。因此,噪声稳定性使用了雅克比矩阵进行形式化,这个矩阵描述了输出如何对输入的微小扰动作出反应。噪声的稳定性表明,这种非线性映射相比信噪比向量来说,能够传递来自前一层更强的信号。

我们的压缩算法对每一层的矩阵都使用了一个随机变换(注意随机性的使用,它适用于我们希望的「使用固定的字符串进行压缩」的框架),它依赖于每层低稳定秩的条件。这种压缩会适当的在每层引入误差,然而由于我们在压缩的过程中使用了随机的性质,从而使得此类误差类似于高斯误差。进而这个错误会被高层网络所压缩。

关于所有关于噪声稳定性质的形式化描述以及实验的细节可以在论文中找到。

现有泛化界的简单证明

在论文中,我们还是用了我们的压缩框架给出了过去一年间出现的泛化界的简单证明。例如 Neyshabur 等人的论文给出了这种形式的误差上界,其中 $A_i$ 是第 $i$ 层的矩阵:

Neyshabur 等人关于有效参数量的公式

与上面提到的基本定理相比,我们意识到这个公式中的分子其实对应了有效参数的个数。表达式的第二项则表示了矩阵的稳定秩之和,这是一个很自然的复杂性度量。第一项则是层矩阵谱范数(即最大奇异值)的乘积,正好是整个网络 Lipschitz 常数的上界(映射 $f$ 的 Lipschitz 常数是指常数 $L$ 使得 $f(x) \leq L c\dot |x|$)。

如果输入 $x$ 出现在网络的底层,那么每个连续的层可以将其范数乘至顶部的所有最大奇异值,而 ReLu 非线性只能降低矩阵的范数,它的唯一操作就是使某些数值归零,这也就是矩阵谱范数的乘积是 Lipschitz 常数的原因。

对上面的表达式进行分解后,可以很清楚的将其解释为网络(确定性)压缩的分析。通过(奇异值分解)将(小于某个阈值的)奇异值归零来压缩每一层,并期望它能变为低秩矩阵(回想一下,秩为 $r$ 的矩阵可以用 $2nr$ 个参数表示)。一个简单的计算表明,剩余的奇异值的数量最多为矩阵的稳定秩除以 $t^2$。如何设定 $t$ 呢?截断会在网络曾的计算中引入误差,这个误差会向高层传播并最多由 Lipschitz 常数放大。我们想使这个传播的误差很小,则可以通过使其余 Lipschitz 常数成反比来完成。这最终导致了有效参数数量上的限制。

这个证明的概述还解释了我们是如何改进之前的这个工作:它们还能(隐式地)压缩深度网络,但是对压缩可能性的分析不够可靠,因为它们假设网络已通过 Lipschitz 常数来传递噪声。

推广至卷积网络

在早期的论文中还不能清晰的处理卷积网络。我必须承认,处理卷积会困扰我们一段时间。卷积网络中的一个图层将相同的过滤器应用于该图层中所有的修补程序。这种权重共享意味着整个矩阵已经具有相当紧凑的表示,并且将其压缩会有一定的挑战性。然而类似于 VGG 和 GoogleNet 这样的网络,在高层中使用较大的滤波器矩阵(即使用大量信道),并且我们可以期待压缩这种单独的滤波器矩阵。

现在来考虑两个天真的想法。首先是在不同的卷积核中压缩滤波器。可惜的是,这不是压缩,因为每个滤波器的拷贝都有自己的参数。第二个想法是对滤波器进行单个压缩,并在每个卷积核中使用压缩的拷贝。然而这会导致分析出错,因为根据不同拷贝中压缩引入的误差是彼此相关联的,然而分析过程要求他们应该服从高斯分布。

最终,我们的想法是使用 逐 $k$ 独立滤波器(想法来自哈希方法)进行压缩,其中 $k$ 大约为训练样本数量的对数。

结论

尽管泛化理论在某些时候可能看起来仅仅是学术性问题,因为在实践中,测试数据确立了泛化能力。我希望你从上文中可以看出一些可以用来理解深度网络泛化能力的有趣见解。对已经训练好的深度网络的噪声稳定性的研究显然与生物神经网络的研究存在联系(请参考von Neumann关于噪声的适应计算的基本思想)。

与此同时,我觉得可压缩性只是泛化谜题的一小部分,我们仍然缺少一些重要的想法。我并没有从上面的想法中看到如何证明 VGG19 的有效参数量能够被降低至 50k。我怀疑完成这样的工作必须要求我们对数据的结构本身有足够多的认识(真实图像),而上面的分析并没有考虑这一点,我们只用到了深度网络与实际数据相配合比与噪声配合更加好这一唯一的与数据相关的性质。