1、神经网络为什么可以用于识别 (已回答)深层学习为何要“Deep”(上)
2、神经网络变深后我们获得了什么 (已回答)深层学习为何要“Deep”(下)
深层学习开启了人工智能的新时代。不论任何行业都害怕错过这一时代浪潮,因而大批资金和人才争相涌入。但深层学习却以“黑箱”而闻名,不仅调参难,训练难,“新型”网络结构的论文又如雨后春笋般地涌现,使得对所有结构的掌握变成了不现实。我们缺少一个对深层学习合理的认识。本文就是通过对深层神经网络惊人表现背后原因的思考,揭示设计一个神经网络的本质,从而获得一个对“如何设计网络”的全局指导。
深层学习为何要“Deep”(上)一、基本变换:层神经网络是由一层一层构建的,那么每层究竟在做什么?
数学式子:每层神经网络的数学理解:用线性变换跟随着非线性变化,将输入空间投向另一个空间。
物理理解:对
情景:的理解就是通过组合形成新物质。
又符合了我们所处的世界都是非线性的特点。
是二维向量,维度是碳原子和氧原子的数量
,数值且定为
,若确定
是三维向量,就会形成如下网络的形状 (神经网络的每个节点表示一个维度)。通过改变权重的值,可以获得若干个不同物质。右侧的节点数决定了想要获得多少种不同的新物质。(矩阵的行数) 1.如果权重W的数值如(1),那么网络的输出y⃗ 就会是三个新物质,[二氧化碳,臭氧,一氧化碳]。
(1)2.也可以减少右侧的一个节点,并改变权重W至(2),那么输出
就会是两个新物质,
。
(2)3.如果希望通过层网络能够从[C, O]空间转变到
空间的话,那么网络的学习过程就是将W的数值变成尽可能接近(1)的过程 。如果再加一层,就是通过组合
这三种基础物质,形成若干更高层的物质。 4.重要的是这种组合思想,组合成的东西在神经网络中并不需要有物理意义。
每层神经网络的物理理解:通过现有的不同物质的组合形成新物质。
二、理解视角:现在我们知道了每一层的行为,但这种行为又是如何完成识别任务的呢?
数学视角:“线性可分”一维情景:以分类为例,当要分类正数、负数、零,三类的时候,一维空间的直线可以找到两个超平面(比当前空间低一维的子空间。当前空间是直线的话,超平面就是点)分割这三类。但面对像分类奇数和偶数无法找到可以区分它们的点的时候,我们借助 x % 2(取余)的转变,把x变换到另一个空间下来比较,从而分割。 二维情景:平面的四个象限也是线性可分。但下图的红蓝两条线就无法找到一超平面去分割。 神经网络的解决方法依旧是转换到另外一个空间下,用的是所说的5种空间变换操作。比如下图就是经过放大、平移、旋转、扭曲原二维空间后,在三维空间下就可以成功找到一个超平面分割红蓝两线 (同SVM的思路一样)。 上面是一层神经网络可以做到的,如果把当做新的输入再次用这5种操作进行第二遍空间变换的话,网络也就变为了二层。最终输出是
。 设想网络拥有很多层时,对原始输入空间的“扭曲力”会大幅增加,如下图,最终我们可以轻松找到一个超平面分割空间。 当然也有如下图失败的时候,关键在于“如何扭曲空间”。所谓监督学习就是给予神经网络网络大量的训练例子,让网络从训练例子中学会如何变换空间。每一层的权重W就控制着如何变换空间,我们最终需要的也就是训练好的神经网络的所有层的权重矩阵。。这里有非常棒的可视化空间变换demo,一定要打开尝试并感受这种扭曲过程。更多内容请看Neural Networks, Manifolds, and Topology。
上面的内容有三张动态图,对于理解这种空间变化非常有帮助。由于知乎不支持动态图,可以在gitbook深层学习为何要“deep”上感受那三张图。一定一定要感受。
线性可分视角:神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。
增加节点数:增加维度,即增加线性转换能力。增加层数:增加激活函数的次数,即增加非线性转换次数。
物理视角:“物质组成”类比:回想上文由碳氧原子通过不同组合形成若干分子的例子。从分子层面继续迭代这种组合思想,可以形成DNA,细胞,组织,器官,最终可以形成一个完整的人。继续迭代还会有家庭,公司,国家等。这种现象在身边随处可见。并且原子的内部结构与太阳系又惊人的相似。不同层级之间都是以类似的几种规则再不断形成新物质。你也可能听过分形学这三个字。可通过观看从1米到150亿光年来感受自然界这种层级现象的普遍性。 人脸识别情景:我们可以模拟这种思想并应用在画面识别上。由像素组成菱角再组成五官最后到不同的人脸。每一层代表不同的不同的物质层面 (如分子层)。而每层的W存储着如何组合上一层的物质从而形成新物质。 如果我们完全掌握一架飞机是如何从分子开始一层一层形成的,拿到一堆分子后,我们就可以判断他们是否可以以此形成方式,形成一架飞机。 附:Tensorflow playground展示了数据是如何“流动”的。物质组成视角:神经网络的学习过程就是学习物质组成方式的过程。
增加节点数:增加同一层物质的种类,比如118个元素的原子层就有118个节点。增加层数:增加更多层级,比如分子层,原子层,器官层,并通过判断更抽象的概念来识别物体。
按照上文在理解视角中所述的观点,可以想出下面两条理由关于为什么更深的网络会更加容易识别,增加容纳变异体(variation)(红苹果、绿苹果)的能力、鲁棒性(robust)。
数学视角:变异体(variation)很多的分类的任务需要高度非线性的分割曲线。不断的利用那5种空间变换操作将原始输入空间像“捏橡皮泥一样”在高维空间下捏成更为线性可分/稀疏的形状。 物理视角:通过对“抽象概念”的判断来识别物体,而非细节。比如对“飞机”的判断,即便人类自己也无法用语言或者若干条规则来解释自己如何判断一个飞机。因为人脑中真正判断的不是是否“有机翼”、“能飞行”等细节现象,而是一个抽象概念。层数越深,这种概念就越抽象,所能涵盖的变异体就越多,就可以容纳战斗机,客机等很多种不同种类的飞机。
三、神经网络的训练知道了神经网络的学习过程就是学习控制着空间变换方式(物质组成方式)的权重矩阵后,接下来的问题就是如何学习每一层的权重矩阵W。
如何训练:既然我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过比较当前网络的预测值和我们真正想要的目标值,再根据两者的差异情况来更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。因此就需要先定义“如何比较预测值和目标值的差异”,这便是损失函数或目标函数(loss function or objective function),用于衡量预测值和目标值的差异的方程。loss function的输出值(loss)越高表示差异性越大。那神经网络的训练就变成了尽可能的缩小loss的过程。 所用的方法是梯度下降(Gradient descent):通过使loss值向当前点对应梯度的反方向不断移动,来降低loss。一次移动多少是由学习速率(learning rate)来控制的。
梯度下降的问题:然而使用梯度下降训练神经网络拥有两个主要难题。
1、局部极小值梯度下降寻找的是loss function的局部极小值,而我们想要全局最小值。如下图所示,我们希望loss值可以降低到右侧深蓝色的最低点,但loss有可能“卡”在左侧的局部极小值中。
试图解决“卡在局部极小值”问题的方法分两大类:调节步伐:调节学习速率,使每一次的更新“步伐”不同。常用方法有:
随机梯度下降(Stochastic Gradient Descent (SGD):每次只更新一个样本所计算的梯度
小批量梯度下降(Mini-batch gradient descent):每次更新若干样本所计算的梯度的平均值动量(Momentum):不仅仅考虑当前样本所计算的梯度;Nesterov动量(Nesterov Momentum):Momentum的改进Adagrad、RMSProp、Adadelta、Adam:这些方法都是训练过程中依照规则降低学习速率,部分也综合动量
优化起点:合理初始化权重(weights initialization)、预训练网络(pre-train),使网络获得一个较好的“起始点”,如最右侧的起始点就比最左侧的起始点要好。常用方法有:高斯分布初始权重(Gaussian distribution)、均匀分布初始权重(Uniform distribution)、Glorot 初始权重、He初始权、稀疏矩阵初始权重(sparse matrix)
2、梯度的计算机器学习所处理的数据都是高维数据,该如何快速计算梯度、而不是以年来计算。 其次如何更新隐藏层的权重? 解决方法是:计算图:反向传播算法这里的解释留给非常棒的Computational Graphs: Backpropagation需要知道的是,反向传播算法是求梯度的一种方法。如同快速傅里叶变换(FFT)的贡献。 而计算图的概念又使梯度的计算更加合理方便。
基本流程图:下面就结合图简单浏览一下训练和识别过程,并描述各个部分的作用。要结合图解阅读以下内容。但手机显示的图过小,最好用电脑打开。
收集训练集(train data):也就是同时有input以及对应label的数据。每个数据叫做训练样本(sample)。label也叫target,也是机器学习中最贵的部分。上图表示的是我的数据库。假设input本别是x的维度是39,label的维度是48。设计网络结构(architecture):确定层数、每一隐藏层的节点数和激活函数,以及输出层的激活函数和损失函数。上图用的是两层隐藏层(最后一层是输出层)。隐藏层所用激活函数a( )是ReLu,输出层的激活函数是线性linear(也可看成是没有激活函数)。隐藏层都是1000节点。损失函数L( )是用于比较距离MSE:mean((output - target)^2)。MSE越小表示预测效果越好。训练过程就是不断减小MSE的过程。到此所有数据的维度都已确定:
训练数据:权重矩阵:
偏移向量:
网络输出:
数据预处理(preprocessing):将所有样本的input和label处理成能够使用神经网络的数据,label的值域符合激活函数的值域。并简单优化数据以便让训练易于收敛。比如中心化(mean subtraction)、归一化(normlization)、主成分分析(PCA)、白化(whitening)。假设上图的input和output全都经过了中心化和归一化。
权重初始化(weights initialization):在训练前不能为空,要初始化才能够计算loss从而来降低。
初始化决定了loss在loss function中从哪个点开始作为起点训练网络。上图用均匀分布初始权重(Uniform distribution)。
训练网络(training):训练过程就是用训练数据的input经过网络计算出output,再和label计算出loss,再计算出gradients来更新weights的过程。
正向传递:,算当前网络的预测值计算loss:
计算梯度:从loss开始反向传播计算每个参数(parameters)对应的梯度(gradients)。这里用Stochastic Gradient Descent (SGD) 来计算梯度,即每次更新所计算的梯度都是从一个样本计算出来的。传统的方法Gradient Descent是正向传递所有样本来计算梯度。SGD的方法来计算梯度的话,loss function的形状如下图所示会有变化,这样在更新中就有可能“跳出”局部最小值。 更新权重:这里用最简单的方法来更新,即所有参数都
预测新值:训练过所有样本后,打乱样本顺序再次训练若干次。训练完毕后,当再来新的数据input,就可以利用训练的网络来预测了。这时的output就是效果很好的预测值了。下图是一张实际值和预测值的三组对比图。输出数据是48维,这里只取1个维度来画图。蓝色的是实际值,绿色的是实际值。最上方的是训练数据的对比图,而下方的两行是神经网络模型从未见过的数据预测对比图。(不过这里用的是RNN,主要是为了让大家感受一下效果)
注:此部分内容不是这篇文章的重点,但为了理解深层神经网络,需要明白最基本的训练过程。 若能理解训练过程是通过梯度下降尽可能缩小loss的过程即可。 若有理解障碍,可以用python实践一下从零开始训练一个神经网络,体会整个训练过程。若有时间则可以再体会一下计算图自动求梯度的方便利用TensorFlow。
四、结合Tensorflow playground理解5种空间操作和物质组成视角打开网页后,总体来说,蓝色代表正值,黄色代表负值。拿分类任务来分析。
数据:在二维平面内,若干点被标记成了两种颜色。黄色,蓝色,表示想要区分的两类。你可以把平面内的任意点标记成任意颜色。网页给你提供了4种规律。神经网络会根据你给的数据训练,再分类相同规律的点。 输入:在二维平面内,你想给网络多少关于“点”的信息。从颜色就可以看出来,左边是负,右边是正,
表示此点的横坐标值。同理,
表示此点的纵坐标值。
是关于横坐标值的“抛物线”信息。你也可以给更多关于这个点的信息。给的越多,越容易被分开。 连接线:表示权重,蓝色表示用神经元的原始输出,黄色表示用负输出。深浅表示权重的绝对值大小。鼠标放在线上可以看到具体值。也可以更改。在(1)中,当把
输出的一个权重改为-1时,
的形状直接倒置了。不过还需要考虑激活函数。(1)中用的是linear。在(2)中,当换成sigmoid时,你会发现没有黄色区域了。因为sigmoid的值域是(0,1) (1) (2)输出:黄色背景颜色都被归为黄点类,蓝色背景颜色都被归为蓝点类。深浅表示可能性的强弱。 上图中所有在黄色背景颜色的点都会被分类为“黄点“,同理,蓝色区域被分成蓝点。在上面的分类分布图中你可以看到每一层通过上一层信息的组合所形成的。权重(那些连接线)控制了“如何组合”。神经网络的学习也就是从数据中学习那些权重。Tensorflow playground所表现出来的现象就是“在我文章里所写的“物质组成思想”,这也是为什么我把Tensorflow playground放在了那一部分。不过你要是把Tensorflow的个名字拆开来看的话,是tensor(张量)的flow(流动)。Tensorflow playground的作者想要阐述的侧重点是“张量如何流动”的。5种空间变换的理解:Tensorflow playground下没有体现5种空间变换的理解。需要打开这个网站尝试:ConvNetJS demo: Classify toy 2D data 左侧是原始输入空间下的分类图,右侧是转换后的高维空间下的扭曲图。 最终的扭曲效果是所有绿点都被扭曲到了一侧,而所有红点都被扭曲到了另一侧。这样就可以线性分割(用超平面(这里是一个平面)在中间分开两类)深层学习为何要“Deep”(下)
虽然在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. 神经网络在什么问题上不具备优势
其他推荐读物
Bengio Y. Learning deep architectures for AI[J]. Foundations and trends® in Machine Learning, 2009, 2(1): 1-127.Brahma P P, Wu D, She Y. Why Deep Learning Works: A Manifold Disentanglement Perspective[J]. 2015.Lin H W, Tegmark M. Why does deep and cheap learning work so well?[J]. arXiv preprint arXiv:1608.08225, 2016.Bengio Y, Courville A, Vincent P. Representation learning: A review and new perspectives[J]. IEEE transactions on pattern analysis and machine intelligence, 2013, 35(8): 1798-1828.Deep Learning textbook by Ian Goodfellow and Yoshua Bengio and Aaron CourvilleYJango的整个思考流程都围绕减熵二字进行。之前在《熵与生命》和《生物学习》中讨论过,生物要做的是降低环境的熵,将不确定状态变为确定状态。通常机器学习是优化损失函数,并用概率来衡量模型优劣。然而概率正是由于无法确定状态才不得不用的衡量手段。生物真正想要的是没有丝毫不确定性。
深层神经网络在自然问题上更具优势,因为它和生物学习一样,是找回使熵增加的“物理关系”(知识,并非完全一样),将变体(
)转化回因素(
)附带物理关系的形式,从源头消除熵(假设每个因素只有两种可能状态)。这样所有状态间的关系可以被确定,要么肯定发生,要么绝不发生,也就无需用概率来衡量。因此下面定义的学习目标并非单纯降低损失函数,而从确定关系的角度考虑。一个完美训练好的模型就是两个状态空间内所有可能取值间的关系都被确定的模型。
学习目标:是确定(determine)两个状态空间内所有可能取值之间的关系,使得熵尽可能最低。
注:对熵不了解的朋友可以简单记住,事件的状态越确定,熵越小。如绝不发生(概率0)或肯定发生(概率为1)的事件熵小。而50%可能性事件的熵反而大。
为举例说明,下面就一起考虑用神经网络学习以下两个集合的不同关联(OR gate 和 XOR gate)。看看随着网络结构和关联的改变,会产生什么不同情况。尤其是最后网络变深时与浅层神经网络的区别。
注:选择这种XOR这种简单关联的初衷是输入和输出空间状态的个数有限,易于分析变体个数和熵增的关系。
注:用“变体(variation)”是指同一类事物的不同形态,比如10张狗的图片,虽然外貌各异,但都是狗。
问题描述:集合A有4个状态,集合B有2个状态。0和1只是用于表示不同状态的符号,也可以用0,1,2,3表示。状态也并不一定表示数字,可以表示任何物理意义。
方式1:记忆随机变量X:可能取值是
随机变量Y:可能取值是
注:随机变量(大写X)是将事件投射到实数的函数。用对应的实数表示事件。而小写字母x表示对应该实数的事件发生了,是一个具体实例。
网络结构:暂且不规定要学习的关联是OR还是XOR,先建立一个没有隐藏层,仅有一个输入节点,一个输出节点的神经网络。表达式:,
表示sigmoid函数。(只要是非线性即可,relu是目前的主流)说明:下图右侧中的虚线表示的既不是神经网络的链接,也不是函数中的映射,而是两个空间中,所有可能值之间的关系(relation)。学习的目的是确定这些状态的关系。比如当输入00时,模型要尝试告诉我们00到1的概率为0,00到0的概率为1,这样熵
才会为零。
关系图:左侧是网络结构,右侧是状态关系图。输入和输出空间之间共有8个关系(非箭头虚线表示关系)。除非这8个关系对模型来说都是相同的,否则用
表示
时的熵
就会增加。(
无法照顾到8个关系,若完美拟合一个关系,其余的关系就不准确)
注:这里YJango是
用表示
的缩写。
数据量:极端假设,若用查找表来表示关系:需要用8个不同的
方式2:手工特征特征:空间A的4个状态是由两个0或1的状态共同组成。我们可以观察出来(计算机并不能),我们利用这种知识数据来记住想要拟合的
。
把A中的状态分解开(disentangle)。分解成两个独立的子随机变量
和
。也就是用二维向量表示输入。
网络结构:由于分成了二维特征,这次网络结构的输入需改成两个节点。下图中的上半部分是,利用人工知识
将随机变量
无损转变为
和
的共同表达(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个不同的
方式3:加入隐藏层网络结构1:现在直接把来拟合
。其中每个数据可以用于确定2条关系线。
和
作为输入(用
,
表示),不考虑
。并且在网络结构中加入一个拥有2个节点(node)隐藏层(用
和
表示)。表达式:
关系图1:乍一看感觉关系更难确定了。原来还是只有8条关系线,现在又多了16条。但实际上所需要的数据量丝毫没有改变。因为以下两条先验知识的成立。
注:下图最右侧是表示:当一个样本进入网络后,能对学习哪些关系线起到作用。
1. 并行:
和
的学习完全是独立并行。这就是神经网络的两条固有先验知识中的:并行:网络可以同时确定
和
的关联。也是Bengio大神所指的distributed representation。
注:有效的前提是所要学习的状态空间的关联是可以被拆分成并行的因素(factor)。
注:
就没有并行一说,因为
是一个节点拥有两个变体,而不是两个独立的因素。但是也可以把
拆开表示为one-hot-vector。这就是为什么分类时并非用一维向量表示状态。更验证了YJango在机器学习中对学习定义:学习是将变体拆成因素附带关系的过程。
迭代:第二个先验知识是:在学习
的同时,
和
也可以被学习。这就是神经网络的两条固有先验知识中的:迭代:网络可以在确定上一级的同时确定下一级的所有内容。也是Bengio大神所指的compositionality。
注:有效的前提是所要学习的空间的关联是由上一级迭代形成的。所幸的是,我们所生活的世界几乎都符合这个前提(有特殊反例)。
关联:如果想学习的关联是异或门(XOR),真值表和实际训练完的预测值对照如下。
和
:期初若用两条网络连接表示
的16个关系可能,那么熵会很高。但用两条线表示
的8个关系,模型的熵可以降到很低。下图中
的输出值对应红色数字。
对应输出值是由蓝色数字表达。
数据量:如关系图1中最右侧图所示,一个输入[0,0]会被关联到0。而这个数据可用于学习2+4个关系。也就是说网络变深并不需要更多数据。
:这时再看
的关系,完全就是线性的。光靠观察就能得出
的一个表达。
模型的熵
与用一条
所要拟合的关系数量有关。也就是说,
变体(variation)越少,拟合难度越低,熵越低。
网络结构2:既然这样,有4个变体,这次把节点增加到4。
关系图2:与网络结构1不同,增加到4个节点后,每个节点都可以完全没有变体,只取一个值。想法很合理,但实际训练时,模型不按照该方式工作。
注:太多颜色容易眼花。这里不再用颜色标注不同线之间的对应关系,但对应关系依然存在。
问题:因为会出现右图的情况:只有两个节点在工作(线的粗细表示权重大小)。和
的节点在滥竽充数。这就跟只有两个节点时没有太大别。原因是神经网络的权重的初始化是随机的,数据的输入顺序也是随机的。这些随机性使得权重更新的方向无法确定。
讨论:网络既然选择这种方式来更新权重,是否一定程度上说明,用较少的节点就可以表示该关联?并不是,原因在于日常生活中的关联,我们无法获得所有变体的数据。所得数据往往是很小的一部分。较少的节点可以表示这一小部分数据的关联,但却无法涵盖所有变体情况。造成实际应用时效果不理想。
缓解:缓解的方式有L2正则化(L2 regularization):将每层权重矩阵的平方和作为惩罚。表达式:,
是惩罚的强弱,可以调节。除以2是为了求导方便(与后边的平方抵消)。意义:当同一层的权重有个别值过高时,平方和就会增加。而模型在训练中会降低该惩罚。产生的作用是使所有权重平摊任务,让
都有值。以这样的方式来使每个节点都工作,从而消除变体,可以缓解过拟合(overfitting)。例如:
具有一个隐藏层的神经网络可以模拟任何函数,最糟的情况需要
个节点。
也叫Universal Approximation Theorem。但最糟的情况是输入空间有多少个变体,就需要多少个节点。k表示独立因素的变体个数,n表示独立因素的个数。上述的例子中最糟的情况需要
个隐藏节点。而代价也是需要
个不同数据才可以完美拟合。
使用条件:浅层神经网络可以分开几乎所有自然界的关联。因为神经网络最初就是由于可移动的生物需要预测未来事件所进化而来的。所学习的关联是过去状态到未来状态。如下图,物理中的力也可以分离成两个独立的分力来研究。
但有一种不适用的情况:非函数。
实例:函数的定义是:每个输入值对应唯一输出值的对应关系。为什么这么定义函数?对应两个以上的输出值在数学上完全可以。但是在宏观的世界发展中却不常见。如下图:
时间顺流:不管从哪个起点开始,相同的一个状态(不是维度)可以独立发展到多个不同状态(如氧原子可演变成氧分子和臭氧分子)。也就热力学第二定律的自发性熵增:原始状态通过物理关系,形成更多变体。
时间倒流:宏观自然界中难以找到两个以上的不同状态共同收回到一个状态的例子(如氧分子和臭氧分子无法合并成氧原子)。如果这个可以实现,熵就会自发性减少。也就不需要生物来消耗能量减熵。我们的房间会向整齐的状态发展。但这违背热力学第二定律。至少在我们的宏观世界中,这种现象不常见。所以进化而来的神经网络可以拟合任何函数,但在非函数上就没有什么优势。毕竟生物的预测是从过去状态到未来状态。也说明神经网络并不违背无免费午餐定理。
实例:XOR门的输入空间和输出空间若互换位置,则神经网络拟合出来的可能性就非常低(并非绝对无法拟合)。方式4:继续加深浅层神经网络可以模拟任何函数,但数据量的代价是无法接受的。深层解决了这个问题。相比浅层神经网络,深层神经网络可以用更少的数据量来学到更好的拟合。上面的例子很特殊。因为
,
,比较不出来。下面YJango就换一个例子,并比较深层神经网络和浅层神经网络的区别。
问题描述:空间
有8个可能状态,空间
有2个可能状态:
网络结构:
浅层神经网络:8节点隐藏层深层神经网络:2节点隐藏层 + 3节点隐藏层深浅对比:
浅层神经网络:假如说输入3和输出0对应。数据
只能用于学习一个节点(如
)前后的两条关系线。完美学习该关联需要所有8个变体。然而当变体数为
时,我们不可能获得
个不同变体的数据,也失去了学习的意义。毕竟我们是要预测没见过的数据。所以与其说这是学习,不如说这是强行记忆。好比一个学生做了100册练习题,做过的题会解,遇到新题仍然不会。他不是学会了做题,而是记住了怎么特定的题。
深层神经网络:如果只观察输入和输出,看起来同样需要8个不同的
训练数据。但不同
之间有共用部分。比如说,在确定3和0关系时,也同时对所有共用
连接的其他变体进行确定。这样就使得原本需要8个不同数据才能训练好的关联变成只需要3,4不同数据个就可以训练好。(下图关系线的粗细并非表示权重绝对值,而是共用度)
深层的前提:使用浅层神经网络好比是用
解
,需要2个不同数据。而深层神经网络好比用
解
,只需要一个数据。无免费午餐定理告诉我们,优化算法在一个任务上优秀,就一定会在其他任务上有缺陷,深层同样满足该定理。如果用
去解实际上有
的
,或者去解实际为
的关联时,搜索效果只会更差。所以深层的前提是:
空间中的元素可以由
迭代发展而来的。换句话说
中的所有变体,都有共用根源
(root)。
我们的物理世界:幸运的是,我们的物理世界几乎都满足迭代的先验知识。
实例:比如进化。不同动物都是变体,虽然大家现在的状态各异,但在过去都有共同的祖先。 实例:又如细胞分裂。八卦中的8个变体是由四象中4个变体的基础上发展而来,而四象又是由太极的2个变体演变而来。很难不回想起“无极生太极,太极生两仪,两仪生四象,四象生八卦”。(向中国古人致敬,虽然不知道他们的原意)学习的过程是因素间的关系的拆分,关系的拆分是信息的回卷,信息的回卷是变体的消除,变体的消除是不确定性的缩减。
自然界两个固有的先验知识:
并行:新状态是由若干旧状态并行组合形成。
迭代:新状态由已形成的状态再次迭代形成。
为何深层学习:深层学习比浅层学习在解决结构问题上可用更少的数据学习到更好的关联。
随后的三篇文章正是用tensorflow实现上述讨论的内容,以此作为零基础实现深层学习的起点。
TensorFlow基本用法代码演示LV1代码演示LV2最后总结一下开篇的问题: 1. 为什么神经网络高效:并行的先验知识使得模型可用线性级数量的样本学习指数级数量的变体 2. 学习的本质是什么:将变体拆分成因素和知识(Disentangle Factors of Variation)
稀疏表达:一个矩阵被拆分成了稀疏表达和字典。one hot vector:将因素用不同维度分开,避免彼此纠缠。 3. 为什么深层神经网络比浅层神经网络更高效:迭代组成的先验知识使得样本可用于帮助训练其他共用同样底层结构的样本。 4. 神经网络在什么问题上不具备优势:不满足并行与迭代先验的任务 非函数:需要想办法将问题转化。非迭代(非结构):该层状态不是由上层状态构成的任务(如:很深的CNN因为有max pooling,信息会逐渐丢失。而residual network再次使得迭代的先验满足)到此我们讨论完了神经网络最基础的,也是最重要的知识。在实际应用中仍会遇到很多问题(尤其是神经网络对noise的克服更加巧妙)。随后YJango会再和大家一起分析过深后会产生什么效果,并一步步引出设计神经网络的本质。
编辑于 2017-01-05 31 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 申请转载Peng Bo 禀临科技 http://withablink.taobao.com 联合创始人1046 人赞同最近 Google Tensorflow 做了一个非常直观的神经网络 playground。不夸张地说,现在每个人都可以在自己的浏览器里面直接“玩深度神经网络”了。什么都不用说,自己玩玩就明白。地址是: A Neural Network Playground (可能要翻墙) 如果不明白里面的 ReLU,L1 等等是什么,没关系,在搜索引擎查一下都可以查到答案。代码在 Github 上,有兴趣的朋友可以去给它加 Dropout,Convolution,Pooling 之类。【UPDATE:对 AlphaGo 和围棋人工智能有兴趣的朋友,我最近在写一个系列,介绍如何自制你的"AlphaGo",请点击:知乎专栏】编辑于 2017-01-10 44 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
知乎用户 谨言慎行!280 人赞同首先把题主给的链接看了一下,大致内容如下:你需要挑选芒果,你不知道什么样的芒果最好吃,所以你就尝遍了所有的芒果,然后自己总结出个大深黄色的比较好吃,以后再去买的时候,就可以直接挑选这种。那什么是机器学习呢,就是你让机器“尝”一遍所有芒果,当然,也假设它知道哪些好吃,让机器去总结一套规律(个大深黄色),这就是机器学习。具体操作,就是你描述给机器每一个芒果的特征(颜色,大小,软硬……),描述给机器其输出(味道如何,是否好吃),剩下的就等机器去学习出一套规则。等等,那机器是怎么学习到这个规则(个大深黄色的好吃)的?没错,是通过机器学习算法。而题主所问的神经网络,恰好就是一种机器学习算法!近些年来,由于深度学习概念的兴起,神经网络又成为了机器学习领域最热门的研究方法。我相信当明确神经网络是一种机器学习算法之后,就可以很轻易的给一个外行讲清楚神经网络到底是用来做什么的。可是神经网络为什么可以完成这个功能呢?神经网络就像一个刚开始学习东西的小孩子,开始认东西,作为一个大人(监督者),第一天,他看见一只京巴狗,你告诉他这是狗;第二天他看见一只波斯猫,他开心地说,这是狗,纠正他,这是猫;第三天,他看见一只蝴蝶犬,他又迷惑了,你告诉他这是狗……直到有一天,他可以分清任何一只猫或者狗。其实神经网络最初得名,就是其在模拟人的大脑,把每一个节点当作一个神经元,这些“神经元”组成的网络就是神经网络。而由于计算机出色的计算能力和细节把握能力,在大数据的基础上,神经网络往往有比人更出色的表现。当然了,也可以把神经网络当作一个黑箱子,只要告诉它输入,输出,他可以学到输入与输出的函数关系。神经网络的理论基础之一是三层的神经网络可以逼近任意的函数,所以理论上,只要数据量够大,“箱子容量”够大(神经元数量),神经网络就可以学到你要的东西。第一次回答问题,什么都想说,可能比较乱,有不对的地方,欢迎大家批评指正。发布于 2014-02-13 36 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
沈晟 心动网络CTO,射手影音|射手网创始人,品…27 人赞同还好问题只是怎样尽量简单的解释什么是神经网络,否则还真不敢回答。学术圈比较喜欢用一些名词术语,很容易对理解造成更多困惑。我只说一下个人的粗浅理解,希望对初入门的同学有帮助。可能存在疏漏和误导,只能请大家充分利用自己的判断力。----先放轻松态度,应该更便于理解神经网络。神经网络+深度学习中的很多理论方法已经存在很多年(大于10),并不是突然之间像魔术那样出现而不可思议。最近开始吸引焦点,主要是因为可用的计算能力(CPU、GPU)的快速发展,让海量矩阵乘法运算更容易被实验、测试和验证。例如,TensorFlow的出现,最大的意义,就是AI for everybody,让「旧时王谢堂前燕,飞入寻常百姓家」。----如果尝试强行一句话解释深度学习神经网络,我会这么总结:「通过堆积大量且多样计算方法的函数计算式的计算单元(有关名词:node/activation function/ReLU/...),并尝试为这些计算单元建立大量的相互连接,同时为了有序有效我们通过分层使连接有次序并避免需要尝试的连接数成幂指数上升,之后制定一个策略帮助整个神经网络的计算评价尝试的结果更好更可用或更坏更不可用(有关名词:lose/cost/objective funtion/softmax/cross entropy), 在提供大量数据训练神经网络之后,神经网络通过计算结果的评价策略,决定以什么样的次序连接哪些计算单元的计算结果更值得被使用(有关名词:强化连接),通过大量循环不同的连接方式找到评价最好的一些的连接计算单元的次序和权值,就此建立模型(计算式组合)可用于解决更多同类问题。」堆积大量计算单元(神经元)的最大的好处是什么呢。就是减轻设计(或者说supervise)的压力。可以更少考虑应该怎样去针对一个个很具体的feature细节(carefully engineered function)去解决,而是通过训练来强化或弱化它们直接的连接,以一种自然选择的方式淘汰和筛选,留下可用的解题模型。那么上面说的大量是多大呢。一个昨天看的一个论文,是用了65万个。不过虽然训练时需要很大的计算量,但是训练的结果在使用时,就只需要很小的运算量了。就像迷宫有力地图,再走一次时,就不会走那么多弯路了。----其实通过尝试组合大量不同的算法,找到最适合解决问题的算法组合,训练+强化理论,是机器学习一直都在做的。那么深度学习神经网络的核心突破是什么,我认为主要是两点:1、分层。这个最大的好处,是将计算单元之间需要尝试的连接(组合)数量,控制可控的范围。2、一些被发现很适合用来作为深度学习组件的计算单元函数,例如ReLU(When in doubt, ReLU)----最后推荐一个我觉得很好的入门资源:https://github.com/jtoy/awesome-tensorflow编辑于 2016-10-19 3 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
周筠儿童教育话题优秀回答者 虚晃一枪。535 人赞同早年读电信系在职硕士时,选修了一门《人工神经网络》课程,老师讲得云山雾罩,我们听得如梦似幻。虽然最后也考了80多分,但同学们相互间吐槽,都觉得这门课把人给学神经了!别人怎么样我不知道,我反正是稀里糊涂的,没弄清楚概念。今年,审读吴军老师的《数学之美》第二版,读到这两段话时,我笑了,原来我并不孤独——
【 有不少专业术语乍一听很唬人,“人工神经网络”就属于这一类,至少我第一次听到这个词就被唬住了。你想啊,在大家的印象当中,人们对人脑的结构都还根本没有搞清楚,这就冒出来一个“人工的”神经网络,似乎是在用计算机来模拟人脑。想到人脑的结构那么复杂,大家的第一反应一定是人工神经网络肯定非常高深。如果我们有幸遇到一个好心同时又善于表达的科学家或教授,他愿意花一两个小时的时间,深入浅出地把人工神经网络的底细告诉你,你便会发现,“哦,原来是这么回事”。如果我们不幸遇到一个爱卖弄的人,他会很郑重地告诉你“我在使用人工神经网络”或者“我研究的课题是人工神经网络”,然后就没有下文了,如此,你除了对他肃然起敬外,不由得可能还会感到自卑。当然还有好心却不善于表达的人试图将这个概念给你讲清楚,但是他用了一些更难懂的名词,讲得云山雾罩,最后你发现听他讲了好几个小时,结果是更加糊涂了,你除了浪费时间外一无所获,于是你得出一个结论:反正我这辈子不需要搞懂它了。
大家可别以为我是在说笑话,这些都是我的亲身经历。首先,我没有遇到过一两小时给我讲懂的好心人,其次我遇到了一批在我前面卖弄的人,作为年轻人,总是希望把自己不明白的东西搞懂,于是我决定去旁听一门课。不过,我听了大约两三次便不再去了,因为除了浪费时间,似乎我并没得到什么收获。好在我自己做研究暂时用不到它,也就不再关心了。后来在美国读博士期间,我喜欢在睡觉前躺着看书,没事儿就捧着几本关于人工神经网络的教科书在床上看,居然也看懂了。然后再用它做了两三个项目,算是学会了。到这时回过头来再看“人工神经网络”,其实并不复杂,入门也不难,只是我走了弯路。——吴军】
君子报仇,三十年不晚。大学毕业三十年后,吴老师在数学之美 (第二版) 里,单独用一章讲Google大脑和人工神经网络,一抒当年的郁闷,也顺便帮我解了气:)
我把这一章的内容贴一部分在这里,希望对大家理解神经网络的概念有帮助:
发布于 2015-01-05 55 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 申请转载许铁-巡洋舰科技 微信公众号请关注chaoscruiser ,铁哥个人…13 人赞同作者:许铁-巡洋舰科技链接:知乎专栏来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
人工神经网络的第一个里程碑是感知机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,就是说在参数空间里寻找使得错误减少最快的方法改进。
人工神经网络对于生物神经网络的奇妙之处在于, 它反过来启迪了生物神经网络是在干什么的,就好像费曼的那句话“ 你要想真正理解一个东西, 就造出一台”。
发布于 2016-11-29 1 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利vczh 专业造轮子,拉黑抢前排。…637 人赞同1+1是多少?10!傻逼,是21+2是多少?37!傻逼,是31+3是多少?-5!傻逼,是4……1+1是多少?5!傻逼,是21+2是多少?14!傻逼,是31+3是多少?25!傻逼,是4……1+1是多少?2!傻逼,是21+2是多少?5!傻逼,是31+3是多少?8!傻逼,是4……1+1是多少?2!傻逼,是21+2是多少?3!傻逼,是31+3是多少?4!傻逼,是4……1+1是多少?2!傻逼,是21+2是多少?3!傻逼,是31+3是多少?4!傻逼,是4……========3年后========100+200是多少?300!发布于 2016-06-21 94 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
lee philip 神经网络/自然语言处理55 人赞同补充一下@贾伟的答案训练过程的那段,写得比较像强化学习,神经网络用到的方法大部分是有监督学习。我觉得故事应该是这样。。。。你想让神经网络(简称神经)辨认猫和狗(算法类型为分类)。于是给它看一百万只狗,和一百万只猫,每只狗的脑门上都贴着“我是狗”的字条,猫则贴“我是猫”(使用标注数据)。神经同时看五十万只禽兽,分四批看,并作出判断(实现时用并行处理,使用mini-batch)。每个看到的猫或狗,如果判断错了,就修正自己的判断标准(优化)。每看完这二百万只禽兽算一轮,每学十轮就看一些之前完全没见过的猫猫狗狗做出判断(推广性测试)。当神经刻苦学习猫狗知识的时候,你正在睡觉,一觉睡醒,发现神经一小时前判断猫和狗比较准(次最优解),现在学太多反而判断不准了(过拟合),于是你让神经使用一小时前的标准(防止过拟合技巧之early-stopping)。这样训练过程就结束了。编辑于 2014-02-15 9 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
苗加加16 人赞同简单:神经网络就是通过模拟神经元的运动,获得一个可以变形为任意形状的任意维函数函数的形状取决于你告诉他哪些点应该是这个函数应该尽量经过的关于形象和有趣。。实在是不擅长。。发布于 2014-02-13 2 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
胡昌振 学企管不做企管25 人赞同人工神经网络算法的作用机理还是比较难理解,现在以一个例子来说明其原理。这个例子是关于人的识别技术的,在门禁系统,逃犯识别,各种验证码破译,银行预留印鉴签名比对,机器人设计等领域都有比较好的应用前景,当然也可以用来做客户数据的挖掘工作,比如建立一个能筛选满足某种要求的客户群的模型。机器识别人和我们人类识别人的机理大体相似,看到一个人也就是识别对象以后,我们首先提取其关键的外部特征比如身高,体形,面部特征,声音等等。根据这些信息大脑迅速在内部寻找相关的记忆区间,有这个人的信息的话,这个人就是熟人,否则就是陌生人。人工神经网络就是这种机理。假设上图中X(1)代表我们为电脑输入的人的面部特征,X(2)代表人的身高特征X(3)代表人的体形特征X(4)代表人的声音特征W(1)W(2)W(3)W(4)分别代表四种特征的链接权重,这个权重非常重要,也是人工神经网络起作用的核心变量。现在我们随便找一个人阿猫站在电脑面前,电脑根据预设变量提取这个人的信息,阿猫面部怎么样,身高多少,体形胖瘦,声音有什么特征,链接权重初始值是随机的,假设每一个W均是0.25,这时候电脑按这个公式自动计算,Y=X(1)*W(1)+X(2)*W(2)+X(3)*W(3)+X(4)*W(4)得出一个结果Y,这个Y要和一个门槛值(设为Q)进行比较,如果Y>Q,那么电脑就判定这个人是阿猫,否则判定不是阿猫.由于第一次计算电脑没有经验,所以结果是随机的.一般我们设定是正确的,因为我们输入的就是阿猫的身体数据啊.现在还是阿猫站在电脑面前,不过阿猫怕被电脑认出来,所以换了一件衣服,这个行为会影响阿猫的体形,也就是X(3)变了,那么最后计算的Y值也就变了,它和Q比较的结果随即发生变化,这时候电脑的判断失误,它的结论是这个人不是阿猫.但是我们告诉它这个人就是阿猫,电脑就会追溯自己的判断过程,到底是哪一步出错了,结果发现原来阿猫体形X(3)这个体征的变化导致了其判断失误,很显然,体形X(3)欺骗了它,这个属性在人的识别中不是那么重要,电脑自动修改其权重W(3),第一次我对你是0.25的相信,现在我降低信任值,我0.10的相信你.修改了这个权重就意味着电脑通过学习认为体形在判断一个人是否是自己认识的人的时候并不是那么重要.这就是机器学习的一个循环.我们可以要求阿猫再穿一双高跟皮鞋改变一下身高这个属性,让电脑再一次进行学习,通过变换所有可能变换的外部特征,轮换让电脑学习记忆,它就会记住阿猫这个人比较关键的特征,也就是没有经过修改的特征.也就是电脑通过学习会总结出识别阿猫甚至任何一个人所依赖的关键特征.经过阿猫的训练电脑,电脑已经非常聪明了,这时你在让阿猫换身衣服或者换双鞋站在电脑前面,电脑都可以迅速的判断这个人就是阿猫.因为电脑已经不主要依据这些特征识别人了,通过改变衣服,身高骗不了它.当然,有时候如果电脑赖以判断的阿猫关键特征发生变化,它也会判断失误.我们就不要要求这么高了,不要说电脑,就是人类也无能为力,你的一个好朋友你经过多次的识记肯定认识吧,但是他整了容你们在大街上邂逅.你可能觉得这个人声音好熟悉,体形好熟悉,----都像自己一个朋友,就是脸长的不像.你不敢贸然上去搭讪吧(否定的判断).因为我们判定一个人是否是自己的朋友的时候依靠的关键的特征就是面部特征,而他恰恰就是改变了这一特征.当然也存在我们把一个拥有和我们朋友足够多相似特征的人判定为我们的朋友,这就是认错人的现象了.这些问题电脑也会出现.不过这个算法还是有比较积极的意义的,实现了一定程度上的智能化.发布于 2015-01-06 8 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
罗杰12 人赞同从函数上来看,我觉得神经网络是回归方程的级联叠加发布于 2014-05-28 2 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
毛毛林 选择自己真正喜欢的12 人赞同曾经做过一个计算机识别美女的程序,效果渣到可以把凤姐当作美女。 不过还是说说吧找二十个女性图片正面照,做成标准格式(此处不展开)编程测量眼睛大小,宽度,鼻子大小,高度,宽度等等你认为可以衡量美女的特点作为自变量。然后自己给这二十个女性的美貌打分0至100。把自变量和因变量一一对应输入计算机,让计算机学习之后只要把未判定的图片给计算机,计算机就会根据你的审美打分了(一秒钟在一百个头像中找到凤姐发送约吗我会乱说?)那么如何才能避开凤姐找到范冰冰呢?1,增加学习样本量,上万为佳,越大越好2,换个算法,这也是神经网络最核心的部分,或选择合适的层数,做非线性变换等发布于 2015-01-05 8 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
冯某某 认识了一帮敢爱敢恨的人61 人赞同最近学习不确定优化攒了一些笔记,连着说一说也算总结一下。零基础慎读。结论:神经网络是一个参数数量突破天际的回归分析。%突然发现在做算法的眼睛里神经网络就是模式识别。。----------------Part1 这些名字很帅的统计和优化方法是“粗暴的”通常来说,现在解决不确定优化问题。都会使用随机模拟、神经元网络和遗传算法联立的混合智能算法来求解。比如使目标变量的数学期望达到最优值的期望值模型,概率最优的可靠度模型(机会约束),还有我校Liu老师常提的随即相关机会,就是你前几个优化组合一下。其中随机模拟是一个不确定问题不可少的输入,遗传算法用来调神经网络的参数,神经网络用来逼近现实。互相配合,解决问题。在我看来是及其简单粗暴,不得已而为之的。只是用它们最干脆的思路,优化了最粗暴的方法。比方说,你能写出一个事物期望值的显示表达,那么对参变量求导就可以找到极大值点。当然有的时候不是很方便求出全局导数,那么梯度递降、可行方向等规划学方法和数值方法也大有可为。离散的最优值问题在凸区域上的解也是很方便就可以求出的,此所谓整数优化。这样一看这个混合算法真是毫无必要呀,那我们为什么还要用它们呢?原因是因为这是通用方法。我来举一个例子。整数优化,我们选取适当的函数把两种变量聚为两类。 图中有圈圈的是我们想区分的训练集。这个时候我们需要找一个合适的评价使得他们分开。最方便的是取机器学习里常用的gauss核函数(数值随距离中心点距离单调递减的光滑函数RBF),那么有九个参数。(均值协方差)优化目标是对几千个数聚类之后聚类结果中训练集被识别的个数的两倍与分出的非训练集的元素的个数的差值。我们知道这个值兼顾一二类错误的重要性,又是一个明确的目标,当然它越大越好。这个时候常规的优化算法就很难找出这九个参数的最优值了。结果: 毕竟经过一次聚类算法之后,中心点的位置是迭代的结果而完全不确定的。如果能在聚类之前就知道中心点的位置,那么还聚类干嘛呢?这个时候聚类这个操作就像黑盒子,是传统优化问题极度依赖,却表达不出的优化过程。输入是几千个点,输出只是我之前说的评价函数,参数有九个,这时候不太好把他们看做神经元,因为我并没有显式的给出其激活函数,或者这里的激活函数实际上是相互耦合的,或者我没有将每一个输入都看做是均等的,所以不太好做一个典型的例子。我选取6个染色体(开始是对训练集主成分分析的参数加上白噪声),迭代一万次之后,其9个参数依旧没有收敛。而且对于参数极度敏感,gauss核的均值稍做变化,聚类结果可能就会均分整个样本集,从而导致失败。在这种情况下,我觉得,可能没有比遗传算法更好的调参数方法了。虽然其毫无道理,但由于其根基是遍历,只是加了稍许随机性,合理的选择解,来使得收敛变快。所以不失为一个好方法。也许有人分析其收敛速度,但我觉得并不太必要。因为它并不好看。当我们开始考虑用遍历求解一个问题的时候,我猜我们对其难度,对其解的形式,对其收敛性也不会有太好的判断。这样我们评估遗传算法的复杂度时,肯定也是要因地制宜的。有些绝大部分信息我们都知道的问题,也许遗传算法也不慢;有些从头到尾都在拍脑袋的问题,遗传算法也能用。Part2 神经网络就是一个“超多参数的回归分析”那么神经网络到底是什么呢?【扯了那么多遗传算法还没有说正题】正如遗传算法是遍历所有参数选最优的过程,神经网络大致也就是遍历全部函数选最优的过程。盗图: 我们知道一些输入和输出的数据,想找出其中的数量关系。但又不是那么容易看出来,比如我们不像开普勒那样一眼就能看出行星运动时半径的立方和时间平方成反比。有时我们也不太在意具体的显式表达,这个时候我们就说:你们看好了,这是一张已经训练好的神经网,你想要知道你想求的函数值,那么你把输入丢进去,然后把输出抱走就好。虽然有的时候【绝大部分时候】,单论神经网络,我们是可以把我们想求得函数展开成为显式表达的,但是太难看了我们就不这么做。当然也许你会说这不就是拟合吗? Indeed . 一般来说我们用来评价神经网络的函数也就是用和拟合一样的最小二乘和。神经网络的参数(权重)也就可以看做一般回归分析的参数。好,我们来看一下一般的线性回归。
,一共两个参数。我们把他们调到最优,可惜
还是只有0.3,不work。这个时候我们就想,会不会是
呢?一共三个参数,
到了0.5,然后你心里想,那我把原函数泰勒展开:-D,假设原函数足够光滑,我们还是可以得到一个足够好的解的。那么假设我们有一张神经网络,有6个输入神经元,15个隐层神经元,3个输出神经元,我们大概有多少个参数呢?【这里跳过了神经网络中权重和下一层的关系描述,包括激活函数,因为我觉得这毕竟不是神经网络的教材】每个隐层都有一个linear的偏差,还有对应六个输入的权重,这一层有105个参数,然后三个输出神经元每个对16个权重参数,共有48个参数,加起来一共153个参数,( ⊙ o ⊙ ),你用153阶泰勒展开逼近函数!老师,他作弊QAQ!【当然未必全都要变化道理就是这个道理,简单粗暴。接下来就是些技巧了,借着计算机的东风,这些本来没什么内涵的方法都放出了其绚丽的光芒。把朴素的枚举法发挥到了极致。至于之后的选取光滑激活函数,比如常用的sigmoid,好做梯度递降,或者直接简单粗暴的按照下图方法进行训练网络,都是可以的。Step1 随机初始产生权重向量wStep2 通过交叉变异更新wStep3 算误差函数Step4 算适应度,然后轮盘赌,Step5 重复2到5Step6 给出最优权重向量妈妈再也不用担心我不会训练神经网络了,【手动再见】,激活函数怎么选貌似不是很要紧呀。【你再想想是这样吗?】为了满足某些强迫症,这里给出一个定理:具有一个或多个隐层的前向神经元网络可以以任意精度毕竟任意连续函数。[手动不规范引用 2016]再看看我之前和泰勒展开的比较,想想魏尔施特拉斯定理,是不是也觉得可以接受了呢?我知道知乎这样的长文,最后一般要贴个例子。借宝定老师书上的例子: 至于神经网络被一些人鼓吹的神奇特效,比如这里说的可以减小白噪声。我只能表示我还需要学习一个。毕竟我没有试过用153个参数去进行回归分析,能不能消除白噪声呀~对了,这里还要提一句,一般用153个参数回归分析,总要用154个输入对吧~但你看神经网络,其实只要随机生成一个权重,然后调几圈就可以了【现实中确实可以不让这些参数都变化,但我不是做算法或者计算机的,所以不太清楚计算机业界怎么做。我只是做优化的时候碰到了一些这样的问题,自学了一下来吹牛而已】,感觉帅帅的呢~【不过这倒并不是黑点,只是说有些人乱用这些现代学习方法,拿来批判统计学;现代的这些学习方法,都是在大数据科学的要求下应运而生,也不是说其粗暴就是坏事,毕竟解决了很多新的以往无法解决的问题】不过搞机器学习的一天到晚过拟合过拟合。。我觉得这参数取多点还是有道理的。。不知道有没有暴力增加神经元防止过拟合的方法。前面的高赞有一点我不是很能理解,我觉得神经网络的多层隐层的含义可能确实有。。但是想分析其具体含义只能是看到啥说啥了。所以这样将神经网络说的和玄学一样感觉不太好。------Appendix:聚类原理 citation:
Liu B, Theory and Practice of Uncertain Programming, 3rd ed., http://orsc.edu.cn/
-----
pretty good...
有个答主举了个例子拿20个样本进去跑:-D
所以数学背景还是很重要
编辑于 2016-02-03 12 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利百得 对世界好奇6 人赞同建议提炼或者修改一下问题。我无法回答。LS各位的回答都不是简单形象又有趣的,对于题目来说都是费力不讨好的。题主对于“神经网络是什么”这个命题举出那个选芒果的例子,我认为又是文不对题的,后者应该是问题归集和算法思路,虽然是研究神经网络当中的必要基础之一,但是它不是神经网络的特异性问题,跟“神经网络”以及“是什么”还是有非常大的距离。例如数学也是研究神经网络当中的必要基础之一……发布于 2014-05-07 添加评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
知乎用户 我是机器鼓励师10 人赞同用来逼近目标函数的模型。本质就这样,听不懂也没必要懂了发布于 2015-01-05 添加评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
知乎用户 谁知道呢10 人赞同写的答案太长了,直逼本质。神经网络算法,是对数据降维的过程。比如一个杯子有好多性状,再比如说就3个,有把,圆柱形,上面开口。我们看到一个物体,分析有没有这3个性状。得出是不是1个杯子。3个性状就3个维度,是不是个杯子,就1维。模拟人类的模式识别,需要第一个答案那样的大型的神经网络。算是人工智能的一部分。如果计算机能把人类的各个部分,都弄出来,人工智能也算走出来了。先决条件是首先要认识到人类的各个部分。模式识别算是一个部分。发布于 2015-01-05 1 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
江何 燕山风雨覆紫禁 百万雄师入北京7 人赞同1 大多数情况下,神经网络的目的就是把多维的输入,经过处理以一维进行输出。比如输入一个28*28的图像,输出一个表示该图像的类别的数字。2 单层神经网络只能应付线性可分的情景; 多层神经网络则可以任意拟合复杂的函数。3 神经网络需要先进行训练,再进行识别。相比其他的分类算法,神经网络的特点就是训练时间长而识别时间短。发布于 2015-09-05 1 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
陈丹 理工男+伪文青10 人赞同我也来试试讲一讲:神经网络:文艺女vs理工男 - Candela - 知乎专栏 发布于 2015-10-13 1 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
张鹏 土木僧,金牛座,第五型人格39 人赞同神经网络是个黑箱子,有个入口有个出口,里面不知道都有啥。往入口扔进去个1+1,出口会扔出来个250,。去打黑箱子的屁屁,说不对,应该是2。不断的往入口扔东西,打屁屁,给正确答案……突然黑箱子就学会加法了类似的,可以教会黑箱子加减乘除、解方程、游泳、打架,吹New B同样,母箱子还可以教会公箱子怎么泡妞如果你想往入口扔上期双色球中奖号码,在出口不断给出本期中奖号,那你就想多了。我试过,黑箱子学不会啊~~~发布于 2015-01-05 11 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
新闻热点
疑难解答