R.K.编译

解释深度学习的新角度,来自光学的启发

谷歌技术人员、MIT博士Ali Rahimi受光学的启发,从功能模块化和层级的角度讨论了一种解释深度学习的新思路。

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

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

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

来自:M. 

你好 Ali, ... 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

对这些现象的解释

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

先别激动,原因如下: 

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

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

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

我想说的是 

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

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

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

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

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

原文链接:http://www.argmin.net/2018/01/25/optics/

入门深度学习
2
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

随机梯度下降技术

梯度下降(Gradient Descent)是遵循成本函数的梯度来最小化一个函数的过程。这个过程涉及到对成本形式以及其衍生形式的认知,使得我们可以从已知的给定点朝既定方向移动。比如向下朝最小值移动。 在机器学习中,我们可以利用随机梯度下降的方法来最小化训练模型中的误差,即每次迭代时完成一次评估和更新。 这种优化算法的工作原理是模型每看到一个训练实例,就对其作出预测,并重复迭代该过程到一定的次数。这个流程可以用于找出能导致训练数据最小误差的模型的系数。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

推荐文章
暂无评论
暂无评论~