• 深度学习100问之深度学习的本质


    今天在查找网上的BP博文(【深度学习】backpropagation(反向传播))进行总结和撰写时发现了一篇博客和一个帖子引发了我的深刻思考,以下是分别的链接:

    Yes you should understand backprop

    Leaky abstraction

    这篇博文可能会沉底,因为我目前深度学习的水平还太低,没办法做到深刻的理解和解释,所以这会是一个坑。

    如果有人交流,我会虚心并且认真地学习;如果有大佬能谈论一下自己的理解,我会不胜感激。

    一、起风了

    在讨论到为什么要理解反向传播时,李飞飞高徒Andrej Karpathy给出的解释是:

    The problem with Backpropagation is that it is a leaky abstraction。
    反向传播的问题在于它是一个泄漏的抽象。

    那么什么是leaky abstraction?

    All non-trivial abstractions, to some degree, are leaky.
    所有重大的抽象机制在某种程序上都是有漏洞的.

    以上关于抽象泄露的解释,是出自这篇博文抽象泄漏(leaky abstraction)的一段解释,不要着急,待我慢慢说来。

    那么什么是抽象泄露呢?

    首先说一下什么叫抽象:把许多复杂的东西隐藏起来的一种简化动作就叫做抽象。

    然后我们继续说,抽象会失效,有时候轻微;有时候很严重,反正就是有漏洞。事情会因而出错,而且当你有抽象机制时到处都可能会发生。下面有一个例子:

    下雨天时开车没办法开得和平常一样快,虽然车上有挡风玻璃雨刷有头灯有车顶还有暖气,这些装备应该是让你可以忽略下雨这个事实 (他们把天气抽象化了),不过看吧,你还是得担心天雨路滑,有时候雨甚至会大到你看不远,所以在只好慢慢地开,因为基于抽象泄漏法则,天气永远不能完全被抽象化。

    抽象泄漏法则是造成问题的原因之一,是因为它说明了抽象机制并不真能照原构想,简化我们的生活。抽象泄漏法则表示,当某人发明一套神奇的新程序设计工具,可以大幅提升效率等等,就会听到很多人说:「应该先学会如何手动进行,然后才用这 个神奇的工具来节省时间。」程序设计工具假装抽象掉某些东西,和其他所有抽象机制一样都有漏洞,而唯一能适当处理漏洞的方法,就是弄懂该抽象原理以及所隐藏的东西。所以抽象机制虽然替我们节省了工作的时间,不过学习的时间是省不掉的。而这一切都似非而是地表示,即使我们拥有越来越高级的程序设计工具,抽象化也做得越来越好,要成为一个纯熟的程序员却是越来越难了。

    我们十年前可能想像过,现在会有某些全新的程序设计规范让程序设计更容易。事实上这些年间所建立的抽象机制,的确让我们能处理更高复杂度的 软件开发(如GUI程序设计和网络程序设计),这是十或十五年前无法处理的。这些伟大的工具(比如OO型式的程序语言)虽然能让我们用飞快的速度完成许多工作,不过总会有一天我们得去追查因抽象泄漏而产生的问题,到时候就得查上两星期了。另外虽然你得雇一个以写VB程序为主的程序员,不过单纯的VB程序员 是不够的,因为当VB的抽象机制泄漏时他们就完全卡住了。

    抽象泄漏法则正在拖垮我们。

    非常沉重的话题,但是也说明了问题的严重性,深度学习作为近些年火的发红发紫的热门学科,在Hinton对深层网络做Pre-Train开始就是一个经验领先于理论分析的偏经验的一门学问,所以很多人戏称为黑盒子。

    什么是黑盒子?

    所谓“黑盒子”,是指从用户的观点来看一个器件或产品时,并不关心其内部构造和原理,而只关心它的功能及如何使用这些功能。——百度百科。那么我的问题是,深度学习的本质到底是什么呢?

    二、春风十里

    深度学习的本质到底是什么呢?

    这个问题我在BN的博文中【深度学习】Batch Normalization(批归一化)提到了一下,知乎高赞回答:关于深度学习的本质和优缺点大家说下自己的理解?中给出了很多种个人理解。【哈啾路亚】的回答我个人是比较赞同的。

    本质就是高维特征变换器,理论上可以做到任意非线性变换。神经网络在坐标系变换的同时,也顺便充当了信息过滤器。

    目前来看,神经网络是通往强人工智能必经的第一步,就算要否定神经网络,也得拿出“高维特征变换”与“信息过滤器”这两个刚需的合格替代品,目前来看贝叶斯流派以及各种启发式,要满足这两个需求都还差得远。

    在Andrew NG的Deep Learning课程中,Andrew给出了这样的回答:

    深度学习这个名字其实挺唬人的,以前,这个概念被称为有多个隐层的神经网络,所以其实深度学习只是神经网络的重新包装,就是有多个隐层的神经网络,大家不要被“深度”这个词欺骗。

    这里还有个对于深度学习和多层神经网络的讨论——“深度学习”和“多层神经网络”的区别?。【杨延生】的回答,整体来说比较具体,感觉还挺符合我的认知的,虽然不知道对不对,也许随着经验的提升,将来会有更多的认知吧。

    从广义上说深度学习的网络结构也是多层神经网络的一种。

    传统意义上的多层神经网络是只有输入层、隐藏层、输出层。其中隐藏层的层数根据需要而定,没有明确的理论推导来说明到底多少层合适。而深度学习中最著名的卷积神经网络CNN,在原来多层神经网络的基础上,加入了特征学习部分,这部分是模仿人脑对信号处理上的分级的。具体操作就是在原来的全连接的层前面加入了部分连接的卷积层与降维层,而且加入的是一个层级。

    输入层 - 卷积层 -降维层 -卷积层 - 降维层 – … – 隐藏层 - 输出层。

    简单来说,原来多层神经网络做的步骤是:特征映射到值。特征是人工挑选。深度学习做的步骤是:信号->特征->值。特征是由网络自己选择的。

    而"深度学习"是为了让层数较多的多层神经网络可以训练,能够work而演化出来的一系列的新的结构和新的方法。

    刚才说过了,新的网络结构中最著名的就是CNN,它解决了传统较深的网络参数太多,很难训练的问题,使用了“局部感受野”和“权植共享”的概念,大大减少了网络参数的数量。关键是这种结构确实很符合视觉类任务在人脑上的工作原理。新的结构还包括了:LSTM,ResNet等。新的方法就多了:新的激活函数:ReLU,新的权重初始化方法(逐层初始化,XAVIER等),新的损失函数,新的防止过拟合方法(Dropout, BN等)。这些方面主要都是为了解决传统的多层神经网络的一些不足:梯度消失,过拟合等。

    也就是说多层神经网络的范畴更大,深度学习是其中一种实现方式罢了。

    【Bipolar Bear】的回答让我深思了很久,我得说这几种角度其实还都挺有道理的,哈哈哈,我真是个墙头草,这里拿出来大家看一下,我也顺便再深刻体会一下。

    以我的理解,两种网络被设计出来,所要解决的问题和目的不同。

    多层神经网络与universal approximation theorem [1] (泛逼近性原理,不知这样翻译可对?)相伴而生。该理论指出,单隐藏层(hidden layer)非线性前馈神经网络,可以在实数近似任意连续函数。上世纪80 90年代,Backpropagation 刚刚开始大行其道,利用这一算法,只需知道输入和输出便可训练网络参数,从而得到一个神经网络“黑箱”。之所以称为黑箱,是因为无需知道y=f(x)y = f(x)ff的表达式是什么,也能轻易做函数计算,因为ff(objective function)就是网络本身。多层神经网络的座右铭是:“函数是什么我不管,反正我能算!”。

    当然多层神经网络并非天下无敌,它有三个主要限制:

    一是在面对大数据时,需要人为提取原始数据的特征作为输入。必须忽略不相关的变量,同时保留有用的信息。这个尺度很难掌握,多层神经网络会把蹲在屋顶呆的Kitty和骑在猫奴头上的Kitty识别为不同的猫咪,又会把二哈和狼归类为同一种动物。前者是对不相关变量过于敏感,后者则因无法提取有实际意义的特征。

    二是想要更精确得多近似复杂的函数,必须增加隐藏层的层数,这就产生了梯度扩散问题。所谓“强弩之末是不能穿鲁缟”。

    三是无法处理时间序列数据(比如音频),因为多层神经网络不含时间参数。

    随着人工智能需求的提升,我们想要做复杂的图像识别,做自然语言处理,做语义分析翻译,等等。多层神级网络显然力不从心。那么深度模型是如何解决以上三个问题的。

    第一,深度学习自动选择原始数据的特征。举一个图像的例子,将像素值矩阵输入深度网络(这里指常用于图像识别的卷积神经网络CNN),网络第一层表征物体的位置、边缘、亮度等初级视觉信息。第二层将边缘整合表征物体的轮廓。。。之后的层会表征更加抽象的信息,如猫或狗这样的抽象概念。所有特征完全在网络中自动呈现,并非出自人工设计。更重要的一点是这种随着层的深入,从具象得抽象的层级式表征跟大脑的工作原理吻合,视网膜接受图像从LGN到视皮层、颞叶皮层再到海马走的是同样的路数[2]!

    第二,深度网络的学习算法。一种方法是改变网络的组织结构,比如卷积神经网络代替全连接(full connectivity)网络,训练算法仍依据Backpropagating gradients的基本原理。另一种则是彻底改变训练算法,我尝试过的算法有Hessian-free optimization[3],recursive least-squares(RLS) 等。

    第三,使用带反馈和时间参数的Recurrent neural network 处理时间序列数据。从某种意义上讲,Recurrent neural network可以在时间维度上展开成深度网络,可以有效处理音频信息(语音识别和自然语言处理等),或者用来模拟动力系统。

    [1] http://deeplearning.cs.cmu.edu/pdfs/Cybenko.pdf
    [2] Distributed Hierarchical Processing in the Primate Cerebral Cortex
    [3] http://icml2010.haifa.il.ibm.com/papers/458.pdf

    三、昨夜西风凋碧树

    为什么大家都不戳破深度学习的本质?!这个博文也是写的很有深度,简单来说,深度学习就是数据拟合,在海量数据中找出可能存在的关系,这个说法,我在之前的博文【深度学习】Batch Normalization(批归一化)中提到过,具体来说,分成三个部分:

    博主注:这里基本就是原文的复制,因为实在是很经典,很震撼,所以就拿过来了。

    一是,这种关系可能并不存在,也就是业界称的过度拟合。用人工神经网络进行拟合的时候,往往没有从理论上分析特征变量与预测变量的关系,特征变量不是拍脑袋决定的,就是在反复试验中确定的,常常会得到不存在的关系。虽然也有手段可以减少过度拟合的出现,但是实际上回归出来的结果完全无法理解,关系存在不存在只有天知道。

    二是,这种关系可能非常脆弱。单纯从数据中得出来的关系,如果数据不能包含世界的各种形态,得到的关系仅仅只是局部的真理。当宏观环境发生变化,发现的关系就不复存在了。

    三是,这种手段很难帮助我们理解世界。得出来的关系是海量的因素和预测变量之间的一个复杂的数学关系,无法帮助我们了解个中的逻辑关系、发生机制,也很难帮助我们理解世界。

    往技术层面讲,深度学习使用的技术——人工智能网络——也不过是逻辑回归的叠加,完全不像很多科普作者吹嘘的那么神秘。

    这里就是详细地划分三种领域的区别了,如果你还不了解,我建议看一下这个博文【深度学习】一篇文章看懂人工智能(Artificial Intelligence)、机器学习(Machine Learning)、深度学习(Deep Learning),搞清楚什么是深度学习更有利于理解本质问题。

    人类正在慢慢接近世界的本质——物质只是承载信息模式的载体。人脑之外的器官都只是保障这一使命的给养舰队。

    自从去年 AlphaGo 完虐李世乭,深度学习火了。但似乎没人说得清它的原理,只是把它当作一个黑箱来使。有人说,深度学习就是一个非线性分类器?有人说,深度学习是对人脑的模拟……但我觉得都没有捅透那层窗户纸。

    博主很讨厌黑箱这个说法,所以我常常开玩笑说别问什么是深度学习,问就是AI。

    当读完 Jeff Hawkins 的《论智能》,「就是它了!」。而我惊奇地发现,原书竟是 2004 年出版的!我怕自己读了本假书,或是某个美国民科的著作,特意到豆瓣、知乎上查了下,发现几乎每个看过这本书的人都对其理论啧啧称赞。但奇怪的是,似乎没人肯替它站台,这套理论的影响止步于此,好像大家都在刻意掩饰自己看过这本秘笈。它明明已经完整解释了人脑智能的运作机制了啊!注意是 Real Intelligence ,而不仅仅是 Artificial Intelligence !

    开始了,三个洞见。

    比起绝大多数脑科学论文,作者的洞见简单得多,也深刻得多:长久以来,由于我们没有能力从内部去观察思维,所以人们总是把「智能」等同为「表现出智能的行为」。但当我们看书时,在外人看来并没有任何变化,而我们自己知道,这期间产生了无数的联想、顿悟、回忆。所以,「理解」是无法通过外部行为来测量的,它是一个内在度量的指标。

    从草履虫到人类,大自然会为每一种生物分别设计一套智能机制,还是沿用一套机制,亦或是从某一代开始出现某种全新的智能机制,并沿用至今(那么,最先产生这套智能机制的又是什么物种呢?)?我们所说的智能,是人类所独有,还是生物的普遍特征(只是多寡之别)?而作者相信,智能不可能是上帝专为人类而设计的,它一定来自大自然的某种惯用伎俩。

    大脑皮层,不管是结构上还是功能上,都有着相同的构造/机理(严格来说,这不算作者的洞见,而是早在 1978 年由 Vernon Mountcastle 发现的)。

    由这三个洞见出发,自然而然地导向了以下疑问:

    • 如果智能不是由行为定义的,那该如何定义它?

    • 向前看,智能是如何演化而来的?

    • 向内看,大脑皮层的结构是如何捕捉这个世界的结构的?

    简单地说,作者的结论是:

    智能并没有人们想象的那么玄乎,它不过是一种「预测未来的能力」罢了。这些预测的实质,不过是「生物的应激性」在「生物自平衡机制」&「环境压力」下产生的副产品。智能的核心是某种「稳定不变的东西」。而这得益于大脑皮层同质的层级结构。下面,我们就来看看作者是怎么从那三个简单的洞见一步步推测出智能的本质的。

    生命的秋千

    小到人体,大到经济系统,复杂系统内都有着一种消减冲击、使系统回归稳态的类似机制。血糖浓度低了,胰高血糖素分泌会增加,拉高血糖;而血糖高了,胰岛素分泌会增加,拉低血糖。通过调节这对激素,系统竭力让血糖维持在某一范围内。这种自稳态机制出现在生命的各个角落,保持着生命的自我平衡。

    这就像一只「看不见的手」,总是想推开挤压,同时把「逃兵」抓回来。这只「看不见的手」在我们大脑中编织了无数「正确的位置」(用脑科学家的黑话说就是「恒定表征」)。一旦偏离,我们就开始警觉起来,并调动多个系统联合应对。举个书中的例子,一个球飞过来,我们并不是去计算它的弹道、落点,而是指挥肢体相应调整,直到抓住来球。这套调整算法就是「预测」。从这个事例看,人们在接球这件事上表现出的智能,和草履虫向着食物划动所展现的应激性,又有什么本质的分别呢?

    为什么说「预测」是智能的基础?

    平常,人们理解的「预测」步子迈得太大了,就好比从一发球就要精准地算出其落点,而人脑的「预测」更像是「应激」,球动我动,一点点微调。现代社会发展得太快,让我们看不清概念的历史面貌,因而更容易被表象的迷雾困惑。当我们走回历史的起点,迷雾自然散去。智能,于我们最大的益处是什么?并非创造什么,而是生存下去。人类无时无刻不在「生存」还是「发展」之间纠结。但很少有人看到:发展,不过是为了应对未知的生存挑战。

    我们应该怎么去定义智能呢?也许演化的历史能告诉我们更多。智能,是帮助人类生存下去的一种能力:是让我们可以在溪流中叉到游动的鱼儿的能力,是让我们可以只靠一幅模糊的图像就判断出是朋友还是猛兽……我们应该去研究那些「如何保持平衡」之类的问题,而不是什么弹道求解问题,那不是大自然的进化目标,自然也得不到什么大脑的机制。

    所有生存问题都可以归结为一个元问题:如何识别出这个问题中的那些个恒定不变的东西。比如:溪流中的鱼、回家的方向……如果说智能中还存在别的成分,比如:想象、创造工具、解决问题,都可以规约到某种抽象手段上。归根结底,人类解决一切问题的方法只有一个——运用抽象,在更高维度上调和矛盾。

    一切绕不开「恒定表征」(invariant representations)。

    抽象的本质

    就如同人们在认可了「负数」这一概念之后,终于能将「加法」&「减法」这两种表象上完全不同(一个增加,一个减少)的运算,统一为「整数域上的加法」。从更高的维度调和矛盾,这正是大脑皮层的构造方式,也是其工作原理。不断在现象中找到共同点,提取出来,取个名字;这些名字又成为了上一层抽象的基石(或者叫「词汇」)。这样一层一层,直至得到那个智能的圣杯——恒定表征。

    举个例子,我们是如何识别边缘的呢?

    我们先来考察一小块 3×3 的视网膜,分别标记为 #1~#9 (如下图所示)。当一条竖线出现时(#1, #4, #7 均被激活),电信号传递到第二层。第二层的每一个神经元,分别响应视网膜上一组细胞被激活的情况。比如:第二层最左边的那片神经元,响应的是单个视网膜细胞被激活的情况。再比如:第二层左二那片神经元,响应的是任意两个视网膜细胞被激活的情况。以此类推……

    在这里插入图片描述

    边缘识别:最下层是视网膜细胞;当某个视网膜细胞组合被激活后,会激活其上一层的相应神经元;而上一层神经元的某个组合被激活后,又会链式地激活更上一层的神经元

    如果我们把时间的因素考虑进去,假设信号并不会马上消失,而是随着时间衰减,那么只要时间够短,输入 (#1, #4, #7)、(#2, #5, #8)、(#3, #6, #9) 这三组刺激,就会在第三层激活某个神经元,代表「发现一条竖线」。

    看,其实每一个神经元都是一个「单词」(或是「概念」/「抽象」/「特征」)。只不过低层神经元描述的「单词」抽象程度更低。比如:第二层那个 #(1, 4, 7) 神经元代表的是「在视网膜的最左边出现一条竖线」,而其上层那个则没有「在视网膜的最左边」这一约束。

    记忆的角色

    神经元可以在 5 毫秒内完成信息的收集 - 整合 - 输出,相当于运算速度为每秒 200 次。人类可以在半秒内(相当于 100 步)识别图像、作出选择……100 步,机器可做不到。在人类已知的算法里面,也许只有「打表」(把答案事先存储在记忆中,用时并不作计算,而只是提取)可以做到。所以,整个大脑皮层就是一个记忆系统,而非什么计算机。

    深度学习做对了什么?

    多层网络,提供了逐层抽象的通道。如今,图像识别系统正是这么做的:底层识别边缘,而后识别特定形状,再高层识别某种特征……卷积,提供了获得「恒定表征」的手段。

    还有什么我们不知道?

    当我们想要提取某段记忆时,往往只需要只言片语就行了。也就是说,记忆似乎是以一种全息的形式存储的。任何片段都包含了全部。

    还有,我们依然不知道大脑是怎么在 100 步内完成决策的。我们也不知道为什么会有那么多反馈连接?轴突 v.s. 树突在功能上有什么分别?

    现在让我们回过头来看作者的三个洞见,用黑话再讲一遍就是:

    • 理解,是对「大脑如何形成记忆,并利用这些记忆作出预测」的一个内部度量。

    • 预测,是某种自我调节机制的副产品。

    • 大脑皮层在外表 & 结构上存在着惊人的同质性。也就是说,大脑皮层使用相同的计算方式来完成它的一切功能。人类展现出来的所有智能(视觉、听觉、肢体运动……)都是基于一套统一的算法。

    博主注:怎么样?惊了,惊为天人吧。

    四、众里寻他千百度

    有博客说“信息瓶颈”理论揭示深度学习本质,Hinton说他要看1万遍,我不知道孰是孰非,只能发展还在继续,也许未来会有突破,也许未来还在等更远的未来,众里寻他千百度的下一句才是我们的目标和追求,加油,总有一天,蓦然回首,那人却在灯火阑珊处。

    (未完待续…)

    如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~

    回复【福利】即可获取我为你准备的大礼,包括C++,编程四大件,NLP,深度学习等等的资料。

    想看更多文(段)章(子),欢迎关注微信公众号「程序员管小亮」~

    在这里插入图片描述

  • 相关阅读:
    春节不回家
    夜间突然发烧,无法入眠
    歌词写得真好
    近日看到网上许多BBS寻找SAP及ABAP程序的学习资料,本人深知学习的艰辛与不易,特贡献自己多年的学习资料,完全免费
    人生的真谛
    SMARTFORMS的调用方法(作者:曹玉平)
    自己给自己当医生
    将ocx添加到.NET
    AQtime + ocx/dll
    ActiveX:创建安装:
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302830.html
Copyright © 2020-2023  润新知