机器学习与深度学习

目录

机器学习

首先简要介绍下机器学习(Machine Learning)的基本概念。主要介绍机器学习算法的应用,监督学习和无监督学习(supervised-unsupervised learning)的应用场景,训练和测试数据的用法,学习效果评估方式。最后,对scikit-learn进行一些简单的介绍。

自计算机问世以来,计算机可以学习和模仿人类智慧的观点,可谓"引无数英雄竞折腰"。像Arthur C. Clarke的HAL(Heuristically programmed ALgorithmic computer)和Isaac Asimov的Sonny那样的人工智能已经成为共识,通过学习经验获得新知识和技能的软件程序也变得越来越多。我们用这机器学习程序发现我们会喜欢的新音乐,快速找出我们想网购的鞋子。机器学习程序让我们通过命令控制手机,让恒温器自动调节温度。比人类更准确的识别出潦草的手写邮箱地址,更安全的保护信用卡防止诈骗。从新药品调查到从网页寻找头条新闻,机器学习软件逐渐成为许多产业的核心工具。机器学习已经进入长期以来一直被认为只有人类才能胜任的领域,如杜克大学UNC(Duke)篮球队输给了北卡(UNC)的体育报道。

机器学习是设计和研究能够根据过去的经验来为未来做决策的软件,它是通过数据进行研究的程序。机器学习的基础是归纳(generalize),就是从已知案例数据中找出未知的规律。机器学习的典型案例就是垃圾邮件过滤。通过对数千份已经打上是否为垃圾标签的邮件进行观察经验,对新邮件进行过滤。

人工智能研究领域的计算机科学家Arthur Samuel说,机器学习是"研究如何让计算机可以不需要明确的程序也能具有学习能力"。在20世纪五六十年代,Samuel开发了下象棋程序。程序的规则非常简单,要打败专业对手需要复杂的策略,但是通过几千局游戏的训练,程序学会了复杂的策略,可以打败很多人类棋手。

计算机科学家Tom Mitchell对机器学习的定义更正式,"一个程序在完成任务T后获得了经验E,其表现为效果P,如果它完成任务T的效果是P ,那么会获得经验E"。例如,假设你有一些图片,每个图片里是一条狗或一只猫。程序可以通过观察图片来学习,然后它可以通过计算图片正确分类比例来评估学习效果。

我们将使用Mitchell的定义来组织这一章的内容。首先,我们要介绍经验的类型,包括监督学习和无监督学习。然后,我们介绍机器学习系统可以处理的常见任务。最后,我们介绍机器学习系统效果评估方式。

从经验中学习

机器学习系统通常被看作是有无人类监督学习两种方式。监督学习问题是,从成对的已经标记好的输入和输出经验数据作为一个输入进行学习,用来预测输出结果,是从有正确答案的例子中学习。而无监督学习是程序不能从已经标记好的数据中学习。它需要在数据中发现一些规律。假如我们获取了人的身高和体重数据,非监督学习的例子就是把数据点分成组别。一种程序可能是把数据分成男人与女人,儿童与成人等不同组别。

再假设数据都标记了人的性别。那么,一种监督学习方式就是基于一个人的身高和体重数据来预测这个人是男是女。后面我们会介绍监督学习与非监督学习的算法和案例。

监督学习与非监督学习可以看作机器学习的两端。还有一些中间类型,称为半监督学习,既包含监督数据也有非监督数据,这类问题可以看作是介于监督学习与非监督学习之间的学习。半监督机器学习案例是一种增强学习(Reinforcement Learning),问题可以通过决策来获得反馈,但是反馈与某一个决策可能没有直接关系。例如,一个增强学习程序学习玩超级玛丽游戏,让它完成一级或超过一定分数会获得奖励,如果失败一次会受到惩罚。但是,监督反馈与具体要执行的决策无关,避开板栗仔(Goombas)或者跳过火轮圈。本书讨论的半监督学习将集中于监督与非监督学习,因为这些类型包括机器学习的绝大多数问题。下一章,我们会介绍监督学习与非监督学习的更多细节。

监督学习是通过一个输入产生一个带标签的输出的经验数据对中进行学习。机器学习程序中输出结果有很多名称,一些属于机器学习领域,另外一些是专用术语。本书中,我们把输出结果称为响应值(response variable),不过输出结果还有其他名称,如因变量(dependent variables),回归值(regressands),标准变量(criterion variables),测得变量(measured variables),解释变量(explained variables),结果变量(outcome variables),实验变量(experimental variables),标签(labels),和输出变量(output variables)。同理,输入变量也有很多名称。本书把输入变量作为特征(features),它们测量的现象作为解释变量(explanatory variables)。输入变量的其他名称有,预测值(predictors),解释变量(regressors),控制变量(controlled variables),操作便利(manipulated variables)和显现变量(exposure variables)。响应变量和解释变量可能需要真实的或不相关的数值。

构成监督学习经验的案例集合称为训练集(training set)。评估程序效果的案例集合称为测试集(test set)。响应变量可以看成是解释变量构成问题的答案。监督学习问题从不同问题结合中学习,就是说,监督学习程序输入是正确的答案,需要对类似的问题作出正确的反馈。

机器学习任务

常见的监督式机器学习任务就是分类(classification)和回归(regression)。分类认为需要学会从若干变量约束条件中预测出目标变量的值,就是必须预测出新观测值的类型,种类或标签。分类的应用包括预测股票的涨跌,新闻头条是政治新闻还是娱乐新闻。回归问题需要预测连续变量的数值,比如预测新产品的销量,或者依据工作的描述预算工资水平等。与分类方式类似,回归问题需要监督学习。

常见的无监督式机器学习任务是通过训练数据发现相关观测值的组别,称为类(clusters)。对应的任务称为聚类(clustering),通过一些相似性度量方法把一些观测值分成同一类。聚类常用来分析数据集。比如有一些影评数据,聚类算法可以分辨积极的和消极的影评。系统是不能给类加上"积极"或"消极"的标签的;没有监督,系统只能通过相似性度量方法把观测值分成两类。聚类分析的应用场景是用市场产品销售数据为客户分级。通过挖掘一组用户的共同属性,销售人员可以为这类客户提供定制服务。聚类还被用于互联网广播服务,比如有一些歌曲,聚类算法能够按风格流派把歌曲分组。通过不同的相似性度量方法,同样的聚类算法可能通过关键词来分组,也可能通过使用的乐器来分组。

降维(Dimensionality reduction)是另一个常见的无监督学习任务。有些问题可能包含成千上万个解释变量,处理起来非常麻烦。另外,有些解释变量属于噪音,也有些完全是无边的变量,这些影响都会降低程序的归纳能力。降维是发现对响应变量影响最大的解释变量的过程。降维可以更容易的实现数据可视化。如不同面积房子的价格数据可视化,房子的面积可以画在x轴,其价格可以画在y轴,很容易实现可视化。再加一个解释变量,也很容易可视化房屋价格的回归问题,比如房间里卫生间的数量可以画在z轴。但是,几千个解释变量的问题是不可能可视化的。

训练数据和测试数据

训练集里面的观测值构成了算法用来学习的经验数据。在监督学习问题中,每个观测值都由一个响应变量和若干个解释变量组成。

测试集是一个类似的观测值集合,用一些度量标准来评估模型的运行效果。需要注意的是,测试集的数据不能出现在训练集中。否则,很难评价算法是否从训练集中学到了归纳能力,或者仅仅只是简单的记录了结果。归纳很好的程序能够用新数据有效地完成任务。相反,一个通过记忆训练数据来学习复杂模型的程序,可能通过训练集准确预测响应变量的值,但是在处理新问题的时候由于没有归纳能力会预测失败。

训练集的记忆称为过度拟合(over-fitting)。一个记住了观测值的程序不一定能够很好的完成工作,因为它在记忆关系和结果的时候,把噪声也同时记住了。平衡记忆能力与归纳能力,或者说是过度拟合与拟合不够,是许多机器学习算法面对的共同问题。后面的章节,我们会介绍正则化(regularization),可以用来减轻许多模型的过度拟合程度。

除了训练集和测试集,还有一个观测值集合称为验证集(validation set或 hold-out set),有时候需要用到。验证集用来调整超参数(hyperparameters)变量,这类变量控制模型是如何学习的。这个程序也通过测试集来评估其真实的效果,验证集的效果不能用于评估其真实的效果,由于程序参数已经用验证数据调整过了。通常会把监督学习的观测值分成训练、验证和测试集三部分。各部分的大小没有要求,按实际观测值的规模来定。一般把50%以上的数据作为训练集,25%的数据做测试集,剩下的作为验证集。

有的训练集只包含几百个观测值,有的可能有几百万。随着存储成本越来越便宜,网络连接范围不断扩大,内置传感器的智能手机的普及,以及对隐私数据态度的转变都在为大数据新动力,千万甚至上亿级别的训练集成为可能。本书不会涉及这类需要上百个机器并行计算才能完成的任务,许多机器学习算法的能力会随着训练集的丰富变得更强大。但是,机器学习算法也有句老话"放入的是垃圾,出来的也是垃圾"。一个学习了一大堆错误百出的教材的学生不会比只读一点好书的学生考得好。同理,对一堆充满噪声、没有关联、或标签错误的数据进行学习的算法,也不会比只学习一小部分更有代表性的训练集的算法效果更好。

许多监督学习的训练集都是手工准备的,或者半自动处理。建一个海量监督数据集需要耗费许多资源。好在scikit-learn有些数据集,可以让开发者直接验证自己的模型。在开发阶段,尤其是训练集不够的时候,交叉验证(cross-validation )的方法可以用相同的数据对算法进行多次训练和检验。在交叉验证中,训练数据是分成N块的。算法用N-1块进行训练,再用最后一块进行测试。每块都被算法轮流处理若干次,保证算法可以在训练和评估所有数据。下图就是5块数据的交叉验证方法:

数据集被等分成5块,从A标到E。开始的时候,模型用B到E进行训练,在A上测试。下一轮,在A,C,D和E上训练,用B进行测试。依次循环,直到每一块都测试过。交叉验证为模型的效果评估提供了比只有一个数据集更准确的方法。

效果评估,偏差,方差

许多度量方法可以用于评估一个程序是否学会了有效处理任务。在监督学习问题中,很多效果度量标准用来评估预测误差。有两种基本的预测误差:模型的偏差(bias)和方差(variance)。假设你有很多训练集都是不一样的,但是都具有代表性。一个高偏差的模型会产生类似的误差,无论它使用哪个训练集。模型偏离自己对真实关系假设的误差超过了模型在训练集训练的结果。模型有高偏差是固定不变的,但是模型有高方差可能是灵活的,因为模型发觉了训练集里面的噪音部分。就是说,高方差的模型是过度拟合了训练集数据,而一个模型有高偏差的时候,其实是拟合不够的表现。

偏差和方差就像飞镖射到靶子上。每个飞镖就是从不同数据集得出的预测结果。高偏差、低误差的模型就是把飞镖扔到了离靶心很远的地方,但是都集中在一个位置。而高偏差、高误差的模型就是把飞镖扔到了靶子上,但是飞镖离靶心也很远,而且彼此间很分散。低偏差、高误差的模型就是把飞镖扔到了离靶心很近的地方,但是聚类效果不好。最后就是低偏差、低误差的模型,把飞镖扔到了离靶心很近的地方,聚类效果也很好。如下图所示:

在理想情况下,模型具有低偏差和低误差,但是二者具有背反特征,即要降低一个指标的时候,另一个指标就会增加。这就是著名的偏差-方差均衡(Bias-Variance Trade-off)。后面我们会介绍很多模型的偏差-方差均衡特点。

无监督学习问题没有误差项要评估,其效果的是评估数据结构的一些属性。

大多数效果评估方法只能用于具体的任务。机器学习系统应该可以这样评估:用系统在真实世界中发生错误的代价来表示效果评估方法。这看起来很明显,下面例子描述的是适用于一般任务而不只是具体任务的效果评估方法。

有一个对肿瘤数据进行观察的机器学习系统分类任务,需要预测肿瘤是恶性的(malignant)还是良性的(benign)。准确度,或者是正确分类的比例,就是对程序效果评价的直观度量方法。准确度能够评价程序效果,不过它不能区分出,误把良性肿瘤分为恶性肿瘤,和误把恶性肿瘤分为良性肿瘤的效果差异。在一些应用里,发生不同类型错误的代价是相同的。但是,在这个问题里面,没有识别出恶性肿瘤的代价要比误把良性肿瘤分为恶性肿瘤的代价要大的多。

我们可以通过对每一种可能的预测结果进行评估来建立分类系统效果的不同评价方法。当系统正确地识别出一个恶性肿瘤,这个预测叫真阳性(True positive);如果把一个良性肿瘤分成了一个恶性肿瘤,叫假阳性(False positive);正确地识别出一个良性肿瘤叫真阴性(True negative);把一个恶性肿瘤分成了一个良性肿瘤,叫假阴性(False negative)。这四个结果可以用来计算分类系统效果的评价体系,包括准确率(accuracy),精确率(precision)和召回率(recall)三项指标。

准度率计算公式如下,TP是真阳性统计结果,TN是真阴性统计结果,FP是假阳性统计结果,FN是假阴性统计结果:

在这个例子中,精确率是评估被系统判断为恶性肿瘤中的肿瘤里面,确实为恶性肿瘤的比例。而召回率是评估真实的恶性肿瘤被系统正确判断出来的比例。

从精确率和召回率评估指标可以看出,高准确率的分类系统实际没有发现出所有的恶性肿瘤。如果绝大多数肿瘤都是良性的,那么分类器没有预测出恶性肿瘤也可以获得极高的准确率。而一个具有低准确率和高召回率的分类系统反而更好,因为它能够识别出更多恶性肿瘤。

许多其他效果评估方法都可以用于分类方法中,后面我们会介绍一些,包括多标签分类问题的评价标准。下一章,我们会介绍一些回归问题的常用评价标准。

scikit-learn简介

自2007年发布以来,scikit-learn已经成为最给力的Python机器学习库(library)了。scikit-learn支持的机器学习算法包括分类,回归,降维和聚类。还有一些特征提取(extracting features)、数据处理(processing data)和模型评估(evaluating models)的模块。

作为Scipy库的扩展,scikit-learn也是建立在Python的NumPy和matplotlib库基础之上。NumPy可以让Python支持大量多维矩阵数据的高效操作,matplotlib提供了可视化工具,SciPy带有许多科学计算的模型。

scikit-learn文档完善,容易上手,丰富的API,使其在学术界颇受欢迎。开发者用scikit-learn实验不同的算法,只要几行代码就可以搞定。scikit-learn包括许多知名的机器学习算法的实现,包括LIBSVM和LIBLINEAR。还封装了其他的Python库,如自然语言处理的NLTK库。另外,scikit-learn内置了大量数据集,允许开发者集中于算法设计,节省获取和整理数据集的时间。

scikit-learn可以不受任何限制,遵从自由的BSD授权。许多scikit-learn的算法都可以快速执行而且可扩展,除了海量数据集以外。最后,scikit-learn稳定性很好,大部分代码都可以通过Python的自动化测试(mock,nose等)。

小结

上述内容,我们把机器学习定义成一种程序的设计和研究过程,其可以建立一种从一件任务的过往经验中学习并改善处理能力的程序。我们讨论了经验监督的范围。一端是监督学习,程序从打上标签的输入和输出数据中学习。另外一种是无监督学习,程序需要发现没有标签数据的内置结构。半监督学习同时使用有标签和无标签的训练数据。

我们通过案例介绍了机器学习的常见问题。在分类任务中,程序需要从解释变量预测出响应变量的离散数值。在回归任务中,程序从解释变量预测出响应变量的连续数值。无监督学习任务包括聚类和降维,聚类是将观测值通过相似度评价方法分成不同的类,降维是将解释变量集合缩减为一个合成特性集合,同时尽可能的保留数据的信息。我们还介绍了偏差-方差均衡和不同机器学习任务的效果评价方法。

最后,我们介绍了scikit-learn的历史,目标和优点,以及scikit-learn和相关开发工具的安装过程。下一章,我们就详细的介绍回归问题,用scikit-learn建立本书的第一个模型。

深度学习

深度学习(Deep Learning)是机器学习中一个非常接近AI的领域,其动机在于建立、模拟人脑进行分析学习的神经网络。深度学习属于无监督学习。

深度学习的概念源于人工神经网络的研究。深度学习是相对于简单学习而言的,目前多数分类、回归等学习算法都属于简单学习,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。含多隐层的多层感知器就是一种深度学习结构。深度学习模拟更多的神经层神经活动,通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示,深度学习的示意图如下图所示。

深度学习的概念由Hinton等人于2006年提出。基于深信度网(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。此外Lecun等人提出的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。

什么是深度学习

研究人员通过分析人脑的工作方式发现:通过感官信号从视网膜传递到前额大脑皮质再到运动神经的时间,推断出大脑皮质并未直接地对数据进行特征提取处理,而是使接收到的刺激信号通过一个复杂的层状网络模型,进而获取观测数据展现的规则。也就是说,人脑并不是直接根据外部世界在视网膜上投影,而是根据经聚集和分解过程处理后的信息来识别物体。因此视皮层的功能是对感知信号进行特征提取和计算,而不仅仅是简单地重现视网膜的图像。人类感知系统这种明确的层次结构极大地降低了视觉系统处理的数据量,并保留了物体有用的结构信息。深度学习正是希望通过模拟人脑多层次的分析方式来提高学习的准确性。

实际生活中,人们为了解决一个问题,如对象的分类(对象可是文档、图像等),首先必须 做的事情是如何来表达一个对象,即必须抽取一些特征来表示一个对象,因此特征对结果的影响非常大。在传统的数据挖掘方法中,特征的选择一般都是通过手工完成的,通过手工选取的好处是可以借助人的经验或者专业知识选择出正确的特征;但缺点是效率低,而且在复杂的问题中,人工选择可能也会陷入困惑。于是,人们就在寻找一种能够自动的选择特征,而且还能保证特征准确的方法。DeepLearning就是能实现这一点,它能够通过多层次通过组合低层特征形成更抽象的高层特征,从而实现自动的学习特征,而不需要人参与特征的选取。

深度学习的核心思想
假设我们有一个系统S,它有n层(S1,...Sn),它的输入是I,输出是O,形象地表示为: I=>S1=>S2=>......=>Sn =>O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失,保持了不变,这意味着输入I经过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息(即输入I)的另外一种表示。现在回到我们的主题DeepLearning,我们需要自动地学习特征,假设我们有一堆输入I(如一堆图像或者文本),假设我们设计了一个系统S(有n层),我们通过调整系统中参数,使得它的输出仍然是输入I,那么我们就可以自动地获取得到输入I的一系列层次特征,即S1,...,Sn。

另外,前面是假设输出严格地等于输入,这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可。
深度学习的动机

学习基于深度架构的学习算法的主要动机是:

①不充分的深度是有害的;

在许多情形中深度2就足够(比如logicalgates, formal[threshold] neurons, sigmoid-neurons, Radial Basis Function [RBF]units like in SVMs)表示任何一个带有给定目标精度的函数。但是其代价是:图中所需要的节点数(比如计算和参数数量)可能变的非常大。理论结果证实那些事实上所需要的节点数随着输入的大小指数增长的函数族是存在的。这一点已经在logicalgates,formal [threshold] neurons和rbf单元中得到证实。在后者中Hastad说明了但深度是d时,函数族可以被有效地(紧地)使用O(n)个节点(对于n个输入)来表示,但是如果深度被限制为d-1,则需要指数数量的节点数O(2^n)。

我们可以将深度架构看做一种因子分解。大部分随机选择的函数不能被有效地表示,无论是用深地或者浅的架构。但是许多能够有效地被深度架构表示的却不能被用浅的架构高效表示(seethe polynomials example in the Bengio survey paper)。一个紧的和深度的表示的存在意味着在潜在的可被表示的函数中存在某种结构。如果不存在任何结构,那将不可能很好地泛化。

②大脑有一个深度架构;

例如,视觉皮质得到了很好的研究,并显示出一系列的区域,在每一个这种区域中包含一个 输入的表示和从一个到另一个的信号流(这里忽略了在一些层次并行路径上的关联,因此更复杂)。这个特征层次的每一层表示在一个不同的抽象层上的输入,并在层次的更上层有着更多的抽象特征,他们根据低层特征定义。

需要注意的是大脑中的表示是在中间紧密分布并且纯局部:他们是稀疏的:1%的神经元是同时活动的。给定大量的神经元,仍然有一个非常高效地(指数级高效)表示。

③认知过程是深度的;

    人类层次化地组织思想和概念;

    人类首先学习简单的概念,然后用他们去表示更抽象的;

    工程师将任务分解成多个抽象层次去处理;

深度学习结构

目前深度学习按照结构和技术应用的方式,可以把结构分为三类:

生成性深度结构

该结构描述数据的高阶相关特性,或观测数据和相应类别的联合概率分布。与传统区分型神经网络不同,可获取观测数据和标签的联合概率分布,这方便了先验概率和后验概率的估计,而区分型模型仅能对后验概率进行估计。论文Afast learning algorithm for deep learning中采用的深度信念网(DBN)就属于生成性深度结构。DBN解决传统BP算法训练多层神经网络的难题:1)需要大量含标签训练样本集;2)较慢的收敛速度;3)因不合适的参数选择陷入局部最优。

DBN由一系列受限波尔兹曼机(RBM)单元组成。RBM是一种典型神经网络,该网络可视层 和隐层单元彼此互连(层内无连接),隐单元可获取输入可视单元的高阶相关性。相比传统sigmoid信度网络,RBM权值的学习相对容易。为了获取生成性权值,预训练采用无监督贪心逐层方式来实现。在训练过程中,首先将可视向量值映射给隐单元;然后可视单元由隐层单元重建;这些新可视单元再次映射给隐单元,这样就获取了新的隐单元。通过自底向上组合多个RBM可以构建一个DBN。应用高斯---伯努利RBM或伯努利---伯努利RBM,可用隐单元的输出作为训练上层伯努利---伯努利RBM的输入,第二层伯努利和伯努利的输出作为第三层的输入等,如图所示。

区分性深度结构

目的是提供对模式分类的区分性能力,通常描述数据的后验分布。卷积神经网络(Convolutional neural network,CNNs)是第一个真正成功训练多层网络结构的学习算法,与DBNs不同,它属于区分性训练算法。受视觉系统结构的启示,当具有相同参数的神经元应用于前一层的不同位置时,一种变换不变性特征就可获取了。后来LeCun等人沿着这种思路,利用BP算法设计并训练了CNNs。CNNs作为深度学习框架是基于最小化预处理数据要求而产生的。受早期的时间延迟神经网络影响。CNNs靠共享时域权值降低复杂度。CNNs是利用空间关系减少参数数目以提高一般前向BP训练的一种拓扑结构,并在多个实验中获取了较好性能。在CNNs中被称作局部感受区域的图像的一小部分作为分层结构的最底层输入。信息通过不同的网络层次进行传递,因此在每一层能够获取对平移、缩放和旋转不变的观测数据的显著特征。

混合型结构

它的目标是区分性的,但通常利用了生成型结构的输出会更易优化。混合型结构的学习过程包含两个部分,即生成性部分和区分性部分。现有典型的生成性单元通常最终用于区分性任务,生成性模型应用于分类任务时,预训练可结合其他典型区分性学习算法对所有权值进行优化。这个区分性寻优过程通常是附加一个顶层变量来表示训练集提供的期望输出或标签。BP算法可用于优化DBN权值,它的初始权值通过在RBM和DBN预训练中得到而非随机产生,这样的网络通常会比仅通过BP算法单独训练的网络性能优越。可以认为BP对DBNs训练仅完成局部参数空间搜索,与前馈型神经网络相比加速了训练和收敛时间。

里程碑式的论文

目前,深度学习的成果主要集中在计算机视觉和语音识别方面,并且相关成果已经被Google,Microsoft等公司采用。除此之外,自然语言处理、信息检索等领域也对深度学习产生了浓厚的兴趣,但是目前还没有突出的成果。

计算机视觉

ImageNetClassification with Deep Convolutional Neural Networks, Alex Krizhevsky, IlyaSutskever, Geoffrey E Hinton, NIPS 2012.

LearningHierarchical Features for Scene Labeling, Clement Farabet, Camille Couprie,Laurent Najman and Yann LeCun, IEEE Transactions on Pattern Analysis andMachine Intelligence, 2013.

LearningConvolutional Feature Hierachies for Visual Recognition, Koray Kavukcuoglu,Pierre Sermanet, Y-Lan Boureau, Karol Gregor, Michaël Mathieu and YannLeCun, Advances in Neural Information Processing Systems (NIPS 2010), 23, 2010.

语音识别

Dahl,George E., et al. Large vocabulary continuous speech recognition withcontext-dependent DBN-HMMs. Acoustics, Speech and Signal Processing (ICASSP),2011 IEEE International Conference on. IEEE, 2011.

Mohamed,A-R., et al. Deep belief networks using discriminative features for phonerecognition. Acoustics, Speech and Signal Processing (ICASSP), 2011 IEEEInternational Conference on. IEEE, 2011.

Fasel,Ian, Jeff Berry. Deep belief networks for real-time extraction of tonguecontours from ultrasound during speech. Pattern Recognition (ICPR), 2010 20thInternational Conference on. IEEE, 2010.

Deng,Li, et al. Binary coding of speech spectrograms using a deep auto-encoder.Proc. Interspeech. 2010.

自然语言处理

DESELAERST,HASANS, BENDERO, et al. A deep learning approach to machine transliteration[C].Proc of the 4th Workshop on Statistical Machine Translation. 2009:233-241.

开发工具

Theano 是一个 Python 的扩展库,用来定义、优化和模拟数学表达式计算,可以高效的解决多维数组的计算问题。利用Theano更容易的实现深度学习模型。

    使用Theano要求首先熟悉Python和numpy(如果你不了解,可以先看看这里:python、numpy)。接下来学习Theano建议先看Theano basic tutorial,然后按照Getting Started 下载相关数据并用gradient descent的方法进行学习。

学习了Theano的基本方法后,可以练习写以下几个算法:

有监督学习:

Logistic Regression - using Theano for something simple

Multilayer perceptron - introduction to layers

Deep Convolutional Network - a simplified version of LeNet5
无监督学习:

  • Auto Encoders, Denoising Autoencoders - description of autoencoders
  • Stacked Denoising Auto-Encoders - easy steps into unsupervised pre-training for deep nets
  • Restricted Boltzmann Machines - single layer generative RBM model
  • Deep Belief Networks - unsupervised generative pre-training of stacked RBMs followed by supervised fine-tuning

机器学习和深度学习有哪些维度的不同?

机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术。一个同心圆就可以展现出它们的关系。

具体不同大致有以下几点。

  1. 数据依赖。随着数据量的增加,二者的表现有很大区别。深度学习适合处理大数据,而数据量比较小的时候,用传统机器学习方法也许更合适。

  2. 硬件依赖。深度学习十分地依赖于高端的硬件设施,因为计算量实在太大。它会涉及很多矩阵运算,因此很多深度学习都要求有GPU(专门为矩阵运算而设计的)参与运算。

  3. 特征工程。简单讲就是在训练一个模型的时候,需要首先确定哪些特征。在机器学习方法中,几乎所有特征都需要人为确认后,再进行手工特征编码。而深度学习试图自己从数据中学习特征。

  4. 解决问题的方式。(重点!)解决问题时,机器学习通常先把问题分成几块,一个个地解决好之后,再重新组合。但是深度学习是一次性、端到端地解决。

白话版走心解读:举个栗子。

我们设定任务是识别出图片上有哪些物体,并找出它们的位置。机器学习的做法是把问题分两步:发现物体和识别物体。但深度学习不同,它可以直接把对应物体识别出来,同时还能标明对应物体名字。这个好处就是,实时性。

  1. 运行时间。深度学习需要花大量时间来训练,因为有太多参数要去学习。机器学习一般几秒钟最多几小时就可以训练好。但深度学习训练出的模型优势就在于,在预测任务上运行非常快。也是刚刚提到的实时物体检测。

  2. 可解释性。可解释性是区分深度学习与传统机器学习的重要因素。对于深度学习,有时候无法知道它为什么会给出那样的检测结果。比如说为了提高老师们的阅卷的效率,采用深度学习来对文章进行评分,虽然最后发现,通过深度学习训练出来的模型对文章的给分的准确性很高,但是却无法找到深度学习这么给分的理由。原因在于对于较深层次的神经网络而言,其每一层都对应了相应的特征,但是由于层数太多而导致无法清楚其代表的具体是什么特征,因此也就无法对测试的结果进行解释,虽然可以找出到底是哪一个网络的节点被激活了,但是深度学习网络里面的规则仍然很难理解。相反,对于机器学习来说,每一个规则都是给出的,因此可以很好地明白模型的决策。

  3. 数据类型。深度学习在结构化和非结构化数据上表现得都非常好,而传统的机器学习方法仅在结构化数据上表现得很好。

有的深度学习前加个"分布式",又是怎么回事?

面对越来越复杂的任务,数据和深度学习模型的规模都变得日益庞大。当训练数据词表增大到成百万上千万时,如果不做任何剪枝处理,深度学习模型可能会拥有上百亿、甚至是几千亿个参数。

为了提高深度学习模型的训练效率,分布式训练出现了------即同时利用多个工作节点,分布式地、高效地训练出性能优良的神经网络模型。

目前主要有两种并行化/分布式训练方法:数据并行化和模型并行化。

数据并行化里,不同的机器有同一个模型的多个副本,每个机器分配到数据的一部分,然后将所有机器的计算结果按照某种方式合并;模型并行化里,分布式系统中的不同机器负责单个网络模型的不同部分。比如,神经网络模型的不同网络层被分配到不同机器。

白话版走心解读:"并行化"顾名思义,就是一起并肩工作。酷暑正当,我们就用制作棒冰举栗子。先说数据并行化。工厂A要在一天内做50000支棒冰,为了更高效完成,这个任务被分给了100个车间,当然开工前需要大家进行培训,确保每个人都了解了棒冰的制作过程。这里的"车间"就是机器,"50000支"就是数据,"培训资料"就是模型。

同理,模型并行化就是这样。同样是50000支棒冰,但其中10000支生产简单,其余40000支工艺复杂。于是车间里两位师傅分别扛起了这两部分任务,分头进行。"50000支"就是数据,"师傅"就是GPU,生产工艺就是"模型",不同工艺就相当于不同的网络层。

相关推荐
生椰拿铁You12 分钟前
12 —— Webpack中向前端注入环境变量
前端
数据小爬虫@16 分钟前
利用Python爬虫获取淘宝商品评论:实战案例分析
开发语言·爬虫·python
逝去的紫枫23 分钟前
Python PIL:探索图像处理的无限可能
图像处理·人工智能·python
梦幻精灵_cq28 分钟前
Python中“暂停”(time.sleep?input?)
python
rubyw29 分钟前
如何选择聚类算法、回归算法、分类算法?
算法·机器学习·分类·数据挖掘·回归·聚类
Huazzi.39 分钟前
免费好用的静态网页托管平台全面对比介绍
前端·网络·github·web
吃土少女古拉拉1 小时前
前端和后端
前端·学习笔记
檀越剑指大厂1 小时前
【Python系列】 Base64 编码:使用`base64`模块
开发语言·python
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-05
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘