赞
踩
1、神经网络为什么可以用于识别 (已回答)深层学习为何要“Deep”(上)
2、神经网络变深后我们获得了什么 (已回答)深层学习为何要“Deep”(下)
本文就是通过对深层神经网络惊人表现背后原因的思考,揭示设计一个神经网络的本质,从而获得一个对“如何设计网络”的全局指导。
神经网络是由一层一层构建的,那么每层究竟在做什么?
每层神经网络的数学理解:用线性变换跟随着非线性变化,将输入空间投向另一个空间。
物理理解:对 的理解就是通过组合形成新物质。又符合了我们所处的世界都是非线性的特点。
二、理解视角:每层神经网络的物理理解:通过现有的不同物质的组合形成新物质。
现在我们知道了每一层的行为,但这种行为又是如何完成识别任务的呢?
上面的内容有三张动态图,对于理解这种空间变化非常有帮助。由于知乎不支持动态图,可以在gitbook深层学习为何要“deep”上感受那三张图。一定一定要感受。
物理视角:“物质组成”线性可分视角:神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。
增加节点数:增加维度,即增加线性转换能力。
增加层数:增加激活函数的次数,即增加非线性转换次数。
物质组成视角:神经网络的学习过程就是学习物质组成方式的过程。
增加节点数:增加同一层物质的种类,比如118个元素的原子层就有118个节点。
增加层数:增加更多层级,比如分子层,原子层,器官层,并通过判断更抽象的概念来识别物体。
按照上文在理解视角中所述的观点,可以想出下面两条理由关于为什么更深的网络会更加容易识别,增加容纳变异体(variation)(红苹果、绿苹果)的能力、鲁棒性(robust)。
数学视角:变异体(variation)很多的分类的任务需要高度非线性的分割曲线。不断的利用那5种空间变换操作将原始输入空间像“捏橡皮泥一样”在高维空间下捏成更为线性可分/稀疏的形状。
物理视角:通过对“抽象概念”的判断来识别物体,而非细节。比如对“飞机”的判断,即便人类自己也无法用语言或者若干条规则来解释自己如何判断一个飞机。因为人脑中真正判断的不是是否“有机翼”、“能飞行”等细节现象,而是一个抽象概念。层数越深,这种概念就越抽象,所能涵盖的变异体就越多,就可以容纳战斗机,客机等很多种不同种类的飞机。
知道了神经网络的学习过程就是学习控制着空间变换方式(物质组成方式)的权重矩阵后,接下来的问题就是如何学习每一层的权重矩阵W。
既然我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过比较当前网络的预测值和我们真正想要的目标值,再根据两者的差异情况来更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。因此就需要先定义“如何比较预测值和目标值的差异”,这便是损失函数或目标函数(loss function or objective function),用于衡量预测值和目标值的差异的方程。loss function的输出值(loss)越高表示差异性越大。那神经网络的训练就变成了尽可能的缩小loss的过程。
所用的方法是梯度下降(Gradient descent):通过使loss值向当前点对应梯度的反方向不断移动,来降低loss。一次移动多少是由学习速率(learning rate)来控制的。
然而使用梯度下降训练神经网络拥有两个主要难题。
梯度下降寻找的是loss function的局部极小值,而我们想要全局最小值。如下图所示,我们希望loss值可以降低到右侧深蓝色的最低点,但loss有可能“卡”在左侧的局部极小值中。
试图解决“卡在局部极小值”问题的方法分两大类:
调节步伐:调节学习速率,使每一次的更新“步伐”不同。常用方法有:
随机梯度下降(Stochastic Gradient Descent (SGD):每次只更新一个样本所计算的梯度
Adagrad、RMSProp、Adadelta、Adam:这些方法都是训练过程中依照规则降低学习速率,部分也综合动量
优化起点:合理初始化权重(weights initialization)、预训练网络(pre-train),使网络获得一个较好的“起始点”,如最右侧的起始点就比最左侧的起始点要好。常用方法有:高斯分布初始权重(Gaussian distribution)、均匀分布初始权重(Uniform distribution)、Glorot 初始权重、He初始权、稀疏矩阵初始权重(sparse matrix)
机器学习所处理的数据都是高维数据,该如何快速计算梯度、而不是以年来计算。
其次如何更新隐藏层的权重?
解决方法是:计算图:反向传播算法
这里的解释留给非常棒的Computational Graphs: Backpropagation
需要知道的是,反向传播算法是求梯度的一种方法。如同快速傅里叶变换(FFT)的贡献。
而计算图的概念又使梯度的计算更加合理方便。
下面就结合图简单浏览一下训练和识别过程,并描述各个部分的作用。要结合图解阅读以下内容。但手机显示的图过小,最好用电脑打开。
设计网络结构(architecture):确定层数、每一隐藏层的节点数和激活函数,以及输出层的激活函数和损失函数。上图用的是两层隐藏层(最后一层是输出层)。隐藏层所用激活函数a( )是ReLu,输出层的激活函数是线性linear(也可看成是没有激活函数)。隐藏层都是1000节点。损失函数L( )是用于比较距离MSE:mean((output - target)^2)。MSE越小表示预测效果越好。训练过程就是不断减小MSE的过程。到此所有数据的维度都已确定:
数据预处理(preprocessing):将所有样本的input和label处理成能够使用神经网络的数据,label的值域符合激活函数的值域。并简单优化数据以便让训练易于收敛。比如中心化(mean subtraction)、归一化(normlization)、主成分分析(PCA)、白化(whitening)。假设上图的input和output全都经过了中心化和归一化。
训练网络(training):训练过程就是用训练数据的input经过网络计算出output,再和label计算出loss,再计算出gradients来更新weights的过程。
注:此部分内容不是这篇文章的重点,但为了理解深层神经网络,需要明白最基本的训练过程。
若能理解训练过程是通过梯度下降尽可能缩小loss的过程即可。
若有理解障碍,可以用python实践一下从零开始训练一个神经网络,体会整个训练过程。若有时间则可以再体会一下计算图自动求梯度的方便利用TensorFlow。
打开网页后,总体来说,蓝色代表正值,黄色代表负值。拿分类任务来分析。
虽然在gitbook上已有为何深层学习,但还是发一下照顾那些关注了超智能体,又只希望在知乎上看文章的小伙伴。近期由于期刊论文deadline将至(Winter is Coming),变体神经网络(RNN,CNN等不同变体的统一理解)部分会在17号开始继续写。
神经网络并不缺少新结构,但缺少一个该领域的
很多人在做神经网络的实验时会发现调节某些方式和结构会产生意想不到的结果。但就我个人而言,这些发现并不会让我感到满足。我更关心这些新发现到底告诉我们了什么,造成这些现象的背后原因是什么。我会更想要将新的网络结构归纳到已有的体系当中。这也是我更多思考“为何深层学习有效”的原因。下面便是目前YJango关于这方面的见解。
深层神经网络相比一般的统计学习拥有从数学的严谨中不会得出的关于物理世界的先验知识(非贝叶斯先验)。该内容也在Bengio大神的论文和演讲中多次强调。大神也在Bay Area Deep Learning School 2016的Founda’ons and Challenges of Deep Learning pdf(这里也有视频,需翻墙)中提到的distributed representations和compositionality两点就是神经网络和深层神经网络高效的原因(若有时间,强烈建议看完演讲再看该文)。虽然与大神的思考起点可能不同,但结论完全一致(看到Bengio大神的视频时特别兴奋)。下面就是结合例子分析:
1. 为什么神经网络高效
2. 学习的本质是什么
3. 为什么深层神经网络比浅层神经网络更高效
4. 神经网络在什么问题上不具备优势
其他推荐读物
YJango的整个思考流程都围绕减熵二字进行。之前在《熵与生命》和《生物学习》中讨论过,生物要做的是降低环境的熵,将不确定状态变为确定状态。通常机器学习是优化损失函数,并用概率来衡量模型优劣。然而概率正是由于无法确定状态才不得不用的衡量手段。生物真正想要的是没有丝毫不确定性。
深层神经网络在自然问题上更具优势,因为它和生物学习一样,是找回使熵增加的“物理关系”(知识,并非完全一样),将变体()转化回因素()附带物理关系的形式,从源头消除熵(假设每个因素只有两种可能状态)。这样所有状态间的关系可以被确定,要么肯定发生,要么绝不发生,也就无需用概率来衡量。因此下面定义的学习目标并非单纯降低损失函数,而从确定关系的角度考虑。一个完美训练好的模型就是两个状态空间内所有可能取值间的关系都被确定的模型。
学习目标:是确定(determine)两个状态空间内所有可能取值之间的关系,使得熵尽可能最低。
注:对熵不了解的朋友可以简单记住,事件的状态越确定,熵越小。如绝不发生(概率0)或肯定发生(概率为1)的事件熵小。而50%可能性事件的熵反而大。
为举例说明,下面就一起考虑用神经网络学习以下两个集合的不同关联(OR gate 和 XOR gate)。看看随着网络结构和关联的改变,会产生什么不同情况。尤其是最后网络变深时与浅层神经网络的区别。
注:选择这种XOR这种简单关联的初衷是输入和输出空间状态的个数有限,易于分析变体个数和熵增的关系。
注:用“变体(variation)”是指同一类事物的不同形态,比如10张狗的图片,虽然外貌各异,但都是狗。
问题描述:集合A有4个状态,集合B有2个状态。0和1只是用于表示不同状态的符号,也可以用0,1,2,3表示。状态也并不一定表示数字,可以表示任何物理意义。
随机变量Y:可能取值是
注:随机变量(大写X)是将事件投射到实数的函数。用对应的实数表示事件。而小写字母x表示对应该实数的事件发生了,是一个具体实例。
关系图:左侧是网络结构,右侧是状态关系图。输入和输出空间之间共有8个关系(非箭头虚线表示关系)。除非这8个关系对模型来说都是相同的,否则用表示时的熵就会增加。(无法照顾到8个关系,若完美拟合一个关系,其余的关系就不准确)
注:这里YJango是用表示的缩写。
数据量:极端假设,若用查找表来表示关系:需要用8个不同的数据来记住想要拟合的。
网络结构:由于分成了二维特征,这次网络结构的输入需改成两个节点。下图中的上半部分是,利用人工知识将随机变量无损转变为和的共同表达(representation)。这时和一起形成网络输入。
注:k()旁边的黑线(实线表示确定关系)并非是真正的神经网络结构,只是方便理解,可以简单想象成神经网络转变的。
表达式:
注:方便起见,写成了矩阵的表达形式,其中是标量,而,
关系图:由于固定,只考虑下半部分的关系。因为这时用了两条线和来共同对应关系。原本需要拟合的8个关系,现在变成了4个(两个节点平摊)。同样,除非右图的4条红色关系线对来说相同,并且4条绿色关系线对来说也相同,否则用和
表示时,一定会造成熵增加。
注:下图中左侧是网络结构图。右侧关系图中,接触的圆圈表示同一个节点的不同变体。分开的、并标注为不同颜色的圆圈表示不同节点,左右两图连线的颜色相互对应,如红色的需要表示右侧的4条红色关系线。
关联1:下面和YJango确定想要学习的关联(函数)。如果想学习的关联是只取或者的值,那么该结构可以轻松用两条线和来表达这4个关系(让其中一条线的权重为0,另一条为1)。
关联2:如果想学习的关联是或门,真值表和实际训练完的预测值对照如下。很接近,但有误差。不过若要是分类的话,可以找到0.5这个超平面来分割。大于0.5的就是1,小于0.5的就是0,可以完美分开。
注:第一列是输入,第二列是真实想要学习的输出,第三列是训练后的网络预测值。
关联3:如果想学习的关联是异或门(XOR),真值表和实际训练完的预测值对照如下。由于4条关系线无法用单个表达,该网络结构连XOR关联的分类都无法分开。
数据量:学习这种关联至少需4个不同的来拟合。其中每个数据可以用于确定2条关系线。
关系图1:乍一看感觉关系更难确定了。原来还是只有8条关系线,现在又多了16条。但实际上所需要的数据量丝毫没有改变。因为以下两条先验知识的成立。
注:下图最右侧是表示:当一个样本进入网络后,能对学习哪些关系线起到作用。
1. 并行:和的学习完全是独立并行。这就是神经网络的两条固有先验知识中的:并行:网络可以同时确定和的关联。也是Bengio大神所指的distributed representation。
注:有效的前提是所要学习的状态空间的关联是可以被拆分成并行的因素(factor)。
注:就没有并行一说,因为是一个节点拥有两个变体,而不是两个独立的因素。但是也可以把拆开表示为one-hot-vector。这就是为什么分类时并非用一维向量表示状态。更验证了YJango在机器学习中对学习定义:学习是将变体拆成因素附带关系的过程。
迭代:第二个先验知识是:在学习的同时,和也可以被学习。这就是神经网络的两条固有先验知识中的:迭代:网络可以在确定上一级的同时确定下一级的所有内容。也是Bengio大神所指的compositionality。
注:有效的前提是所要学习的空间的关联是由上一级迭代形成的。所幸的是,我们所生活的世界几乎都符合这个前提(有特殊反例)。
关联:如果想学习的关联是异或门(XOR),真值表和实际训练完的预测值对照如下。
和:期初若用两条网络连接表示的16个关系可能,那么熵会很高。但用两条线表示的8个关系,模型的熵可以降到很低。下图中的输出值对应红色数字。对应输出值是由蓝色数字表达。
:这时再看的关系,完全就是线性的。光靠观察就能得出的一个表达。
模型的熵与用一条所要拟合的关系数量有关。也就是说,
变体(variation)越少,拟合难度越低,熵越低。
关系图2:与网络结构1不同,增加到4个节点后,每个节点都可以完全没有变体,只取一个值。想法很合理,但实际训练时,模型不按照该方式工作。
注:太多颜色容易眼花。这里不再用颜色标注不同线之间的对应关系,但对应关系依然存在。
讨论:网络既然选择这种方式来更新权重,是否一定程度上说明,用较少的节点就可以表示该关联?并不是,原因在于日常生活中的关联,我们无法获得所有变体的数据。所得数据往往是很小的一部分。较少的节点可以表示这一小部分数据的关联,但却无法涵盖所有变体情况。造成实际应用时效果不理想。
具有一个隐藏层的神经网络可以模拟任何函数,最糟的情况需要个节点。
也叫Universal Approximation Theorem。但最糟的情况是输入空间有多少个变体,就需要多少个节点。k表示独立因素的变体个数,n表示独立因素的个数。上述的例子中最糟的情况需要个隐藏节点。而代价也是需要个不同数据才可以完美拟合。
使用条件:浅层神经网络可以分开几乎所有自然界的关联。因为神经网络最初就是由于可移动的生物需要预测未来事件所进化而来的。所学习的关联是过去状态到未来状态。如下图,物理中的力也可以分离成两个独立的分力来研究。
但有一种不适用的情况:非函数。
实例:函数的定义是:每个输入值对应唯一输出值的对应关系。为什么这么定义函数?对应两个以上的输出值在数学上完全可以。但是在宏观的世界发展中却不常见。如下图:
时间顺流:不管从哪个起点开始,相同的一个状态(不是维度)可以独立发展到多个不同状态(如氧原子可演变成氧分子和臭氧分子)。也就热力学第二定律的自发性熵增:原始状态通过物理关系,形成更多变体。
时间倒流:宏观自然界中难以找到两个以上的不同状态共同收回到一个状态的例子(如氧分子和臭氧分子无法合并成氧原子)。如果这个可以实现,熵就会自发性减少。也就不需要生物来消耗能量减熵。我们的房间会向整齐的状态发展。但这违背热力学第二定律。至少在我们的宏观世界中,这种现象不常见。所以进化而来的神经网络可以拟合任何函数,但在非函数上就没有什么优势。毕竟生物的预测是从过去状态到未来状态。也说明神经网络并不违背无免费午餐定理。
浅层神经网络可以模拟任何函数,但数据量的代价是无法接受的。深层解决了这个问题。相比浅层神经网络,深层神经网络可以用更少的数据量来学到更好的拟合。上面的例子很特殊。因为,,比较不出来。下面YJango就换一个例子,并比较深层神经网络和浅层神经网络的区别。
问题描述:空间有8个可能状态,空间有2个可能状态:
网络结构:
深浅对比:
浅层神经网络:假如说输入3和输出0对应。数据只能用于学习一个节点(如)前后的两条关系线。完美学习该关联需要所有8个变体。然而当变体数为时,我们不可能获得个不同变体的数据,也失去了学习的意义。毕竟我们是要预测没见过的数据。所以与其说这是学习,不如说这是强行记忆。好比一个学生做了100册练习题,做过的题会解,遇到新题仍然不会。他不是学会了做题,而是记住了怎么特定的题。
深层神经网络:如果只观察输入和输出,看起来同样需要8个不同的训练数据。但不同之间有共用部分。比如说,在确定3和0关系时,也同时对所有共用连接的其他变体进行确定。这样就使得原本需要8个不同数据才能训练好的关联变成只需要3,4不同数据个就可以训练好。(下图关系线的粗细并非表示权重绝对值,而是共用度)
深层的前提:使用浅层神经网络好比是用解,需要2个不同数据。而深层神经网络好比用解,只需要一个数据。无免费午餐定理告诉我们,优化算法在一个任务上优秀,就一定会在其他任务上有缺陷,深层同样满足该定理。如果用去解实际上有的,或者去解实际为的关联时,搜索效果只会更差。所以深层的前提是:空间中的元素可以由迭代发展而来的。换句话说中的所有变体,都有共用根源(root)。
我们的物理世界:幸运的是,我们的物理世界几乎都满足迭代的先验知识。
学习的过程是因素间的关系的拆分,关系的拆分是信息的回卷,信息的回卷是变体的消除,变体的消除是不确定性的缩减。
自然界两个固有的先验知识:
并行:新状态是由若干旧状态并行组合形成。
迭代:新状态由已形成的状态再次迭代形成。
为何深层学习:深层学习比浅层学习在解决结构问题上可用更少的数据学习到更好的关联。
随后的三篇文章正是用tensorflow实现上述讨论的内容,以此作为零基础实现深层学习的起点。
最后总结一下开篇的问题:
1. 为什么神经网络高效:并行的先验知识使得模型可用线性级数量的样本学习指数级数量的变体
2. 学习的本质是什么:将变体拆分成因素和知识(Disentangle Factors of Variation)
到此我们讨论完了神经网络最基础的,也是最重要的知识。在实际应用中仍会遇到很多问题(尤其是神经网络对noise的克服更加巧妙)。随后YJango会再和大家一起分析过深后会产生什么效果,并一步步引出设计神经网络的本质。
【 有不少专业术语乍一听很唬人,“人工神经网络”就属于这一类,至少我第一次听到这个词就被唬住了。你想啊,在大家的印象当中,人们对人脑的结构都还根本没有搞清楚,这就冒出来一个“人工的”神经网络,似乎是在用计算机来模拟人脑。想到人脑的结构那么复杂,大家的第一反应一定是人工神经网络肯定非常高深。如果我们有幸遇到一个好心同时又善于表达的科学家或教授,他愿意花一两个小时的时间,深入浅出地把人工神经网络的底细告诉你,你便会发现,“哦,原来是这么回事”。如果我们不幸遇到一个爱卖弄的人,他会很郑重地告诉你“我在使用人工神经网络”或者“我研究的课题是人工神经网络”,然后就没有下文了,如此,你除了对他肃然起敬外,不由得可能还会感到自卑。当然还有好心却不善于表达的人试图将这个概念给你讲清楚,但是他用了一些更难懂的名词,讲得云山雾罩,最后你发现听他讲了好几个小时,结果是更加糊涂了,你除了浪费时间外一无所获,于是你得出一个结论:反正我这辈子不需要搞懂它了。
大家可别以为我是在说笑话,这些都是我的亲身经历。首先,我没有遇到过一两小时给我讲懂的好心人,其次我遇到了一批在我前面卖弄的人,作为年轻人,总是希望把自己不明白的东西搞懂,于是我决定去旁听一门课。不过,我听了大约两三次便不再去了,因为除了浪费时间,似乎我并没得到什么收获。好在我自己做研究暂时用不到它,也就不再关心了。后来在美国读博士期间,我喜欢在睡觉前躺着看书,没事儿就捧着几本关于人工神经网络的教科书在床上看,居然也看懂了。然后再用它做了两三个项目,算是学会了。到这时回过头来再看“人工神经网络”,其实并不复杂,入门也不难,只是我走了弯路。——吴军】
君子报仇,三十年不晚。大学毕业三十年后,吴老师在数学之美 (第二版) 里,单独用一章讲Google大脑和人工神经网络,一抒当年的郁闷,也顺便帮我解了气:)
我把这一章的内容贴一部分在这里,希望对大家理解神经网络的概念有帮助:
人工神经网络的第一个里程碑是感知机perceptron, 这个名字其实有点误导, 因为它根本上是做决策的。 一个感知机其实是对神经元最基本概念的模拟 ,都未必有多少网络概念,他就是一个自动做决策的机器。
比如说你要决定今天出不出去看电影, 你要考虑3个因素, 一个是女朋友在不在, 一个是电影好不好看, 另一个是今天有没有工作, 这三个因素每个人的权重都不同,有的人看重女朋友, 有的人看重工作,所以权重就不等, 最后每个人根据自己的权重做出0或1,去或不去, to be or not to be的决策。那么你怎么做呢? 你把三个要素按照它们需要的权重加和在一起, 在把这个分数送到一个叫sigmoid的门面前得到去或不去的决定, 工作原理如上图。
比单层感知机更复杂的多层感知机-或者我们常说的深度网络, 是进行数据处理和模式识别的利器。 深度神经网络之所以能够处理这些数据类型,主要是因为这些数据本身具有的复杂结构很适合被NN识别, 而人类不需要预先设计识别这些结构的函数而是任由网络学习, D-CNN 深度卷积网络能够同时看到一个图像从细节到抽象的结构,所以能够抓住一些我们人类都说不出的细节。
DCNN 深度卷积网络,信号在多级网络里一级级传递, 从而使得从微观到宏观的特征都得到分辨 。 每一层神经元之间没有相互连接。
而RNN- 反馈式神经网络(每一层神经元之间有相互连接)则适合处理sequnce序列类的数据, 发现序列内部的时间结构。
RNN 之所以具有这个能力,就是因为网络内部通过自反馈, 具有之前各个时间点的输入信息, 因此它可以从无限久远的历史里推测系统的未来,RNN与之前的卷积网络相比最大的特点是它包含了动力学特性,如果说卷积网络是任意函数逼近器,那么RNN就是任意程序逼近器。 犹如包含某种工作记忆。用一个比喻来说, 就是RNN犹如一个宽阔的池塘宁静的水面, 当你投入一个石子, 激起的涟漪会在水池里不停反射传播, 这是对石头进入那一时刻信息的保存, 如果之后在落入一个石头, 那么它再度激起的涟漪会和之前的水波叠加作用, 形成更复杂的相互作用和纹样。
RNN示意图, 同层神经元之间有相互连接,从而使得历史信息在网络里向回声一般交替传递
RNN 具有相互连接的反馈式神经网络也是最接近生物组织神经网络的人工神经网络, 具有更多的未来潜力,只是它的训练比feed forward network更复杂。
人工神经网络的训练就如同生物神经网络的学习, 都是一个不停试错并减少错误的原理, 不过人工神经网络的方法更加简单化, 比如gradient descent,就是说在参数空间里寻找使得错误减少最快的方法改进。
人工神经网络对于生物神经网络的奇妙之处在于, 它反过来启迪了生物神经网络是在干什么的,就好像费曼的那句话“ 你要想真正理解一个东西, 就造出一台”。
Liu B, Theory and Practice of Uncertain Programming, 3rd ed., http://orsc.edu.cn/
-----
pretty good...
有个答主举了个例子拿20个样本进去跑:-D
所以数学背景还是很重要
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。