为什么写这篇文章?
最近,马毅老师的一篇论文投稿ICML,四位审稿人都认为可以接收,但是被area chair拒绝了,在知乎、微博、朋友圈引起了非常多的关注。应该有不少朋友读过这篇论文了,我也第一时间在微博和朋友圈里看到马老师发的贴子就去拜读读了。这篇文章提出了一种源自信息论的maximizing coding rate reduction理论准则,来理解和指导神经网络的结构设计,马老师称之为理解深度学习的first principle(第一性原理)。
马老师这个事件让我想起了自己之前的一段相似的经历。
第一点相似是,在2014年1月份,我刚加入MSRA半年时间,在MSRA研究的第一个课题恰恰也是神经网络结构的理论解释和自动学习方法。
第二点相似是,当时在这个方向上工作了大约半年的时间,研究结果也写了一篇题为《Learning Structures for Deep Neural Networks》的论文投向 ICML 2014,很不幸,没有被接收。
第三点相似是,敝帚自珍,我们当时和马老师一样是深信这个课题方向的重要意义,以及我们所作的工作是在这个课题方向上有向前走一小步的。
第四点相似是,应该说,我们对这个问题解决的都不能称为彻底,基本停留在“理论猜想”阶段,还不能做到让同行确凿无疑的认可这个理论的有效性,譬如,理论还不能解释深度学习的“所有tricks",而且在这个理论的指导下,还没有发展出能在较大规模的数据集上相对于ad hoc设计的神经网络结构显示出非常明显的优势。
不同的是,在接到这篇文章被拒的信息后,我们选择让这篇文章躺在故纸堆里烂掉(论文发表对学术界同行很重要,perish or publish)。
我们认识到这个问题极其重大,解决起来的难度也极大,当时的各种条件还不成熟,这个问题有可能需要全行业十年乃至数十年才能解决。
今天,我觉得把当时的研究结果公布出来也仍有一定的意义。
第一,看到马老师的工作备受关注,也激励我讲一讲这个研究方向的来龙去脉和自己的理解,希望我们当时的研究结果能对那些对这个问题有兴趣的同行有所启发。
第二,这项研究在我职业生涯中具有特别的意义,这是我加入MSRA之后开展的第一个研究课题,而且也是我此前(2008~2011年)在清华做计算神经科学的博士后研究时兴趣的延续。博士后的课题是计算神经科学,用信息论的手段理解生物神经网络(譬如人脑)结构的形成机理。
第三,我们当时做这项研究是投入了极大热情的,我和实习生经常工作到半夜,记得ICML 2014是大年初一截稿,两位实习生潘飞和周春婷放假没有回家,春节期间在实验室做实验和写论文,同事秦涛和铁岩也牺牲假日休息时间,一起写论文。这段时间值得铭记。
最后,这项研究虽然没有结果,但启发了我对大规模计算的关注,引导我走向AI系统的研究,一直到研发OneFlow。我们当时遇到的一个最大的问题就是,要在有较大规模的数据集合上验证这个理论需要的计算量太大,当时还没有分布式深度学习框架,在单张GPU卡上只能在cifar这样的数据集上验证,而且即使当时个别深度学习框架可以做分布式,也只能处理数据并行,而在这个理论指导下的模型参数量极大,必须需要像今天众所周知的,训练GPT-3这样的模型需要的模型并行等技术。
问题
我们当时那篇论文到底想研究什么问题?
2013年,深度学习刚火起来没多久,图像识别最好的方法是AlexNet,印象中VGG,Inception v3已经发明出来了,但ResNet还没有出来。
一个经验观察是,神经网络的结构对图像识别准确率很关键,每发明一个新的神经网络结构都可以发表一篇很有影响力的论文,但这些结构都是通过无数次试错人工设计出来的。
我们当时感兴趣的问题是,为什么神经网络的结构对准确率影响这么大? 对一个特定的任务,存不存在一种最优的结构?有没有办法自动学习出来比人工设计还好的神经网络结构?
今天,大家很熟悉的AutoML和NAS(神经网络架构搜索) 就想解决这些问题,但当时这些概念还没出现。
刚才提到,08~11年,我在计算神经科学方向工作过,当时试图用理论的办法理解人类大脑视觉通路中视网膜和初级视皮层的形成机理,马上意识到,这两个问题本质是一样的。
计算神经科学领域对这个问题已经研究很多年了,有一些非常经典的研究成果譬如基于InfoMax 的 ICA 方法(独立成分分析)以及Sparse coding方法,这些方法的背后是一种基于信息论的原则,称之为efficient coding principle。
这个理论认为,大脑的结构源自亿万年的进化,进化的目标是形成外界物理环境的一种“最经济”的表达,这种表达是适应于(adapt to)自然界的统计规律,而且这种结构基本上是无监督的。这种理论已经能非常好的解释视网膜、侧膝体、初级视皮层神经元感受野的形成机理,近些年的研究开始向理解V2, V4等更高级的视皮层进发。
关于这方面的研究成果,最好的一本书是李兆平老师的专著《Understanding vision: theory, models and data》。李兆平老师是我博士后期间的合作导师,过几天她和她的先生Peter Dayan 会在智源大会上做演讲。
解决思路
首先想到的是,用efficient coding原则来理解卷积神经网络的一些关键技巧。
为什么要使用这种局部的、参数共享的卷积结构? 而且卷积filter 类似于边缘检测器。在计算神经科学里其实对于初级视皮层神经元的局部感受野做过解释,用这个理论应该是可以解释的。
为什么需要引入非线性的激活函数? 这个在计算神经科学里也是信息论角度是有过比较多论述的,核心在于通过非线性映射,可以把取值范围很大的activation映射到一个区间,比较重要的输入值编码的分辨率高一些,而不重要的输入不需要消耗太多能量去编码,就被映射到“饱和区”。
深度学习为什么需要多层的神经网络?对一个给定的任务到底需要多少层?
我们想做这样一些实验,如果给定一个巨大的全连接神经网络,efficient coding准则指导下去学习和迭代,网络收敛之后,会不会出现大部分权重都变成零,如果把网络中权重接近于零的边去掉之后,留下有意义的权重对应的边,这个网络是不是一个卷积神经网络?
efficient coding准则认为,神经元的感受野是用来表示输入刺激的统计规律,把输入转化成神经元的响应有助于去除输入之间的冗余性(redudancy),也就是神经元的响应之间应该比输入 “统计上更接近于独立”。
论文里一些有趣的经验观察
论文里做了一些理论分析以及算法描述,我觉得最有意思的是来自自然图像统计性的一些经验观察。
首先,我们构造一批随机权重的神经网络去提取图像特征,然后基于这些特征训练交叉熵损失的分类器(softmax)。我们研究了随机神经网络提取到的特征的熵和基于此特征训练的分类器的准确率之间的关系,如Figure 2所示,熵和准确率之间有相关性,熵比较大的特征对应的分类器准确率也比较高。
熟悉信息论的朋友应该对“熵”有较直观的感受,熵比较大,代表特征数值分布的比较“散”,展开的空间体积比较大 (对应于马毅老师论文rate reduction公式的第一项,就是要让样本张成的球体积越大越好)。
这个熵也反应了输入x和特征z之间的互信息,因为我们这里考虑的是无监督学习,没有考虑标签y,所以没有马老师论文rate reduction公式的第二项。
上图测量了图像像素之间的互信息,(a)图展示了,随着两个像素之间的距离增加,它们的互信息越来越低,距离非常近的像素互信息很大,冗余也大,这也正是图像压缩的前提。距离很远的像素之间趋近于统计上独立。这个现象可能有助于理解卷积神经网络的局部感受野,因为距离太远的输入之间几乎是独立的,使用一个filter去描述他们之间的关系“不划算”。
(b) 图展示了,当第一层原始图片经过一组edge extractor加工得到一个feature map之后,在feature map上距离较远的点之间也会有很强的互信息,意味着这个feature map上不同位置之间的特征不独立,继续存在redundancy,可以再提取一层特征来进一步压缩,这可能有助于理解为什么需要多层神经网络,以及到底需要多少层,可能经过几层之后的feature map上的数值就接近独立了,此时就不需要再增加层次了。
上图展示了,随着增大层数,feature map的 熵(entropy)增大,但层数增大到一定程度时,entropy gain 就没有了,因为这里的特征几乎是独立的了。(论文附录里讨论了熵的值增大和统计独立之间的理论关系)。这个实验说明了,神经网络层数应该按照什么准则去确定。
为了展示卷积神经网络局部卷积filter的形成机理,我们构造了一个合成数据集:数据集中每张图片都是由9张小图片拼接而成的,每个小图片是从自然数据集中任意一张图片上任意一个位置随机采样出来的小块。因此,可以认为,每张合成图片上,属于同一个小块内的像素肯定是有统计关系的,但属于不同块的像素肯定是独立的。
在这样的数据集上,使用sparse coding去学习一个字典,可以发现每个基地(basis) 都只在一个小块内有意义,而其它块的值都是零,这说明sparse coding 能学习到独立成分,也就是一个全连接网络,每个output neuron和input neuron 的连接都是稀疏的,而且是局部的,也就是像conv filter一样。
值得强调的是,这个神经网络是一个全连接的网络,使用无监督的目标,收敛之后,竟然每个output neuron 的和输入的绝大多数连接变成了零,也就是这些边是可以删掉的,也就是每个output neuron 对应了一个conv filter。
进一步值得强调的是,即使不是在合成的图片上,而是在自然图片上,初始的全连接网络也会收敛成这种局部的filter, 原因是距离比较远的像素之间是接近独立了(如Figure 3(a) 所示)。
以上的实验应该算解释了卷积操作的原因,但在CNN中还有一个比较重要的池化操作,是用来解决shift invariance的,这个是不是也可以自动学习得到呢? 可以的,如下图所示。
通过group sparse coding 能学习到同一个basis在不同位置的表示,也就是自然地解决了translation invariance,相当于pooling的效果。 在马老师的论文里也讨论了通过把一些filter弄成等价类类解决invariance的问题。
和MCR^2的联系
从信息论角度出发来理解神经网络结构的机理,有两项工作比较知名,一个是受过Hinton推崇的“信息瓶颈”(Information bottleneck)理论,一个是马老师团队提出的MCR^2理论。
那么我们之前论文里使用的information maximization principle 和信息瓶颈,以及MCR^2有什么联系呢?
首先一个区别是,InfoMax 准则讨论的情况是无监督的,而Information bottleneck以及MCR^2 (基本上)是有监督的。
在线性模型里,InfoMax会推导出来PCA,而MCR^2 和LDA(linear discriminant analysi)相似。
引入非线性变换,InfoMax 推导出来的是ICA (独立成分分析),也和Sparse coding等价。
以x,z,y 分别表示输入数据,学到的特征以及标签。
信息瓶颈的目标是最大化z和y之间的互信息,而最小化x和z之间的互信息。
MCR^2 则一方面在最大化x和z之间的互信息,也在最大化z和y之间的互信息。
InfoMax是无监督学习,它的目标是最大化x和z之间的互信息。也就是它的目标是MCR^2目标中的一项(公式中的第一项)。
在信息瓶颈那篇论文里论述了这样一个结论,特征条件独立,最优分类器就是线性的。这个结论应该挺多人是熟悉的,Andrew Ng在论述Naive bayes和Logistic regression等价关系时讨论过,更早的时候(上世纪五六十年代),Minsky在一篇论文里也证明了。
有监督 VS. 无监督
从上面的讨论可以看出来,三种信息论准则可以这么定位,Information bottleneck (信息瓶颈)是有监督优先的,InfoMax是无监督优先的,而MCR^2 则同时照顾了无监督和有监督的需求。到底哪个更优呢?
信息瓶颈理论出于一个极端,既然我们的目标是分类,那就直奔主题,它喜欢的特征就是对分类有效的特征,至于这个特征对最原始的输入的表示来说是不是好就不关心了,甚至要尽可能删除与分类无关的信息。
信息瓶颈的这个理念让人联想起来当年discriminative model和generative model之辩,前者直接学习用户关心的条件概率p(y|x),但后者需要学习p(x|y)p(y),也就是还要学习输入特征的概率分布。发明SVM的Vapnik 认为generative model做了一些和目标无关的、多余的事情,因此而更推崇前者,甚至抛出了奥卡姆剃刀“如无必要,勿增实体”。
InfoMax 强调了学习到的特征要能很好的表示原始输入,是原始输入的一种更经济、高效的表达。线性情况,最优方法就是PCA,非线性情况下是ICA。深度学习发展早期的RBM,auto-encoder 方法都属于这一类。实际上在理论上可以证明,InfoMax和交叉啥、最大似然目标之间的等价关系。
MCR^2 的目标函数由两部分构成,第一部分与类别无关,实际上和InfoMax等价(InfoMax直接计算熵有缺陷,正如马老师论文提到的,熵在一些蜕化情况下没有良好的定义,所以他们用了率失真函数)。第二部分和类别相关,和信息瓶颈的目标一致。
这些讨论又牵扯出来一个非常重要的问题:既然我们的目标是分类,那么是不是信息瓶颈就是最优呢?为什么还要追求所学习的特征要是输入的优秀表示呢?
其实这个问题在当年半监督学习热门的时候就有很多讨论,半监督学习到底成不成立?为什么不带标签的数据对训练分类模型也有帮助呢?
后来比较一致的结论是,无标签数据相当于提供了一种正则化(regularization),有助于更准确的学习到输入数据所分布的流形(manifold),而这个低维流形就是数据的本质表示,它对分类有帮助。
但这又带来一个问题:为什么数据的本质规律对预测它的标签有帮助?
这又带来一个更本质的问题:数据的标签是怎么来的?
要回答这些问题,就要和中国古代哲学里的”名实之论“有关系了。到底是先有”名“,还是先有”实“。一般认为是先有”实“,后有”名“,而”实“决定”名“。
回到机器学习问题上,就是数据的标签是后天出现的,一个东西到底用什么标签去称呼,本质上是由这个东西自身的规律决定的。
换句话说,label 可能是后天”涌现“(emerge)的,因为一些东西本质一样,张的像,所以人们才会给他们相同的命名。因此要寻求最优的分类器,可能首先要从”无监督“的数据分析入手。
因此,我更加相信无监督学习更接近深度学习的第一性原理。
总结讨论
很可惜,要从全连接网络中训练出来卷积神经网络,我们当时受限于实验条件,只能在cifar数据集上验证这些猜想。要在ImageNet这样的数据集上从全连接网络训练出来卷积神经网络,必须借助支持模型并行的分布式深度学习框架。
很可惜,我们当时只能给卷积的局部性,非线性,多层等提供一些解释,而不能给”所有的技巧“以理论解释。在对比实验中,我们从SOTA的卷积神经网络中删除了drop out, normalization等技巧,当时无法解释这些技巧。
可以发现,这项研究和AutoML, NAS本质在做一样的事情,很幸运,今天的计算框架和计算能力已经使得这样的研究变的可行。
可以发现,这项研究和今天很受关注的大规模预训练模型也很相似,而且也有研究发现,大规模预训练模型中真正有效的实际上是一个很小的“子网络”,也就是很多连接的权重是接近零的。
最近恰好出现了一些 MLP is all your need相关的研究,也不无道理。
最近除了自然语言处理,在图像和语音领域,无监督和自监督学习也取得了很大进展,譬如Facebook 的wave2vec 基于无标注的语料可以训练出来和几年前有监督学习的SOTA模型相匹配的结果。
可以期待,无监督学习未来会出现更多的成绩。
虽然当时这篇论文没有发表,这个无疾而终的研究,启发了我对大模型的兴趣,让我去思考要在一个集群上解决这个问题,也鉴定了我去追求像oneflow这样的系统架构。
已经把这篇论文上传到arXiv,希望在几天以后可以看到。论文地址:
因为我以前也做过类似方向的文章(怎么用feedforward的方法建立一个多层的非线性分类器),所以认认真真地读完了文章。比较直白的一个回答:想法和之前的一些方法是类似的,我们之前就对这一类方法有一些没想通的地方,看完文章还是不是很懂,期待马老师后续的研究能给出一个更深入的理论解释。
之前在2012年的时候,我们发过一篇NIPS的文章叫做Learning with Recursive Perceptual Representations:
基本的想法就是,一层线性SVM无法很好地将复杂分布的数据分开,那么我们是否可以通过一种迭代的方式,“逐渐”将它们分开?
于是我们采取的方式是,每一层就是一个线性的SVM,然后把SVM的soft label prediction,通过一个随机的weight matrix,加回到原来的特征上去,然后对特征做归一化,作为下一层输入的特征。最终网络的结构长这样(d是输入特征,每一层就是一个我们叫RSVM的block):
在实验中我们可以看到,每一层在直观地将数据”拉开“到更加容易用线性分类器分类的状态。如果我们把每一层分类的超平面(classification hyperplane)在最初的输入空间当中展示出来的话,后面几层的分类器越来越显示出非线性的能力:
整个训练无比简单,就是每一层拿输入特征训练个SVM,然后搞个随机projection matrix,把输出和输入一加(用今天比较fancy的语言来说,是一个“以SVM为核心的类似ResNet结构的Residual Block”?),一层的训练就搞定了,下一层如法炮制。
当时还是深度学习没有那么流行的时候,因此我们没有将它称为是一个neural network。不过基本的原则是很相似的:马毅老师在文章中提到的Algorithm 1,一定程度上想法和RSVM的block类似,就是通过一个比我们的文章更加有理论依据的方式,让输出的特征比输入的特征更加容易分类。MCR2的理论比我们以前用的SVM+随机projection,要solid很多。
这种通过stacking的方式来构建一个多层的、非线性的分类器的方法,有很多已知的文章(马毅老师的文章section 1.2.2有review)发表过,例如ISTA、PCANet、deep coding network等等。对这一类文章,我们当时不得其解,今天依然还有confusion的是:
Anyway,我理论功底有限,也不做理论很久,忽然看到一篇文章在之前做过的方向上有新的见解,还是很有意思的,大半夜看paper很开心。希望能看到马毅老师后续的研究成果,解掉我上面的confusion。