机器学习的分类与主要算法对比

<div id="cnblogs_post_body" class="blogpost-body"><h1 id="机器学习的分类与主要算法对比">机器学习的分类与主要算法对比</h1> <p>http://blog.csdn.net/sinat_27554409/article/details/72823984</p> <p>重要引用:<a href="https://www.coursera.org/learn/machine-learning" target="_blank">Andrew Ng Courera Machine Learning</a>;<a href="http://www.cnblogs.com/subconscious/p/4107357.html" target="_blank">从机器学习谈起</a>;<a href="https://wenku.baidu.com/view/999fa58c4431b90d6d85c727.html" target="_blank">关于机器学习的讨论</a>;<a href="http://www.ctocio.com/hotnews/15919.html" target="_blank">机器学习常见算法分类汇总</a>;<a href="http://yann.lecun.com/exdb/lenet/" target="_blank">LeNet Homepage</a>;<a href="http://blog.pluskid.org/?page_id=683" target="_blank">pluskid svm</a></p> <p>  首先让咱们瞻仰一下当今机器学习领域的执牛耳者:</p> <p><img title="" src="http://img.blog.csdn.net/20170531220003913?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  这幅图上的三人是当今机器学习界的执牛耳者。中间的是Geoffrey Hinton, 加拿大多伦多大学的教授,现在被聘为“Google大脑”的负责人。右边的是Yann LeCun, 纽约大学教授,现在是Facebook人工智能实验室的主任。而左边的你们都很熟悉,Andrew Ng,中文名吴恩达,斯坦福大学副教授,现在也是“百度大脑”的负责人与百度首席科学家。这三位都是目前业界煊赫一时的大牛,被互联网界大鳄求贤若渴的聘请,足见他们的重要性。而他们的研究方向,则所有都是机器学习的子类–深度学习。</p> <p>  从广义上来讲,机器学习是一种可以赋予机器学习的能力以此让它完成直接编程没法完成的功能的方法。但从实践的意义上来讲,机器学习是一种经过利用数据,训练出模型,而后使用模型预测的一种方法。</p> <p><img title="" src="http://img.blog.csdn.net/20170531213805461?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  机器学习无疑是当前数据分析领域的一个热点内容。不少人在平时的工做中都或多或少会用到机器学习的算法。从范围上来讲,机器学习跟模式识别,统计学习,数据挖掘是相似的,同时,机器学习与其余领域的处理技术的结合,造成了计算机视觉、语音识别、天然语言处理等交叉学科。所以,通常说数据挖掘时,能够等同于说机器学习。同时,咱们日常所说的机器学习应用,应该是通用的,不只仅局限在结构化数据,还有图像,音频等应用。</p> <p>  机器学习的算法不少。不少时候困惑人们都是,不少算法是一类算法,而有些算法又是从其余算法中延伸出来的。这里,咱们从两个方面来给你们介绍,第一个方面是学习的方式,第二个方面是算法的相似性。</p> <h2 id="一机器学习方式"><a name="t1"></a>1、机器学习方式</h2> <p>  根据数据类型的不一样,对一个问题的建模有不一样的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域,有几种主要的学习方式。将算法按照学习方式分类是一个不错的想法,这样可让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来得到最好的结果。</p> <h3 id="11-监督学习"><a name="t2"></a>1.1 监督学习</h3> <p><img title="" src="http://img.blog.csdn.net/20170531204235682?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在创建预测模型的时候,监督式学习创建一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)</p> <h3 id="12-无监督学习"><a name="t3"></a>1.2 无监督学习</h3> <p><img title="" src="http://img.blog.csdn.net/20170531204318011?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。</p> <h3 id="13-半监督学习"><a name="t4"></a>1.3 半监督学习</h3> <p><img title="" src="http://img.blog.csdn.net/20170531204408246?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型能够用来进行预测,可是模型首先须要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对经常使用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。</p> <h3 id="14-强化学习"><a name="t5"></a>1.4 强化学习</h3> <p><img title="" src="http://img.blog.csdn.net/20170531204855013?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  在这种学习模式下,输入数据做为对模型的反馈,不像监督模型那样,输入数据仅仅是做为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此马上做出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习(Temporal difference learning)</p> <hr> <h2 id="二机器学习经常使用算法"><a name="t6"></a>2、机器学习经常使用算法</h2> <p>  根据算法的功能和形式的相似性,咱们能够把算法分类,好比说基于树的算法,基于神经网络的算法等等。固然,机器学习的范围很是庞大,有些算法很难明确归类到某一类。而对于有些分类来讲,同一分类的算法能够针对不一样类型的问题。这里,咱们尽可能把经常使用的算法按照最容易理解的方式进行分类。</p> <h3 id="21-回归算法有监督学习"><a name="t7"></a>2.1 回归算法(有监督学习)</h3> <p><img title="" src="http://img.blog.csdn.net/20170531205907749?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  在大部分机器学习课程中,回归算法都是介绍的第一个算法。缘由有两个:一.回归算法比较简单,介绍它可让人平滑地从统计学迁移到机器学习中。二.回归算法是后面若干强大算法的基石,若是不理解回归算法,没法学习那些强大的算法。回归算法有两个重要的子类:即线性回归和逻辑回归。</p> <p>  回归算法是试图采用对偏差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域,人们提及回归,有时候是指一类问题,有时候是指一类算法,这一点经常会使初学者有所困惑。常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)</p> <ul> <li> <p>线性回归就是如何拟合出一条直线最佳匹配我全部的数据?通常使用“最小二乘法”来求解。“最小二乘法”的思想是这样的,假设咱们拟合出的直线表明数据的真实值,而观测到的数据表明拥有偏差的值。为了尽量减少偏差的影响,须要求解一条直线使全部偏差的平方和最小。最小二乘法将最优问题转化为求函数极值问题。函数极值在数学上咱们通常会采用求导数为0的方法。但这种作法并不适合计算机,可能求解不出来,也可能计算量太大。</p> </li> <li> <p>逻辑回归是一种与线性回归很是相似的算法,可是,从本质上讲,线型回归处理的问题类型与逻辑回归不一致。线性回归处理的是数值问题,也就是最后预测出的结果是数字,例如房价。而逻辑回归属于分类算法,也就是说,逻辑回归预测结果是离散的分类,例如判断这封邮件是不是垃圾邮件,以及用户是否会点击此广告等等。</p> <p>实现方面的话,逻辑回归只是对对线性回归的计算结果加上了一个Sigmoid函数,将数值结果转化为了0到1之间的几率(Sigmoid函数的图像通常来讲并不直观,你只须要理解对数值越大,函数越逼近1,数值越小,函数越逼近0),接着咱们根据这个几率能够作预测,例如几率大于0.5,则这封邮件就是垃圾邮件,或者肿瘤是不是恶性的等等。从直观上来讲,逻辑回归是画出了一条分类线,逻辑回归算法划出的分类线基本都是线性的(也有划出非线性分类线的逻辑回归,不过那样的模型在处理数据量较大的时候效率会很低)。</p> </li> </ul> <h3 id="22-正则化方法"><a name="t8"></a>2.2 正则化方法</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210242051?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  正则化方法是其余算法(一般是回归算法)的延伸,根据算法的复杂度对算法进行调整。正则化方法一般对简单模型予以奖励而对复杂算法予以惩罚。常见的算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及弹性网络(Elastic Net)。</p> <h3 id="23-基于实例的算法"><a name="t9"></a>2.3 基于实例的算法</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210107595?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  基于实例的算法经常用来对决策问题创建模型,这样的模型经常先选取一批样本数据,而后根据某些近似性把新数据与样本数据进行比较。经过这种方式来寻找最佳的匹配。所以,基于实例的算法经常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM)</p> <h3 id="24-决策树算法"><a name="t10"></a>2.4 决策树算法</h3> <p>  决策树算法根据数据的属性采用树状结构创建决策模型, 决策树模型经常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推动机(Gradient Boosting Machine, GBM)</p> <p>  通常的机器学习模型至少考虑两个量:一个是因变量,也就是咱们但愿预测的结果,在这个例子里就是小Y迟到与否的判断。另外一个是自变量,也就是用来预测小Y是否迟到的量。假设我把时间做为自变量,譬如我发现小Y全部迟到的日子基本都是星期五,而在非星期五状况下他基本不迟到。因而我能够创建一个模型,来模拟小Y迟到与否跟日子是不是星期五的几率。见下图:</p> <p><img title="" src="http://img.blog.csdn.net/20170531224754213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  这样的图就是一个最简单的机器学习模型,称之为决策树。</p> <p>  当咱们考虑的自变量只有一个时,状况较为简单。若是把咱们的自变量再增长一个。例如小Y迟到的部分状况时是在他开车过来的时候(你能够理解为他开车水平较臭,或者路较堵)。因而我能够关联考虑这些信息。创建一个更复杂的模型,这个模型包含两个自变量与一个因变量。再更复杂一点,小Y的迟到跟天气也有必定的缘由,例以下雨的时候,这时候我须要考虑三个自变量。</p> <p>  若是我但愿可以预测小Y迟到的具体时间,我能够把他每次迟到的时间跟雨量的大小以及前面考虑的自变量统一创建一个模型。因而个人模型能够预测值,例如他大概会迟到几分钟。这样能够帮助我更好的规划我出门的时间。在这样的状况下,决策树就没法很好地支撑了,由于决策树只能预测离散值。咱们能够用线型回归方法创建这个模型。</p> <p>  若是我把这些创建模型的过程交给电脑。好比把全部的自变量和因变量输入,而后让计算机帮我生成一个模型,同时让计算机根据我当前的状况,给出我是否须要迟出门,须要迟几分钟的建议。那么计算机执行这些辅助决策的过程就是机器学习的过程。</p> <h3 id="25-贝叶斯方法"><a name="t11"></a>2.5 贝叶斯方法</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210514445?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。</p> <h3 id="26-基于核的算法有监督学习"><a name="t12"></a>2.6 基于核的算法(有监督学习)</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210602803?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  基于核的算法中最著名的莫过于支持向量机(SVM)了。 基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题可以更容易的解决。 常见的基于核的算法包括:支持向量机(Support Vector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)等。接下来将重点介绍一下SVM</p> <p><span style="color: #0099ff; font-family: 黑体; font-size: x-large">· 支持向量机 SVM</span></p> <p>  支持向量机算法是诞生于统计学习界,同时在机器学习界大放光彩的经典算法。</p> <p>  支持向量机算法从某种意义上来讲是逻辑回归算法的强化:经过给予逻辑回归算法更严格的优化条件,支持向量机算法能够得到比逻辑回归更好的分类界线。可是若是没有某类函数技术,则支持向量机算法最多算是一种更好的线性分类技术。</p> <p>  可是,经过跟高斯“核”的结合,支持向量机能够表达出很是复杂的分类界线,从而达成很好的的分类效果。“核”事实上就是一种特殊的函数,最典型的特征就是能够将低维的空间映射到高维的空间。</p> <p>  SVM方法是经过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilber空间),使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性可分的问题。升维,就是把样本向高维空间作映射,通常状况下这会增长计算的复杂性,甚至会引发“维数灾难”,于是人们不多问津。可是做为分类、回归等问题来讲,极可能在低维样本空间没法线性处理的样本集,在高维特征空间中却能够经过一个线性超平面实现线性划分(或回归)。通常的升维都会带来计算的复杂化,SVM方法巧妙地解决了这个难题:应用核函数的展开定理,就不须要知道非线性映射的显式表达式;因为是在高维特征 空间中创建线性学习机,因此与线性模型相比,不但几乎不增长计算的复杂性,并且在某种程度上避免了“维数灾难”.这一切要归功于核函数的展开和计算理论。</p> <p>  选择不一样的核函数,能够生成不一样的SVM,经常使用的核函数有如下4种:&nbsp;<br>  - 性核函数K(x,y)=x·y&nbsp;<br>  - 多项式核函数K(x,y)=[(x·y)+1]d&nbsp;<br>  - 向基函数K(x,y)=exp(-|x-y|^2/d^2)&nbsp;<br>  - 层神经网络核函数K(x,y)=tanh(a(x·y)+b)</p> <p>  以下图所示,咱们如何在二维平面划分出一个圆形的分类界线?在二维平面可能会很困难,可是经过“核”能够将二维空间映射到三维空间,而后使用一个线性平面就能够达成相似效果。也就是说,二维平面划分出的非线性分类界线能够等价于三维平面的线性分类界线。因而,咱们能够经过在三维空间中进行简单的线性划分就能够达到在二维平面中的非线性划分效果。</p> <p><img title="" src="http://img.blog.csdn.net/20170531221859939?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="待分类数据"></p> <p><img title="" src="http://img.blog.csdn.net/20170531222127285?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="已分类数据"></p> <p>  支持向量机是一种数学成分很浓的机器学习算法(相对的,神经网络则有生物科学成分)。在算法的核心步骤中,有一步证实,即将数据从低维映射到高维不会带来最后计算复杂性的提高。因而,经过支持向量机算法,既能够保持计算效率,又能够得到很是好的分类效果。所以支持向量机在90年代后期一直占据着机器学习中最核心的地位,基本取代了神经网络算法。直到如今神经网络借着深度学习从新兴起,二者之间才又发生了微妙的平衡转变。</p> <h3 id="27-聚类算法无监督学习"><a name="t13"></a>2.7 聚类算法(无监督学习)</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210708835?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  聚类,就像回归同样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法一般按照中心点或者分层的方式对输入数据进行归并。简单来讲,聚类算法就是计算种群中的距离,根据距离的远近将数据划分为多个族群,因此的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及指望最大化算法(Expectation Maximization, EM)。</p> <h3 id="28-关联规则学习"><a name="t14"></a>2.8 关联规则学习</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210806554?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  关联规则学习经过寻找最可以解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。</p> <h3 id="29-人工神经网络-ann有监督学习"><a name="t15"></a>2.9 人工神经网络 ANN(有监督学习)</h3> <p>  神经网络(也称之为人工神经网络,ANN)算法是80年代机器学习界很是流行的算法,不过在90年代中途衰落。如今,携着“深度学习”之势,神经网络重装归来,从新成为最强大的机器学习算法之一。</p> <p>  神经网络的诞生起源于对大脑工做机理的研究。早期生物界学者们使用神经网络来模拟大脑。机器学习的学者们使用神经网络进行机器学习的实验,发如今视觉与语音的识别上效果都至关好。在BP算法(加速神经网络训练过程的数值算法)诞生之后,神经网络的发展进入了一个热潮。BP算法的发明人之一是前面介绍的机器学习大牛Geoffrey Hinton。</p> <p>  人工神经网络是机器学习的一个庞大的分支,有几百种不一样的算法,一般用于解决分类和回归问题。(其中深度学习就是其中的一类算法,咱们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation),Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)</p> <p>  具体说来,神经网络的学习机理是什么?简单来讲,就是分解与整合。在著名的Hubel-Wiesel试验中,学者们研究猫的视觉分析机理是这样的。</p> <p><img title="" src="http://img.blog.csdn.net/20170531220319660?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  比方说,一个正方形,分解为四个折线进入视觉处理的下一层中。四个神经元分别处理一个折线。每一个折线再继续被分解为两条直线,每条直线再被分解为黑白两个面。因而,一个复杂的图像变成了大量的细节进入神经元,神经元处理之后再进行整合,最后得出了看到的是正方形的结论。这就是大脑视觉识别的机理,也是神经网络工做的机理。</p> <p>  让咱们看一个简单的神经网络的逻辑架构。在这个网络中,分红输入层,隐藏层,和输出层。输入层负责接收信号,隐藏层负责对数据的分解与处理,最后的结果被整合到输出层。每层中的一个圆表明一个处理单元,能够认为是模拟了一个神经元,若干个处理单元组成了一个层,若干个层再组成了一个网络,也就是”神经网络”。</p> <p><img title="" src="http://img.blog.csdn.net/20170531220613672?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  上图描述的是一个目前研究最为成熟Shallow 结构的神经网络(只含有单层隐藏层神经元的结构)。第一层为输入层 (input layer ),第二层称为隐藏层 ( hidden layer ),最后一层为输出层( output layer )。神经元之间都是由低层出发,终止于高层神经元的一条有向边进行链接,每条边都有本身的权重。每一个神经元都是一个计算单元,如在Feed-forward neural network 中,除输入层神经元外,每一个神经元为一个计算单元,能够经过一个计算函数 f() 来表示,函数的具体形式能够本身定义,如今用的较多的是 感知器计算神经元,若是你对感知器有所了解的话,理解起来会容易不少。 能够计算此时神经元所具备的能量值,当该值超过必定阀值的时候神经元的状态就会发生改变,神经元只有两种状态,激活或未激活。在实际的人工神经网络中,通常是用一种几率的方式去表示神经元是否处于激活状态,能够用 h(f) 来表示,f 表明神经元的能量值,h(f) 表明该能量值使得神经元的状态发生改变的几率有多大,能量值越大,处于激活状态的几率就越高。到这部分你已经接触到了关于神经网络的几个基本术语,下面用更加规范的符号来表示,神经元的激活值(activations) f() ,表示计算神经元的能量值, 神经元的激活状态 h(f) ,h 表示激活函数。</p> <p><span style="color: #0099ff; font-family: 黑体; font-size: medium"><br>在神经网络中,每一个处理单元事实上就是一个逻辑回归模型,逻辑回归模型接收上层的输入,把模型的预测结果做为输出传输到下一个层次。经过这样的过程,神经网络能够完成很是复杂的非线性分类。</span></p> <p>  下图会演示神经网络在图像识别领域的一个著名应用,这个程序叫作LeNet,是一个基于多个隐层构建的神经网络。经过LeNet能够识别多种手写数字,而且达到很高的识别精度与拥有较好的鲁棒性。</p> <p><img title="" src="http://img.blog.csdn.net/20170531221222695?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  右下方的方形中显示的是输入计算机的图像,方形上方的红色字样“answer”后面显示的是计算机的输出。左边的三条竖直的图像列显示的是神经网络中三个隐藏层的输出,能够看出,随着层次的不断深刻,越深的层次处理的细节越低,例如层3基本处理的都已是线的细节了。LeNet的发明人就是前文介绍过的机器学习的大牛Yann LeCun。</p> <p>  大约二三十年前,Neural Network曾经是ML领域特别火热的一个方向,可是后来确慢慢淡出了,进入90年代,神经网络的发展进入了一个瓶颈期。其主要缘由是尽管有BP算法的加速,神经网络的训练过程仍然很困难。所以90年代后期支持向量机(SVM)算法取代了神经网络的地位。&nbsp;<br>  &nbsp;<br>  缘由包括如下几个方面:&nbsp;<br>  1. 比较容易过训练,参数比较难肯定;&nbsp;<br>  2. 训练速度比较慢,在层次比较少(小于等于3)的状况下效果并不比其它方法更优;</p> <p>  因此中间有大约20多年的时间,神经网络被关注不多,这段时间基本上由SVM和Boosting算法主导。可是,Hinton坚持下来并最终(和Bengio、Yann.lecun等)提成了一个实际可行的Deep Learning框架。</p> <h3 id="210-深度学习"><a name="t16"></a>2.10 深度学习</h3> <p><img title="" src="http://img.blog.csdn.net/20170531211026235?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  虽然深度学习这四字听起来颇为高大上,但其理念却很是简单,就是传统的神经网络发展到了多隐藏层的状况。</p> <p>  在上文介绍过,自从90年代之后,神经网络已经消寂了一段时间。可是BP算法的发明人Geoffrey Hinton一直没有放弃对神经网络的研究。因为神经网络在隐藏层扩大到两个以上,其训练速度就会很是慢,所以实用性一直低于支持向量机。2006年,Geoffrey Hinton在科学杂志《Science》上发表了一篇文章,论证了两个观点:</p> <p>  1.多隐层的神经网络具备优异的特征学习能力,学习获得的特征对数据有更本质的刻画,从而有利于可视化或分类;&nbsp;<br>  2.深度神经网络在训练上的难度,能够经过“逐层初始化” 来有效克服。</p> <p>  经过这样的发现,不只解决了神经网络在计算上的难度,同时也说明了深层神经网络在学习上的优异性。今后,神经网络从新成为了机器学习界中的主流强大学习技术。同时,具备多个隐藏层的神经网络被称为深度神经网络,基于深度神经网络的学习研究称之为深度学习。</p> <p>  因为深度学习的重要性质,在各方面都取得极大的关注,按照时间轴排序,有如下四个标志性事件值得一说:</p> <p>  1. 2012年6月,《纽约时报》披露了Google Brain项目,这个项目是由Andrew Ng和Map-Reduce发明人Jeff Dean共同主导,用16000个CPU Core的并行计算平台训练一种称为“深层神经网络”的机器学习模型,在语音识别和图像识别等领域得到了巨大的成功。Andrew Ng就是文章开始所介绍的机器学习的大牛。&nbsp;<br>  2. 2012年11月,微软在中国天津的一次活动上公开演示了一个全自动的同声传译系统,讲演者用英文演讲,后台的计算机一鼓作气自动完成语音识别、英中机器翻译,以及中文语音合成,效果很是流畅,其中支撑的关键技术是深度学习;&nbsp;<br>  3. 2013年1月,在百度的年会上,创始人兼CEO李彦宏高调宣布要成立百度研究院,其中第一个重点方向就是深度学习,并为此而成立深度学习研究院(IDL)。&nbsp;<br>  4. 2013年4月,《麻省理工学院技术评论》杂志将深度学习列为2013年十大突破性技术(Breakthrough Technology)之首。</p> <p><img title="" src="http://img.blog.csdn.net/20170531224014225?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="深度学习的发展热潮"></p> <p>  神经网络研究领域领军者Hinton在2006年提出了神经网络Deep Learning算法,使神经网络的能力大大提升,向支持向量机发出挑战。Deep Learning假设神经网络是多层的,首先用RestrictedBoltzmann Machine(非监督学习)学习网络的结构,而后再经过Back Propagation(监督学习)学习网络的权值。</p> <p>  深度学习算法是对人工神经网络的发展。 在近期赢得了不少关注, 深度学习试图创建大得多也复杂得多的神经网络。不少深度学习的算法是半监督式学习算法,用来处理存在少许未标识数据的大数据集。常见的深度学习算法包括:受限波尔兹曼机(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network), 堆栈式自动编码器(Stacked Auto-encoders)。</p> <p>  总之,deep learning可以获得更好地表示数据的feature,同时因为模型的层次、参数不少,capacity足够,所以,模型有能力表示大规模数据,因此对于图像、语音这种特征不明显(须要手工设计且不少没有直观物理含义)的问题,可以在大规模训练数据上取得更好的效果。此外,从模式识别特征和分类器的角 度,deep learning框架将feature和分类器结合到一个框架中,用数据去学习feature,在使用中减小了手工设计feature的巨大工做量(这是目前工业界工程师付出努力最多的方面),所以,不只仅效果能够更好,并且,使用起来也有不少方便之处。</p> <p><span style="color: #0099ff; font-family: 黑体; font-size: x-large"><br>Deep Learning与传统的神经网络异同:</span></p> <ul> <li> <p>相同点:&nbsp;Deep Learning采用了神经网络类似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有链接,同一层以及跨层节点之间相互无链接,每一层能够看做是一个Logistic Regression模型;这种分层结构,是比较接近人类大脑的结构的。</p>html

</li> <li> <p>不一样点:而为了克服神经网络训练中的问题,DL采用了与神经网络很不一样的训练机制。传统神经网络中,采用的是Back Propagation的方式进行,简单来说就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,而后根据当前输出和label之间的 差去改变前面各层的参数,直到收敛(总体是一个梯度降低法)。而DeepLearning总体上是一个Layer-Wise的训练机制。这样作的缘由是由于,若是采用Back Propagation的机制,对于一个Deep Network(7层以上),残差传播到最前面的层已经变得过小,出现所谓的Gradient Diffusion。</p>算法

</li>编程

</ul> <h3 id="211-下降维度算法无监督学习"><a name="t17"></a>2.11 下降维度算法(无监督学习)</h3> <p><img title="" src="http://img.blog.csdn.net/20170531211135236?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  像聚类算法同样,下降维度算法试图分析数据的内在结构,不过下降维度算法是以非监督学习的方式试图利用较少的信息来概括或者解释数据。这类算法能够用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。</p> <p>  其主要特征是将数据从高维下降到低维层次。在这里,维度其实表示的是数据的特征量的大小,例如,房价包含房子的长、宽、面积与房间数量四个特征,也就是维度为4维的数据。能够看出来,长与宽事实上与面积表示的信息重叠了,例如面积=长 × 宽。经过降维算法咱们就能够去除冗余信息,将特征减小为面积与房间数量两个特征,即从4维的数据压缩到2维。因而咱们将数据从高维下降到低维,不只利于表示,同时在计算上也能带来加速。</p> <p>  刚才说的降维过程当中减小的维度属于肉眼可视的层次,同时压缩也不会带来信息的损失(由于信息冗余了)。若是肉眼不可视,或者没有冗余的特征,降维算法也能工做,不过这样会带来一些信息的损失。可是,降维算法能够从数学上证实,从高维压缩到的低维中最大程度地保留了数据的信息。所以,使用降维算法仍然有不少的好处。</p> <p>  降维算法的主要做用是压缩数据与提高机器学习其余算法的效率。经过降维算法,能够将具备几千个特征的数据压缩至若干个特征。另外,降维算法的另外一个好处是数据的可视化,例如将5维的数据压缩至2维,而后能够用二维平面来可视。降维算法的主要表明是PCA算法(即主成分分析算法)。</p> <h3 id="212-集成算法"><a name="t18"></a>2.12 集成算法</h3> <p><img title="" src="http://img.blog.csdn.net/20170531211220055?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描述"></p> <p>  集成算法用一些相对较弱的学习模型独立地就一样的样本进行训练,而后把结果整合起来进行总体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类很是强大的算法,同时也很是流行。常见的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推动机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。</p></div>网络

相关文章
相关标签/搜索