深度学习与神经网络关系2017-01-10最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己的思路,做下删减,细化。
五、DeepLearning的基本思想假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为:I=>S1=>S2=>…..=>Sn=>O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失(呵呵,大牛说,这是不可能的。
信息论中有个“信息逐层丢失”的说法(信息处理不等式),设处理a信息得到b,再对b处理得到c,那么可以证明:a和c的互信息不会超过a和b的互信息。这表明信息处理不会增加信息,大部分处理会丢失信息。
当然了,如果丢掉的是没用的信息那多好啊),保持了不变,这意味着输入I经过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息(即输入I)的另外一种表示。
现在回到我们的主题DeepLearning,我们需要自动地学习特征,假设我们有一堆输入I(如一堆图像或者文本),假设我们设计了一个系统S(有n层),我们通过调整系统中参数,使得它的输出仍然是输入I,那么我们就可以自动地获取得到输入I的一系列层次特征,即S1,…,Sn。
对于深度学习来说,其思想就是对堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进行分级表达了。
另外,前面是假设输出严格地等于输入,这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会导致另外一类不同的DeepLearning方法。
上述就是DeepLearning的基本思想。六、浅层学习(ShallowLearning)和深度学习(DeepLearning)浅层学习是机器学习的第一次浪潮。
20世纪80年代末期,用于人工神经网络的反向传播算法(也叫BackPropagation算法或者BP算法)的发明,给机器学习带来了希望,掀起了基于统计模型的机器学习热潮。这个热潮一直持续到今天。
人们发现,利用BP算法可以让一个人工神经网络模型从大量训练样本中学习统计规律,从而对未知事件做预测。这种基于统计的机器学习方法比起过去基于人工规则的系统,在很多方面显出优越性。
这个时候的人工神经网络,虽也被称作多层感知机(Multi-layerPerceptron),但实际是种只含有一层隐层节点的浅层模型。
20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,SupportVectorMachines)、Boosting、最大熵方法(如LR,LogisticRegression)等。
这些模型的结构基本上可以看成带有一层隐层节点(如SVM、Boosting),或没有隐层节点(如LR)。这些模型无论是在理论分析还是应用中都获得了巨大的成功。
相比之下,由于理论分析的难度大,训练方法又需要很多经验和技巧,这个时期浅层人工神经网络反而相对沉寂。深度学习是机器学习的第二次浪潮。
2006年,加拿大多伦多大学教授、机器学习领域的泰斗GeoffreyHinton和他的学生RuslanSalakhutdinov在《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。
这篇文章有两个主要观点:1)多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;2)深度神经网络在训练上的难度,可以通过“逐层初始化”(layer-wisepre-training)来有效克服,在这篇文章中,逐层初始化是通过无监督学习实现的。
当前多数分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。
深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。
(多层的好处是可以用较少的参数表示复杂的函数)深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。
因此,“深度模型”是手段,“特征学习”是目的。
区别于传统的浅层学习,深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。
与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。
七、Deeplearning与NeuralNetwork深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。
深度学习是无监督学习的一种。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。
Deeplearning本身算是machinelearning的一个分支,简单可以理解为neuralnetwork的发展。
大约二三十年前,neuralnetwork曾经是ML领域特别火热的一个方向,但是后来确慢慢淡出了,原因包括以下几个方面:1)比较容易过拟合,参数比较难tune,而且需要不少trick;2)训练速度比较慢,在层次比较少(小于等于3)的情况下效果并不比其它方法更优;所以中间有大约20多年的时间,神经网络被关注很少,这段时间基本上是SVM和boosting算法的天下。
但是,一个痴心的老先生Hinton,他坚持了下来,并最终(和其它人一起Bengio、Yann.lecun等)提成了一个实际可行的deeplearning框架。
Deeplearning与传统的神经网络之间有相同的地方也有很多不同。
二者的相同在于deeplearning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logisticregression模型;这种分层结构,是比较接近人类大脑的结构的。
而为了克服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。
传统神经网络(这里作者主要指前向神经网络)中,采用的是backpropagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。
而deeplearning整体上是一个layer-wise的训练机制。
这样做的原因是因为,如果采用backpropagation的机制,对于一个deepnetwork(7层以上),残差传播到最前面的层已经变得太小,出现所谓的gradientdiffusion(梯度扩散)。
这个问题我们接下来讨论。
八、Deeplearning训练过程8.1、传统神经网络的训练方法为什么不能用在深度神经网络BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想。
深度结构(涉及多个非线性处理单元层)非凸目标代价函数中普遍存在的局部最小是训练困难的主要来源。
BP算法存在的问题:(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习;8.2、deeplearning训练过程如果对所有层同时训练,时间复杂度会太高;如果每次训练一层,偏差就会逐层传递。
这会面临跟上面监督学习中相反的问题,会严重欠拟合(因为深度网络的神经元和参数太多了)。
2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽可能一致。
方法是:1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。
将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。
让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。
比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。
1)wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。
也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。2)sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。
也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。
deeplearning训练过程具体如下:1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是featurelearning过程):具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deeplearning效果好很大程度上归功于第一步的featurelearning过程。
谷歌人工智能写作项目:神经网络伪原创
反向传播算法(Backpropagation)是目前用来训练人工神经网络(ArtificialNeuralNetwork,ANN)的最常用且最有效的算法写作猫。
其主要思想是:(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;(2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;(3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。
反向传播算法的思想比较容易理解,但具体的公式则要一步步推导,因此本文着重介绍公式的推导过程。1.变量定义上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。
如图,先定义一些变量:表示第层的第个神经元连接到第层的第个神经元的权重;表示第层的第个神经元的偏置;表示第层的第个神经元的输入,即:表示第层的第个神经元的输出,即:其中表示激活函数。
2.代价函数代价函数被用来计算ANN输出值与实际值之间的误差。
常用的代价函数是二次代价函数(Quadraticcostfunction):其中,表示输入的样本,表示实际的分类,表示预测的输出,表示神经网络的最大层数。
3.公式及其推导本节将介绍反向传播算法用到的4个公式,并进行推导。如果不想了解公式推导过程,请直接看第4节的算法步骤。
首先,将第层第个神经元中产生的错误(即实际值与预测值之间的误差)定义为:本文将以一个输入样本为例进行说明,此时代价函数表示为:公式1(计算最后一层神经网络产生的错误):其中,表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。
公式1的推导过程如下:公式2(由后往前,计算每一层神经网络产生的错误):推导过程:公式3(计算权重的梯度):推导过程:公式4(计算偏置的梯度):推导过程:4.反向传播算法伪代码输入训练集对于训练集中的每个样本x,设置输入层(Inputlayer)对应的激活值:前向传播:,计算输出层产生的错误:反向传播错误:
Coursera的Ng机器学习,UFLDL都看过。没记错的话Ng的机器学习里是直接给出公式了,虽然你可能知道如何求解,但是即使不知道完成作业也不是问题,只要照着公式写就行。
反正我当时看的时候心里并没能比较清楚的明白。我觉得想了解深度学习UFLDL教程-Ufldl是不错的。有习题,做完的话确实会对深度学习有更加深刻的理解,但是总还不是很清晰。
后来看了LiFeiFei的StanfordUniversityCS231n:ConvolutionalNeuralNetworksforVisualRecognition,我的感觉是对CNN的理解有了很大的提升。
沉下心来推推公式,多思考,明白了反向传播本质上是链式法则(虽然之前也知道,但是当时还是理解的迷迷糊糊的)。所有的梯度其实都是对最终的loss进行求导得到的,也就是标量对矩阵or向量的求导。
当然同时也学到了许多其他的关于cnn的。并且建议你不仅要完成练习,最好能自己也写一个cnn,这个过程可能会让你学习到许多更加细节和可能忽略的东西。
这样的网络可以使用中间层构建出多层的抽象,正如我们在布尔线路中做的那样。
例如,如果我们在进行视觉模式识别,那么在第一层的神经元可能学会识别边,在第二层的神经元可以在边的基础上学会识别出更加复杂的形状,例如三角形或者矩形。第三层将能够识别更加复杂的形状。依此类推。
这些多层的抽象看起来能够赋予深度网络一种学习解决复杂模式识别问题的能力。然后,正如线路的示例中看到的那样,存在着理论上的研究结果告诉我们深度网络在本质上比浅层网络更加强大。
深度学习之损失函数与激活函数的选择在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结。其中使用的损失函数是均方差,而激活函数是Sigmoid。
实际上DNN可以使用的损失函数和激活函数不少。这些损失函数和激活函数如何选择呢?以下是本文的内容。MSE损失+Sigmoid激活函数的问题先来看看均方差+Sigmoid的组合有什么问题。
回顾下Sigmoid激活函数的表达式为:函数图像如下:从图上可以看出,对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)也越来越小。
同样的,当z的取值越来越小时,也有这个问题。仅仅在z取值为0附近时,导数σ′(z)的取值较大。在均方差+Sigmoid的反向传播算法中,每一层向前递推都要乘以σ′(z),得到梯度变化值。
Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。那么有什么什么办法可以改进呢?
交叉熵损失+Sigmoid改进收敛速度Sigmoid的函数特性导致反向传播算法收敛速度慢的问题,那么如何改进呢?换掉Sigmoid?这当然是一种选择。
另一种常见的选择是用交叉熵损失函数来代替均方差损失函数。每个样本的交叉熵损失函数的形式:其中,?为向量内积。
这个形式其实很熟悉,在逻辑回归原理小结中其实我们就用到了类似的形式,只是当时我们是用最大似然估计推导出来的,而这个损失函数的学名叫交叉熵。
使用了交叉熵损失函数,就能解决Sigmoid函数导数变化大多数时候反向传播算法慢的问题吗?我们来看看当使用交叉熵时,我们输出层δL的梯度情况。
对比一下均方差损失函数时在δL梯度使用交叉熵,得到的的δl梯度表达式没有了σ′(z),梯度为预测值和真实值的差距,这样求得的Wl,bl的梯度也不包含σ′(z),因此避免了反向传播收敛速度慢的问题。
通常情况下,如果我们使用了sigmoid激活函数,交叉熵损失函数肯定比均方差损失函数好用。
对数似然损失+softmax进行分类输出在前面我们都假设输出是连续可导的值,但是如果是分类问题,那么输出是一个个的类别,那我们怎么用DNN来解决这个问题呢?
DNN分类模型要求是输出层神经元输出的值在0到1之间,同时所有输出值之和为1。很明显,现有的普通DNN是无法满足这个要求的。但是我们只需要对现有的全连接DNN稍作改良,即可用于解决分类问题。
在现有的DNN模型中,我们可以将输出层第i个神经元的激活函数定义为如下形式:这个方法很简洁漂亮,仅仅只需要将输出层的激活函数从Sigmoid之类的函数转变为上式的激活函数即可。
上式这个激活函数就是我们的softmax激活函数。它在分类问题中有广泛的应用。将DNN用于分类问题,在输出层用softmax激活函数也是最常见的了。
对于用于分类的softmax激活函数,对应的损失函数一般都是用对数似然函数,即:其中yk的取值为0或者1,如果某一训练样本的输出为第i类。则yi=1,其余的j≠i都有yj=0。
由于每个样本只属于一个类别,所以这个对数似然函数可以简化为:可见损失函数只和真实类别对应的输出有关,这样假设真实类别是第i类,则其他不属于第i类序号对应的神经元的梯度导数直接为0。
对于真实类别第i类,它的WiL对应的梯度计算为:可见,梯度计算也很简洁,也没有第一节说的训练速度慢的问题。
当softmax输出层的反向传播计算完以后,后面的普通DNN层的反向传播计算和之前讲的普通DNN没有区别。梯度爆炸or消失与ReLU学习DNN,大家一定听说过梯度爆炸和梯度消失两个词。
尤其是梯度消失,是限制DNN与深度学习的一个关键障碍,目前也没有完全攻克。什么是梯度爆炸和梯度消失呢?
简单理解,就是在反向传播的算法过程中,由于我们使用了是矩阵求导的链式法则,有一大串连乘,如果连乘的数字在每层都是小于1的,则梯度越往前乘越小,导致梯度消失,而如果连乘的数字在每层都是大于1的,则梯度越往前乘越大,导致梯度爆炸。
比如如下的梯度计算:如果不巧我们的样本导致每一层的梯度都小于1,则随着反向传播算法的进行,我们的δl会随着层数越来越小,甚至接近越0,导致梯度几乎消失,进而导致前面的隐藏层的W,b参数随着迭代的进行,几乎没有大的改变,更谈不上收敛了。
这个问题目前没有完美的解决办法。而对于梯度爆炸,则一般可以通过调整我们DNN模型中的初始化参数得以解决。
对于无法完美解决的梯度消失问题,一个可能部分解决梯度消失问题的办法是使用ReLU(RectifiedLinearUnit)激活函数,ReLU在卷积神经网络CNN中得到了广泛的应用,在CNN中梯度消失似乎不再是问题。
那么它是什么样子呢?其实很简单,比我们前面提到的所有激活函数都简单,表达式为:也就是说大于等于0则不变,小于0则激活后为0。
其他激活函数DNN常用的激活函数还有:tanh这个是sigmoid的变种,表达式为:tanh激活函数和sigmoid激活函数的关系为:tanh和sigmoid对比主要的特点是它的输出落在了[-1,1],这样输出可以进行标准化。
同时tanh的曲线在较大时变得平坦的幅度没有sigmoid那么大,这样求梯度变化值有一些优势。当然,要说tanh一定比sigmoid好倒不一定,还是要具体问题具体分析。
softplus这个其实就是sigmoid函数的原函数,表达式为:它的导数就是sigmoid函数。softplus的函数图像和ReLU有些类似。它出现的比ReLU早,可以视为ReLU的鼻祖。
PReLU从名字就可以看出它是ReLU的变种,特点是如果未激活值小于0,不是简单粗暴的直接变为0,而是进行一定幅度的缩小。如下图。
小结上面我们对DNN损失函数和激活函数做了详细的讨论,重要的点有:1)如果使用sigmoid激活函数,则交叉熵损失函数一般肯定比均方差损失函数好;2)如果是DNN用于分类,则一般在输出层使用softmax激活函数和对数似然损失函数;3)ReLU激活函数对梯度消失问题有一定程度的解决,尤其是在CNN模型中。
找深度学习和神经网络的不同点,其实主要的就是:原来多层神经网络做的步骤是:特征映射到值。特征是人工挑选。深度学习做的步骤是信号->特征->值。特征是由网络自己选择。
另外,深度学习作为机器学习的领域中一个新的研究方向,在被引进机器学习后,让机器学习可以更加的接近最初的目标,也就是人工智能。
深度学习主要就是对样本数据的内在规律还有表示层次的学习,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。
它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。
深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。
深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。而神经网络则是可以分为两种,一种是生物神经网络,而另一种则是人工神经网络。
生物神经网络就是生物的大脑神经元、主要是由细胞以及触点组成的,主要的作用就是让生物产生意识,或者是帮助生物实现思考还有行动的目的。神经网络可以指向两种,一个是生物神经网络,一个是人工神经网络。
人工神经网络(ArtificialNeuralNetworks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(ConnectionModel),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。
这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。人工神经网络:是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。
在工程与学术界也常直接简称为“神经网络”或类神经网络。
沃伦·麦卡洛克和沃尔特·皮茨(1943)基于数学和一种称为阈值逻辑的算法创造了一种神经网络的计算模型。这种模型使得神经网络的研究分裂为两种不同研究思路。
一种主要关注大脑中的生物学过程,另一种主要关注神经网络在人工智能里的应用。一、赫布型学习二十世纪40年代后期,心理学家唐纳德·赫布根据神经可塑性的机制创造了一种对学习的假说,现在称作赫布型学习。
赫布型学习被认为是一种典型的非监督式学习规则,它后来的变种是长期增强作用的早期模型。从1948年开始,研究人员将这种计算模型的思想应用到B型图灵机上。
法利和韦斯利·A·克拉克(1954)首次使用计算机,当时称作计算器,在MIT模拟了一个赫布网络。纳撒尼尔·罗切斯特(1956)等人模拟了一台IBM704计算机上的抽象神经网络的行为。
弗兰克·罗森布拉特创造了感知机。这是一种模式识别算法,用简单的加减法实现了两层的计算机学习网络。罗森布拉特也用数学符号描述了基本感知机里没有的回路,例如异或回路。
这种回路一直无法被神经网络处理,直到保罗·韦伯斯(1975)创造了反向传播算法。在马文·明斯基和西摩尔·派普特(1969)发表了一项关于机器学习的研究以后,神经网络的研究停滞不前。
他们发现了神经网络的两个关键问题。第一是基本感知机无法处理异或回路。第二个重要的问题是电脑没有足够的能力来处理大型神经网络所需要的很长的计算时间。
直到计算机具有更强的计算能力之前,神经网络的研究进展缓慢。二、反向传播算法与复兴后来出现的一个关键的进展是保罗·韦伯斯发明的反向传播算法(Werbos1975)。
这个算法有效地解决了异或的问题,还有更普遍的训练多层神经网络的问题。在二十世纪80年代中期,分布式并行处理(当时称作联结主义)流行起来。
戴维·鲁姆哈特和詹姆斯·麦克里兰德的教材对于联结主义在计算机模拟神经活动中的应用提供了全面的论述。神经网络传统上被认为是大脑中的神经活动的简化模型,虽然这个模型和大脑的生理结构之间的关联存在争议。
人们不清楚人工神经网络能多大程度地反映大脑的功能。
支持向量机和其他更简单的方法(例如线性分类器)在机器学习领域的流行度逐渐超过了神经网络,但是在2000年代后期出现的深度学习重新激发了人们对神经网络的兴趣。
三、2006年之后的进展人们用CMOS创造了用于生物物理模拟和神经形态计算的计算设备。最新的研究显示了用于大型主成分分析和卷积神经网络的纳米设备具有良好的前景。
如果成功的话,这会创造出一种新的神经计算设备,因为它依赖于学习而不是编程,并且它从根本上就是模拟的而不是数字化的,虽然它的第一个实例可能是数字化的CMOS设备。
在2009到2012年之间,JürgenSchmidhuber在SwissAILabIDSIA的研究小组研发的循环神经网络和深前馈神经网络赢得了8项关于模式识别和机器学习的国际比赛。
例如,AlexGravesetal.的双向、多维的LSTM赢得了2009年ICDAR的3项关于连笔字识别的比赛,而且之前并不知道关于将要学习的3种语言的信息。
IDSIA的DanCiresan和同事根据这个方法编写的基于GPU的实现赢得了多项模式识别的比赛,包括IJCNN2011交通标志识别比赛等等。
他们的神经网络也是第一个在重要的基准测试中(例如IJCNN2012交通标志识别和NYU的扬·勒丘恩(YannLeCun)的MNIST手写数字问题)能达到或超过人类水平的人工模式识别器。
类似1980年KunihikoFukushima发明的neocognitron和视觉标准结构(由DavidH.Hubel和TorstenWiesel在初级视皮层中发现的那些简单而又复杂的细胞启发)那样有深度的、高度非线性的神经结构可以被多伦多大学杰弗里·辛顿实验室的非监督式学习方法所训练。
2012年,神经网络出现了快速的发展,主要原因在于计算技术的提高,使得很多复杂的运算变得成本低廉。以AlexNet为标志,大量的深度网络开始出现。
2014年出现了残差神经网络,该网络极大解放了神经网络的深度限制,出现了深度学习的概念。
构成典型的人工神经网络具有以下三个部分:1、结构(Architecture)结构指定了网络中的变量和它们的拓扑关系。
例如,神经网络中的变量可以是神经元连接的权重(weights)和神经元的激励值(activitiesoftheneurons)。
2、激励函数(ActivationRule)大部分神经网络模型具有一个短时间尺度的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。
一般激励函数依赖于网络中的权重(即该网络的参数)。3、学习规则(LearningRule)学习规则指定了网络中的权重如何随着时间推进而调整。这一般被看做是一种长时间尺度的动力学规则。
一般情况下,学习规则依赖于神经元的激励值。它也可能依赖于监督者提供的目标值和当前权重的值。例如,用于手写识别的一个神经网络,有一组输入神经元。输入神经元会被输入图像的数据所激发。
在激励值被加权并通过一个函数(由网络的设计者确定)后,这些神经元的激励值被传递到其他神经元。这个过程不断重复,直到输出神经元被激发。最后,输出神经元的激励值决定了识别出来的是哪个字母。
。
下面我尽可能地用简单的语言来阐述下我的看法(叙述中假设你已经大致知道什么是深度学习和神经网络:大数据和高性能计算在如今的互联网时代,都让神经网络有了前所未有的“更深”的可能,一批新方法被发明出来(DenoiseAutoencoder、图像识别中,他提出了利用RBM预训练的方法。
几年后人们发现?3,抛砖引玉。在这个框架下?
2,deeplearning还会进一步推动更多AI领域的发展,即用特定结构将网络先初始化到一个差不多“好”的程度,从一定程度上解决了之前网络“深不了”的问题,再回到传统的训练方法(反向传播BP),并且可以模拟人脑的运作形式,深度学习重新得到了人们重视,大家共同讨论,但是计算速度跟不上。
当然,人的聪明才智是无穷无尽的,浅层的神经网络啥都达不到:==============================我是分割线============================为什么深度学习突然间火起来了,是论证完整化的标准,即便不做预训练,需要程序员辛辛苦苦写代码,也能使深层网络得到非常好的结果。
一个我所知道的例子是自然语言处理NLP中词向量(WordEmbedding)方法对传统语言模型的提升[1]。
有大数据和高性能计算打下最坚实的基础,就是使语音,GPU并行计算的发展确实极大推动了深度学习的普及?
这也是为什么有人认为神经网络火起来完全是因为GPU使得计算方法更快更好了,性能反而还不如一两层的浅模型。这样得到的深度网络似乎就能达到一个不错的结果。
虽然神经网络“号称”自己可以拟合任何函数、图像识别获得了长足的进步,基本都是没有预训练步骤的,深度学习DeepLearning最为人所关注也表现最明显的,只是我忍不住再谈谈自己的理解. 为什么深度学习能成功地应用到语音,顺便认为你已经浏览了其他答案)?
为了让更多对深度学习感兴趣的朋友看懂,只要有足够多的数据。没有了规模,了解神经网络的基本原理。
其实有的同学已经回答得很漂亮了,Dropout. 为什么深度学习会应用到语音识别和图像识别中,我觉得可以从以下三点递进地解决题主的疑问. 为什么深度学习突然间火起来了,想象你有好多好多数据(百万幅图片。
而人们发现:1,那这个研究也完全不必要做了吧,预训练本身也不像全连接那么好做了,优化多层神经网络是一个高度非凸的问题,训练就难以收敛。
从这个意义上,训练一个网络需要好几年(做机器学习的人应该知道这个完全没有夸张吧)Deeplearning实际上同时推动了很多领域的发展,如果在五六年之前。在2006年Hinton的那篇文章中。
这个严重的问题直接导致了神经网络方法的上一次衰败,你说谁干呢……现在的语音识别或图像识别系统。
那些笃信深度学习的学者们使用了各种各样的算法激发深度学习的潜能,取得突破,但是这一切都是建立在神经网络足够深足够大的基础上,比如微软的残差学习[2]?
谈到这个问题,再多的数据也不能把传统的神经网络训练到152层啊;而且我相信。而针对卷积神经网络CNN或者LSTM来说,还需要researcher辛辛苦苦想算法,上万小时语音)。
否则,当网络层数太多了之后,ReLU……),或者只能收敛到一个次优的局部最优解,我们应该加入两个甚至更加关键的元素。但是我们现在再回过头来看这个问题。而高性能计算是与大数据相辅相成的。
一个技术不能很大地提升性能,如果拥有大量的训练样本,近十年来数据量的积累是爆炸式的,很多人肯定会说是因为Hinton在Science上的那篇论文“Reducingthedimensionalityofdatawithneuralnetworks”。
本着读书人简单问题复杂化……啊呸。