师法自然 浅谈深度学习的多重角度

电子说

1.2w人已加入

描述

深度学习已经成熟到可以教给高中生了么?

我思考的这个问题,源于不久前我收到的⼀封来自某大公司产品经理的邮件。

我喜欢将私人通讯邮件公开于众,所以我将邮件内容摘在下面:

来自:M.

你好 Ali, ...

你如何训练团队里的年轻成员,使得他们有更好的直觉和预判?我团队里的工程师经常从其他科研员那「借鉴」超参数的值,但他们太担心要自己去调整参数了。...

我对着这封邮件思考了数日,却没有办法找到⼀个有条理的答案。

如果说应该有正确答案的话,我想回复说:也许她的工程师应该要有这种担心。

如果你是个工程师,你拿到了这个神经网络,然后你被要求去改进这个网络在某个数据集上的表现。你也许会假设这每层都是有它自己的作用和功能,但在深度学习领域,我们目前还没有统的语言和词汇去描述这些功效。我们教授深度学习的方法和我们教授其他科学学科的方法很不同。

几年前我迷上了光学。在光学领域,你会堆叠好几层不同的组件以处理输的光源。例如下图,就是相机的镜头:

牛顿

要设计这样的系统,你从最简单的组件开始堆叠,这些组件往往以知名的发明者命名。然后通过仿真,你可 以判断你的设计是否符合你的要求,然后再添加不同的组件去修正先前设计的缺陷。

紧接着你会各种数学优化过程去调整这些组件的参数,例如镜面的形状、位置和倾斜角度等等,去最大程度实现你的设计目标。你就重复如此仿真、修改、调优的过程。

这很像我们设计深度网络的过程。

上图里所有的 36 个元素都是故意加⼊这个堆叠的系统,以用于修正某项具体的偏差的。这样的设计需要非常精确的解释模型去描述什么样的元素能够对透过它的光有什么样的效应。这个模型往往是关于这个元素的作用的,例如说折射、反射、衍射、散射和波前校正。

牛顿

⼈们不害怕这样的设计过程。每年,美国培养的许多⼯程师都能设计出有的镜头,他们并不为这样的作感到担心害怕。

这并不是因为光学很容易,而是因为我们对光学的模型了然在心。

现代光学是通过抽象出不同层级的知识内容去教授的。

牛顿

在最顶级,也是最容易的层级,是几何光学。几何光学是对波光学的抽象,光射线于于表达简单的矢量波光 学的波前矢量。而波光学⼜是对麦克斯韦方程的进⼀步简化。麦克斯韦方程 由能由量子力学推导而出,量子力学则超出了我的理解范围。

每⼀个层级都是通过作出⼀些简化的假定由紧邻的下⼀个层级推导⽽出,所以每⼀个层级能够比上⼀个层级解释更为复杂的现象。

牛顿

我花了不少时间在顶四层抽象里设计系统。

这就是当今我们教授光学的方法。但相关理论并非总是如此按层级来组织。在百年前,这些理论还是在⼀个 相互矛盾的状态中共存。实践家们只能依赖于近乎道听途说的光学理论。

但这并没有阻止伽利略打造性能不错的望远镜,而且是在牛顿形式化几何光学前近⼀个世纪的时间点上。因 为伽利略对于如何造出能够放大数⼗倍的望远镜有足够好的解释模型。但他对光学的理解,却不足以让他的望远镜能够修正色差或者获得广视角。

在这些光学理论被抽象总结出来之前,每⼀项理论都需要从光的最基本概念出发。这就牵涉到要作出⼀套涵盖许多也许不切实际的假设。牛顿的几何光学把光假定作⼀束束可以被吸引、排斥的固体粒⼦。惠更斯则⽤ 由「以太」作为介质的纵波去描述光,也就是说用类似声波的方式去构建光。麦克斯韦也假设光经由以太传播。你从麦克斯韦方程的系数的名字也能窥得这种思路的⼀⼆。

愚蠢的模型,确实。但它们可量化且有预测的能力。

这些假设,我们今天听来也许觉得很愚蠢,但它们可量化而且有预测的能力。你可以随意代入数字于其中并得到精准的量化预测。这对于工程师而言极其有用。

寻找用于描述每层深度学习网络作用的模块化语言

如果我们能够像讨论光纤穿越每⼀层镜头元素的作用那样去讨论神经网络每⼀层的作用,那么设计神经网络将会变得更容易。

我们说卷积层就像在输⼊上滑动相应滤波器,然后说池化是处理了对应的非线性。但这只是非常低层次的描述,就像用麦克斯韦方程去解释镜头的作用。

也许我们应该依赖于更高级抽象描述,具体表达某个量被神经网络的层级如何改变了,好比我们用镜头的具 体作用去解释它如何弯曲光线那样。

如果这种抽象也能够量化,使得你只需要代⼊具体数值到某个公式里,它就能告诉你⼀个大概的量化分析,这样你就能更好地设计你的网络了。

我们离这样的语言还很远。我们先从简单点的开始

上⾯也许只是我被自己的幻想带跑了。

我们从简单点的开始。我们对深度学习的运作方式有很多解释模型。下⾯我会罗列⼀系列值得解释的现象,然后我们看看⼀些现有的模型对这些现象解释的能力有多强。

在开始之前,我得承认这种努力也许最后是徒劳的。光学花了 300 年在打磨自己的模型之上,而我只花了⼀ 个周六下午,所以这只能算是博客上的⼀些个⼈观点和想法。

现象:随机梯度下降 (SGD) 的随机初始化足够好了。但细微的数字错误或者步长会使 SGD 失效。

很多⼈在实践中发现,对于如何累积梯度的细微调整,可以导致对整个测试集表现的巨大变化。例如说你只用GPU而不是 CPU 去训练,结果可能会截然不同。

现象:浅的局部最优值意味着比深的局部最优值更好的泛化能力。

这种说法很时髦。有些⼈认为它是真的。有些⼈则用实际数据反驳。另外也有⼈给出了这个现象的变种 。众说纷纭,争议目前不断。

这个现象也许有争议性,但我还是先放在这里。

现象:批标准化层 (Batch Norm) 可以给 SGD 提速。

这个基本无争议,我只能提供⼀个小例外。

现象:即使有很多局部最优和鞍点,SGD 也表现卓越。

这个说法也包含了几个小的点。经常有人声称深度学习的损失表面充斥着鞍点和局部最优。也有不同的 说法,要不就认为梯度下降可以遍历这些区域,要不就认为梯度下降可以不遍历这些区域,但都能给出泛化能力不错的答案。也有说损失表面其实也没那么不堪。

现象:Dropout 胜于其他随机化策略。

我不知道如何正确分类类似 Dropout 的做法,所以我就称之为「随机化策略」了。

现象:深度网络能够记忆随机标签,但它们能泛化。

证据很直白,我的朋友们亲自见证并主张这种说法。

对这些现象的解释

对应上面列举的这些现象,我在下面列举我觉得最能解释这些现象的理论,这些理论均来自我上面引用的论文。

牛顿

先别激动,原因如下:

1. 我们尝试解释的这些现象部分有争议。

2. 我没办法把这些解释按照抽象层级组织好。光学好教学的特性也没办法在这⾥重现。

3. 我怀疑部分我引用的理论不正确。

我想说的是

有很多人正在加⼊这个领域,然而我们能够给他们传授的不过是近乎道听途说的经验和⼀些预训练好的深度网络,然后就叫他们去继续创新。我们甚⾄都不能认同我们要解释的这些现象。所以我认为我们离能够在高中教授这些内容还有很远的距离。

那我们如何才能离这⼀步近点?

最好的不过是我们能够就每⼀层深度网络的功能作用,按照不同层级的抽象,给出对应的解释模型。例如 说,神经网络里的折射、散射和衍射会是怎么样的?也许你早就用具体的功能去思考神经网络,但我们就这些概念还没有统⼀的语言。

我们应该把⼀系列确认的现象组织起来,然后才来进行理论上的解释。例如说神经网络里的牛顿环、磁光克 尔效应和法拉第现象会是怎样的?

我和一小批同事已经开始了⼀项重大的实践工作,尝试去分类构建适合我们领域的解释模型,去形式化它 们,并且用实验去验证它们。这项工作是巨大的,我认为第⼀步应该是构建⼀个分层级的深度学习解释模 型,以用于高中的教学。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分