反向传播算法(back propagation algorithm, BP-algorithm)是深度学习的最重要的两大基石(另外一个是梯度降低算法),几乎全部的深度学习算法底层都会调用BP算法,其本质就是对链式求导法则的应用而已. 而穿越时间的反向传播算法(back propagation through time algorithm, BPTT-algorithm) 则是BP上的应用,其核心没有改变,只不过在应用时,要注意一些穿越时间的特别之处.html
深度学习包含两方面内容:算法
1.更好的训练深度神经网络。神经网络隐藏层超过两层就算深度神经网络,三层的NN的训练还好说,可是若是NN不少层数呢?那将会面临梯度弥散和梯度爆炸等问题。因此为了让训练的DNN取得好的效果,就有了一些训练DNN的技巧,好比反向传播算法、激活函数、批量归一化、dropout等技术的发明;而梯度降低是为了更好的优化代价函数(损失函数),无论是机器学习仍是深度学习,总会须要优化代价函数。
2.设计网络结构以更好的提取特征。增长神经网络隐藏层就能提取更高层次特征,卷积神经网络能提取空间上的特征,循环神经网络可以提取时间序列特征,等等;因而各类网络结构被发明出来,好比AlexNet,LeNet,GooleNet,Inception系列,ResNet等等,另外还有LSTM等等。
网络结构再美,若是不能训练到收敛,就是不work。因此咱们今天介绍的这些技术就是为了更好的训练DNN,它们是保证可以训练好的DNN的基础,因此它们叫深度学习的前戏!!数据库
数学视角:编程
事实上,神经网络的本质就是经过参数与激活函数来拟合特征与目标之间的真实函数关系。初学者可能认为画神经网络的结构图是为了在程序中实现这些圆圈与线,但在一个神经网络的程序中,既没有“线”这个对象,也没有“单元”这个对象。实现一个神经网络最须要的是线性代数库。网络
下文主要讲述前馈神经网络:架构
这个值称之为损失(loss),咱们的目标就是使对全部训练数据的损失和尽量的小。机器学习
若是将先前的神经网络预测的矩阵公式带入到yp中(由于有z=yp),那么咱们能够把损失写为关于参数(parameter)的函数,这个函数称之为损失函数(loss function)。下面的问题就是求:如何优化参数,可以让损失函数的值最小。分布式
此时这个问题就被转化为一个优化问题。一个经常使用方法就是高等数学中的求导,可是这里的问题因为参数不止一个,求导后计算导数等于0的运算量很大,因此通常来讲解决这个优化问题使用的是梯度降低算法。梯度降低算法每次计算参数在当前的梯度,而后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。通常这个时候,全部的参数刚好达到使损失函数达到一个最低值的状态。函数
在神经网络模型中,因为结构复杂,每次计算梯度的代价很大。所以还须要使用反向传播算法。反向传播算法是利用了神经网络的结构进行的计算。不一次计算全部参数的梯度,而是从后往前。首先计算输出层的梯度,而后是第二个参数矩阵的梯度,接着是中间层的梯度,再而后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束之后,所要的两个参数矩阵的梯度就都有了。学习
反向传播算法能够直观的理解为下图。梯度的计算从后往前,一层层反向传播。前缀E表明着相对导数的意思。
反向传播算法的启示是数学中的链式法则。在此须要说明的是,尽管早期神经网络的研究人员努力从生物学中获得启发,但从BP算法开始,研究者们更多地从数学上寻求问题的最优解。再也不盲目模拟人脑网络是神经网络研究走向成熟的标志。正如科学家们能够从鸟类的飞行中获得启发,但没有必要必定要彻底模拟鸟类的飞行方式,也能制造能够飞天的飞机。
优化问题只是训练中的一个部分。机器学习问题之因此称为学习问题,而不是优化问题,就是由于它不只要求数据在训练集上求得一个较小的偏差,在测试集上也要表现好。由于模型最终是要部署到没有见过训练数据的真实场景。提高模型在测试集上的预测效果的主题叫作泛化(generalization),相关方法被称做正则化(regularization)。神经网络中经常使用的泛化技术有权重衰减等。
在深度学习中,泛化技术变的比以往更加的重要。这主要是由于神经网络的层数增长了,参数也增长了,表示能力大幅度加强,很容易出现过拟合现象。所以正则化技术就显得十分重要。目前,Dropout技术,以及数据扩容(Data-Augmentation)技术是目前使用的最多的正则化技术。
1.概念
对于一门技术的学习而言,首先最重要的是弄清概念。只有将概念理解清楚,才能顺畅的进行后面的学习。因为神经网络漫长的发展历史,常常会有一些概念容易混淆,让人学习中产生困惑。这里面包括历史的术语,不一致的说法,以及被遗忘的研究等。
历史的术语
这个的表明就是多层感知器(MLP)这个术语。起初看文献时很难理解的一个问题就是,为何神经网络又有另外一个名称:MLP。其实MLP(Multi-Layer Perceptron)的名称起源于50-60年代的感知器(Perceptron)。因为咱们在感知器之上又增长了一个计算层,所以称为多层感知器。值得注意的是,虽然叫“多层”,MLP通常都指的是两层(带一个隐藏层的)神经网络。
MLP这个术语属于历史遗留的产物。如今咱们通常就说神经网络,以及深度神经网络。前者表明带一个隐藏层的两层神经网络,也是EasyPR目前使用的识别网络,后者指深度学习的网络。
不一致的说法
这个最明显的表明就是损失函数loss function,这个还有两个说法是跟它彻底一致的意思,分别是残差函数error function,以及代价函数cost function。loss function是目前深度学习里用的较多的一种说法,caffe里也是这么叫的。cost function则是Ng在coursera教学视频里用到的统一说法。这三者都是同一个意思,都是优化问题所须要求解的方程。虽然在使用的时候不作规定,可是在听到各类讲解时要内心明白。
再来就是权重weight和参数parameter的说法,神经网络界因为之前的惯例,通常会将训练获得的参数称之为权重,而不像其余机器学习方法就称之为参数。这个须要记住就好。不过在目前的使用惯例中,也有这样一种规定。那就是非偏置节点链接上的值称之为权重,而偏置节点上的值称之为偏置,二者统一块儿来称之为参数。
另一个同义词就是激活函数active function和转移函数transfer function了。一样,他们表明一个意思,都是叠加的非线性函数的说法。
被遗忘的研究
因为神经网络发展历史已经有70年的漫长历史,所以在研究过程当中,必然有一些研究分支属于被遗忘阶段。这里面包括各类不一样的网络,例如SOM(Self-Organizing Map,自组织特征映射网络),SNN(Synergetic Neural Network,协同神经网络),ART(Adaptive Resonance Theory,自适应共振理论网络)等等。因此看历史文献时会看到许多没见过的概念与名词。
有些历史网络甚至会从新成为新的研究热点,例如RNN与LSTM就是80年代左右开始的研究,目前已是深度学习研究中的重要一门技术,在语音与文字识别中有很好的效果。
对于这些易于混淆以及弄错的概念,务必须要多方参考文献,理清上下文,这样才不会在学习与阅读过程当中迷糊。
神经网络实际上是一个很是宽泛的称呼,它包括两类,一类是用计算机的方式去模拟人脑,这就是咱们常说的ANN(人工神经网络),另外一类是研究生物学上的神经网络,又叫生物神经网络。对于咱们计算机人士而言,确定是研究前者。
在人工神经网络之中,又分为前馈神经网络和反馈神经网络这两种。那么它们二者的区别是什么呢?这个其实在于它们的结构图。咱们能够把结构图看做是一个有向图。其中神经元表明顶点,链接表明有向边。对于前馈神经网络中,这个有向图是没有回路的。你能够仔细观察本文中出现的全部神经网络的结构图,确认一下。而对于反馈神经网络中,结构图的有向图是有回路的。反馈神经网络也是一类重要的神经网络。其中Hopfield网络就是反馈神经网络。深度学习中的RNN也属于一种反馈神经网络。
具体到前馈神经网络中,就有了本文中所分别描述的三个网络:单层神经网络,双层神经网络,以及多层神经网络。深度学习中的CNN属于一种特殊的多层神经网络。另外,在一些Blog中和文献中看到的BP神经网络是什么?其实它们就是使用了反向传播BP算法的两层前馈神经网络。也是最广泛的一种两层神经网络。
经过以上分析能够看出,神经网络这种说法实际上是很是广义的,具体在文章中说的是什么网络,须要根据文中的内容加以区分。
做者推荐课程:
机器学习这个词是让人疑惑的,首先它是英文名称Machine Learning(简称ML)的直译,在计算界Machine通常指计算机。这个名字使用了拟人的手法,说明了这门技术是让机器“学习”的技术。可是计算机是死的,怎么可能像人类同样“学习”呢?
传统上若是咱们想让计算机工做,咱们给它一串指令,而后它遵守这个指令一步步执行下去。有因有果,很是明确。但这样的方式在机器学习中行不通。机器学习根本不接受你输入的指令,相反,它接受你输入的数据! 也就是说,机器学习是一种让计算机利用数据而不是指令来进行各类工做的方法。这听起来很是难以想象,但结果上倒是很是可行的。“统计”思想将在你学习“机器学习”相关理念时无时无刻不伴随,相关而不是因果的概念将是支撑机器学习可以工做的核心概念。你会颠覆对你之前全部程序中创建的因果无处不在的根本理念。
2.机器学习的定义
从广义上来讲,机器学习是一种可以赋予机器学习的能力以此让它完成直接编程没法完成的功能的方法。但从实践的意义上来讲,机器学习是一种经过利用数据,训练出模型,而后使用模型预测的一种方法。
数据挖掘
数据挖掘=机器学习+数据库。这几年数据挖掘的概念实在是太耳熟能详。几乎等同于炒做。但凡说数据挖掘都会吹嘘数据挖掘如何如何,例如从数据中挖出金子,以及将废弃的数据转化为价值等等。可是,我尽管可能会挖出金子,但我也可能挖的是“石头”啊。这个说法的意思是,数据挖掘仅仅是一种思考方式,告诉咱们应该尝试从数据中挖掘出知识,但不是每一个数据都能挖掘出金子的,因此不要神话它。一个系统绝对不会由于上了一个数据挖掘模块就变得无所不能(这是IBM最喜欢吹嘘的),偏偏相反,一个拥有数据挖掘思惟的人员才是关键,并且他还必须对数据有深入的认识,这样才可能从数据中导出模式指引业务的改善。大部分数据挖掘中的算法是机器学习的算法在数据库中的优化。
统计学习
统计学习近似等于机器学习。统计学习是个与机器学习高度重叠的学科。由于机器学习中的大多数方法来自统计学,甚至能够认为,统计学的发展促进机器学习的繁荣昌盛。例如著名的支持向量机算法,就是源自统计学科。可是在某种程度上二者是有分别的,这个分别在于:统计学习者重点关注的是统计模型的发展与优化,偏数学,而机器学习者更关注的是可以解决问题,偏实践,所以机器学习研究者会重点研究学习算法在计算机上执行的效率与准确性的提高。
计算机视觉
计算机视觉=图像处理+机器学习。图像处理技术用于将图像处理为适合进入机器学习模型中的输入,机器学习则负责从图像中识别出相关的模式。计算机视觉相关的应用很是的多,例如百度识图、手写字符识别、车牌识别等等应用。这个领域是应用前景很是火热的,同时也是研究的热门方向。随着机器学习的新领域深度学习的发展,大大促进了计算机图像识别的效果,所以将来计算机视觉界的发展前景不可估量。
语音识别
语音识别=语音处理+机器学习。语音识别就是音频处理技术与机器学习的结合。语音识别技术通常不会单独使用,通常会结合天然语言处理的相关技术。目前的相关应用有苹果的语音助手siri等。
天然语言处理
天然语言处理=文本处理+机器学习。天然语言处理技术主要是让机器理解人类的语言的一门领域。在天然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此以外,在理解这个层面,则使用了语义理解,机器学习等技术。做为惟一由人类自身创造的符号,天然语言处理一直是机器学习界不断研究的方向。按照百度机器学习专家余凯的说法“听与看,说白了就是阿猫和阿狗都会的,而只有语言才是人类独有的”。如何利用机器学习技术进行天然语言的的深度理解,一直是工业和学术界关注的焦点。
能够看出机器学习在众多领域的外延和应用。机器学习技术的发展促使了不少智能领域的进步,改善着咱们的生活。
一、回归算法
在大部分机器学习课程中,回归算法都是介绍的第一个算法。缘由有两个:一.回归算法比较简单,介绍它可让人平滑地从统计学迁移到机器学习中。二.回归算法是后面若干强大算法的基石,若是不理解回归算法,没法学习那些强大的算法。回归算法有两个重要的子类:即线性回归和逻辑回归。
线性回归就是咱们前面说过的房价求解问题。如何拟合出一条直线最佳匹配我全部的数据?通常使用“最小二乘法”来求解。“最小二乘法”的思想是这样的,假设咱们拟合出的直线表明数据的真实值,而观测到的数据表明拥有偏差的值。为了尽量减少偏差的影响,须要求解一条直线使全部偏差的平方和最小。最小二乘法将最优问题转化为求函数极值问题。函数极值在数学上咱们通常会采用求导数为0的方法。但这种作法并不适合计算机,可能求解不出来,也可能计算量太大。
计算机科学界专门有一个学科叫“数值计算”,专门用来提高计算机进行各种计算时的准确性和效率问题。例如,著名的“梯度降低”以及“牛顿法”就是数值计算中的经典算法,也很是适合来处理求解函数极值的问题。梯度降低法是解决回归模型中最简单且有效的方法之一。从严格意义上来讲,因为后文中的神经网络和推荐算法中都有线性回归的因子,所以梯度降低法在后面的算法实现中也有应用。
逻辑回归是一种与线性回归很是相似的算法,可是,从本质上讲,线型回归处理的问题类型与逻辑回归不一致。线性回归处理的是数值问题,也就是最后预测出的结果是数字,例如房价。而逻辑回归属于分类算法,也就是说,逻辑回归预测结果是离散的分类,例如判断这封邮件是不是垃圾邮件,以及用户是否会点击此广告等等。
实现方面的话,逻辑回归只是对对线性回归的计算结果加上了一个Sigmoid函数,将数值结果转化为了0到1之间的几率(Sigmoid函数的图像通常来讲并不直观,你只须要理解对数值越大,函数越逼近1,数值越小,函数越逼近0),接着咱们根据这个几率能够作预测,例如几率大于0.5,则这封邮件就是垃圾邮件,或者肿瘤是不是恶性的等等。从直观上来讲,逻辑回归是画出了一条分类线,见下图。
逻辑回归算法划出的分类线基本都是线性的(也有划出非线性分类线的逻辑回归,不过那样的模型在处理数据量较大的时候效率会很低),这意味着当两类之间的界线不是线性时,逻辑回归的表达能力就不足。下面的两个算法是机器学习界最强大且重要的算法,均可以拟合出非线性的分类线。
二、神经网络
神经网络(也称之为人工神经网络,ANN)算法是80年代机器学习界很是流行的算法,不过在90年代中途衰落。如今,携着“深度学习”之势,神经网络重装归来,从新成为最强大的机器学习算法之一。
神经网络的诞生起源于对大脑工做机理的研究。早期生物界学者们使用神经网络来模拟大脑。机器学习的学者们使用神经网络进行机器学习的实验,发如今视觉与语音的识别上效果都至关好。在BP算法(加速神经网络训练过程的数值算法)诞生之后,神经网络的发展进入了一个热潮。BP算法的发明人之一是前面介绍的机器学习大牛Geoffrey Hinton(图1中的中间者)。
监督学习算法:
线性回归,逻辑回归,神经网络,SVM
无监督学习算法:
聚类算法,降维算法
特殊算法:
推荐算法
除了这些算法之外,有一些算法的名字在机器学习领域中也常常出现。但他们自己并不算是一个机器学习算法,而是为了解决某个子问题而诞生的。你能够理解他们为以上算法的子算法,用于大幅度提升训练过程。其中的表明有:梯度降低法,主要运用在线型回归,逻辑回归,神经网络,推荐算法中;牛顿法,主要运用在线型回归中;BP算法,主要运用在神经网络中;SMO算法,主要运用在SVM中。
大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的。相反,对于机器学习而言,越多的数据会越 可能提高模型的精确性,同时,复杂的机器学习算法的计算时间也迫切须要分布式计算与内存计算这样的关键技术。所以,机器学习的兴盛也离不开大数据的帮助。 大数据与机器学习二者是互相促进,相依相存的关系。
机器学习与大数据紧密联系。可是,必须清醒的认识到,大数据并不等同于机器学习,同理,机器学习也不等同于大数据。大数据中包含有分布式计算,内存数据库,多维分析等等多种技术。单从分析方法来看,大数据也包含如下四种分析方法:
1.大数据,小分析:即数据仓库领域的OLAP分析思路,也就是多维分析思想。
2.大数据,大分析:这个表明的就是数据挖掘与机器学习分析法。
3.流式分析:这个主要指的是事件驱动架构。
4.查询分析:经典表明是NoSQL数据库。
也就是说,机器学习仅仅是大数据分析中的一种而已。尽管机器学习的一些结果具备很大的魔力,在某种场合下是大数据价值最好的说明。但这并不表明机器学习是大数据下的惟一的分析方法。
机器学习与大数据的结合产生了巨大的价值。基于机器学习技术的发展,数据可以“预测”。对人类而言,积累的经验越丰富,阅历也普遍,对将来的判断越准确。例如常说的“经验丰富”的人比“初出茅庐”的小伙子更有工做上的优点,就在于经验丰富的人得到的规律比他人更准确。而在机器学习领域,根据著名的一个实验,有效的证明了机器学习界一个理论:即机器学习模型的数据越多,机器学习的预测的效率就越好。见下图:
总结起来,人工智能的发展经历了以下若干阶段,从早期的逻辑推理,到中期的专家系统,这些科研进步确实使咱们离机器的智能有点接近了,但还有一大段距离。直到机器学习诞生之后,人工智能界感受终于找对了方向。基于机器学习的图像识别和语音识别在某些垂直领域达到了跟人相媲美的程度。机器学习令人类第一次如此接近人工智能的梦想。
那么,从计算机来看,以上的种种能力都有种种技术去应对。
例如计算能力咱们有分布式计算,反应能力咱们有事件驱动架构,检索能力咱们有搜索引擎,知识存储能力咱们有数据仓库,逻辑推理能力咱们有专家系统,可是,惟有对应智慧中最显著特征的概括与感悟能力,只有机器学习与之对应。这也是机器学习能力最能表征智慧的根本缘由。
摘抄链接:http://www.cnblogs.com/subcon...
http://www.cnblogs.com/subcon...