Py学习  »  机器学习算法

深度学习入门笔记(一):机器学习基础

逐梦er • 3 年前 • 435 次点击  

专栏——深度学习入门笔记

本章内容

  • 人工智能的发展及其面临的挑战
  • 机器学习的基础知识和基本概念
  • 特征工程的方法和流程
  • 深度学习的发展及应用

1956年8月,约翰.麦卡锡在美国达特茅斯学院(Dartmouth College)发起的一次研讨会 上首次提出了“人工智能”这个概念。这次会议因此被公认为是人工智能诞生的标志。在之后60多年的时间里,人工智能的发展起起伏伏、忽“冷”忽“热”。2016年,AlphaGo与李世石的那场“世纪大战”彻底点燃了大众的热情。当前,人工智能成了一个“香饽饽”,很多国家都在积极争夺人工智能领域的话语权,各大公司也都不断加大在人工智能领域的投入。人工智能成为继个人电脑、互联网、移动互联网之后的又一 次浪潮,对于想要转行人工智能领域的人或者人工智能领域的从业者来说,当下就是一个不折不扣的黄金时代。作为解决人工智能领域中问题的工具,机器学习和深度学习目前正被广泛地学习和使用。

在这里插入图片描述

一.人工智能的机遇与挑战

从谷歌推出无人驾驶汽车到AlphaGo战胜人类顶级围棋高手李世石,再到阿里巴巴成立人工智能研究院一一达摩院,关于人工智能的话题近几年时常霸占各大媒体的头条。随着国务院于2017年7月8日印发并实施《新一代人工智能发展规划》,人工智能也被提到国家发展的战略高度。

人工智能(Artificial Intelligence) 目前还没有一个统- - 和明确的定义。我们可以简单地认为:人工智能旨在研究如何让计算机拥有(或部分拥有)人类的智力,从而解决现实中只有依靠人的智力才能解决的问题。

目前,人工智能的应用已经非常广泛,涵盖金融、电商、医疗、制造业、教育等多个领域,诸如语音识别、翻译系统、推荐系统、图片处理功能,以及个性化新闻推荐等,这些具体的应用场景和我们的生活息息相关。而在未来,人工智能将覆盖更多的领域,这不仅是一场科技的革命,更是时代的大势所趋。人工智能应用必然会全方位地渗入我们日常生活中的点点滴滴。

二.机器学习

2.1 什么是机器学习

机器学习(Machine Learning) 是让计算机能够自动地从某些数据中总结出规律,并得出某种预测模型,进而利用该模型对未知数据进行预测的方法。它是一种实现人工智能的方式,是一门交叉学科,综合了统计学、概率论、逼近论、凸分析、计算复杂性理论等。

目前机器学习的研究和应用大概集中在如图1-1所示的领域。

在这里插入图片描述
其中,机器学习让统计学习得到延伸;模式识别侧重于“感知”特征,而机器学习则会“学习”特征;数据挖掘领域中用到的算法也经常可在模式识别和机器学习中应用。 计算机视觉 语音识别 自然语言处理 目前是机器学习领域最热门的三大方向。

计算机视觉 是一门研究如何让机器替代人的眼睛,对“看到”的图片进行分析、处理的科学,在图像分类、人脸识别、车牌识别、目标检测及自动驾驶等均有十分广泛的应用。

●目前基于深度学习的 语音识别和语音合成技术 已经非常成熟,应用随处可见,如智能音箱、实物机器人(例如早教机器人)及虚拟人物等。

自然语言处理 旨在使用自然语言处理技术让计算机“读懂”人类的语言,相关应用有机器翻译、智能客服、垃圾信息识别等。

目前,机器学习大致可以分为以下几类:

(1) 有监督学习(Supervised Learning) :当我们已经拥有–些数据及数据对应的类标时,就可以通过这些数据训练出一个模型,再利用这个模型去预测新数据的类标,这种情况称为有监督学习。有监督学习可分为回归问题和分类问题两大类。在回归问题中,我们预测的结果是连续值;而在分类问题中,我们预测的结果是离散值。常见的有监督学习算法包括 线性回归、逻辑回归、K-近邻、朴素贝叶斯、决策树、随机森林、支持向量机 等。

(2) 无监督学习(Unsupervised Learning) :在无监督学习中是没有给定类标训练样本的,这就需要我们对给定的数据直接建模。常见的无监督学习算法包括K-means、EM算法等。

(3) 半监督学习(Semi-supervised Learn-ing) :半监督学习介于有监督学习和无监督学习之间,给定的数据集既包括有类标的数据,也包括没有类标的数据,需要在工作量(例如数据的打标)和模型的准确率之间取一个平衡点。

(4)强化学习( Reinforcement Learning) :从不懂到通过不断学习、总结规律,最终学会的过程便是强化学习。强化学习很依赖于学习的“周围环境”,强调如何基于“周围环境”而做出相应的动作。

具体分类如图1-2所示。
在这里插入图片描述

2.2 用机器学习解决问题的一般流程

用机器学习解决问题的一-般流程如图1-3所示。
在这里插入图片描述

(1)收集数据

业界有一句非常流行的话:“ 数据和特征决定了机器学习的上界,而模型和算法只是去逼近这个上界 ”,由此可见,数据对于整个机器学习项目来说至关重要。当我们面临一个实际的问题时,如果既有想法,又有一些相关数据,有可能是有用的,也有可能是无用的,则这里的数据收集是指根据需求从已有数据中找出我们真正需要的数据;而如果只有想法,没有数据,则这里的数据收集是指对数据的搜寻和整理等,如利用网络爬虫技术从互联网爬取数据,或因学习和研究的便利而使用公开数据集。

输入数据较简单,此处略写。

(2)数据预处理

无论是我们自己收集的数据还是公开数据集,通常都会存在各种各样的问题,例如数据不完整、格式不一致、存在异常数据,以及正负样本数量不均衡等。因此,需要对数据进行一系列的处理,如清洗、转换、规范等之后才能拿来使用,这个过程即为数据预处理。

(3)特征工程

目前在机器学习或深度学习相关的书籍中,很少会有专门把特征工程拿出来单独介绍的(在一些与数据分析或数据挖掘相关的书籍中可能会介绍得相对多一些)。的确,对于整个机器学习的项目来说,特征工程只是其中很小的一部分工作,但是千万不能忽略这“很小的一部分工作”的重要性。一个机器学习任务的成功与否往往在很大程度上取决于特征工程。简单来说, 特征工程的任务是从原始数据中抽出最具代表性的特征 ,从而让模型能够更有效地学习这些数据。通常我们可以使用scikit-learn这个库来处理数据和提取特征,scikit-learn是机器学习中使用非常广泛的第三方模块,本身封装了很多常用的机器学习算法,同时还有很多数据处理和特征提取相关的方法。

(4)训练和测试模型

处理好数据之后,就可以选择合适的机器学习算法进行模型训练了。可供选择的机器学习算法有很多,每个算法都有自己的适用场景,那么如何选择合适的算法呢?

首先,要对处理好的数据进行分析,判断数据是否有类标,若有类标,则应该考虑使用有监督学习的相关算法,否则可以作为无监督学习问题处理;其次,判断问题类型,属于分类问题还是回归问题;最后根据问题的类型选择具体的算法训练模型。实际工作.上会使用多种算法,或者相同算法的不同参数进行评估。

此外,还要考虑数据集的大小,若数据集小,训练的时间较短,则通常考虑采用朴素贝叶斯等轻量级算法,否则就要考虑采用SVM等重量级算法,甚至考虑使用深度学习的算法。

(5)模型的评估

常用的模型评估方法及相关的评估指标可参见2.5节介绍。到此已经介绍了机器学习的大致流程和相关方法,接下来将进一步介绍其中重要环节一一数据预处理、 特征工程,以及模型的选择与评估。

2.3 数据预处理

根据数据类型的不同,数据预处理的方式和内容也不尽相同,这里简单介绍几种较常用的方式。

(1)归一化

归一化指将不同变化范围内的值映射到一个固定的范围里,例如,常使用min-max等方法将数值归一化到[0,1]的区间内(有些时候也会归一化到[-1,1]的区间内)。归一化的作用包括无量纲化一、加快模型的收敛速度,以及避免小数值的特征被忽略等。

(2)标准化

标准化指在不改变数据原分布的前提下,将数据按比例缩放,使之落入一个限定的区间,让数据之间具有可比性。需要注意的是,归一化和标准化各有其适用的情况,例如在涉及距离度量或者数据符合正态分布的时候,应该使用标准化而不是归一化。常用的标准化方法有z- score等。

(3)离散化

离散化指把连续的数值型数据进行分段,可采用相等步长或相等频率等方法对落在每一一个分段内的数值型数据赋予-一个新的统一的符号或数值。离散化是为了适应模型的需要,有助于消除异常数据,提高算法的效率。

(4)二值化

二值化指将数值型数据转换为0和1两个值,例如通过设定一个阈值,当特征的值大于该阈值时转换为1,当特征的值小于或等于该阈值时转换为0。二值化的目的在于简化数据,有些时候还可以消除数据(例如图像数据)中的“杂音”。

(5)哑编码

哑编码,又称为独热编码(One-Hot Encoding),作用是对特征进行量化。例如某个特征有三个类别:“大”“中”和“小”,要将这一特征用于模型中,必须将其数值化,很容易想到直接给它们编号为“1”“2”和“3”,但这种方式引入了额外的关系(例如数值间的大小关系),“误导”模型的优化方向。一个更好的方式就是使用哑编码,例如“大”对应编码“100”,“中”对应编码“010”,小”对应编码“001”。

2.4 特征工程

特征工程的目的是把原始的数据转换为模型可用的数据,主要包括三个子问题: 特征构造、特征提取和特征选择

特征构造 一般是在原有特征的基础上做“组合”操作,例如,对原有特征进行四则运算,从而得到新的特征。

特征提取 指使用映射或变换的方法将维数较高的原始特征转换为维数较低的新的特征。

特征选择 即从原始的特征中挑选出一些具有代表性、使模型效果更好的特征。

其中,特征提取和特征选择最为常用。

(1)特征提取

特征提取又叫作“降维”,目前线性特征的常用提取方法有 主成分分析(Principle C omponent Analysis,PCA)、线性判别分析(Linear Discriminant Analysis,LDA) 独立成分分析(Independent Component Analysis, ICA)

① 主成分分析

主成分分析是一种经典的无监督降维方法,主要思想是用“减少噪声”和“去冗余”来降维。具体来说:

“减少噪声” 指在将维数较高的原始特征转换为维数较低的新特征的过程中保留维度间相关性尽可能小的特征维度,这一操作实际上是借助协方差矩阵实现的;

●**“去冗余”**指把“减少噪声”操作之后保留下来的维度进行进一一步筛选,去掉含有“特征值”较小的维度,使得留下来的特征维度含有的“特征值”尽可能大,特征值越大,方差就会越大,进而所包含的信息量就会越大。

主成分分析完全无参数限制 ,也就是说,结果只与数据有关,而用户是无法进行干预的。这是它的优点,同时也是缺点。针对这一特点,Kernel-PCA 被提出,使得用户可以根据先验知识预先对数据进行非线性转换,因而成为当下流行的方法之一。

②线性判别分析

**线性判别分析是一种经典的 有监督降维算法 ,主要思想是借助协方差矩阵、广义瑞利熵等实现数据类别间距离的最大化和类别内距离的最小化。二分类线性判别分析中,二维特征是通过一系列矩阵运算实现从二维平面到一条直线的投影的,同时借助协方差矩阵、广义瑞利熵等实现类间数据的最大化与类内数据的最小化。从二分类推广到多分类,是通过在二分类的基础上增加“全局散度矩阵”来实现最终目标优化函数设定的,从而实现类间距离的最大化和类内距离的最小化。显然,由于它是针对各个类别做的降维,所以数据经过线性判别分析降维后,最多只能降到原来的类别数减1的维度。

因此, 线性判别分析除实现降维外,还可以实现分类 。另外,对比主成分分析可以看出,线性判别分析在降维过程中着重考虑分类性能,而主成分分析着重考虑特征维度之间的差异性与方差的大小,即信息量的大小。

③独立成分分析

独立成分分析的主要思想是 在降维的过程中保留相互独立的特征维度 。这比主成分分析更进-一步,在保证特征维度之间不相关的同时保证相互独立。不相关只是保证了特征维度之间没有线性关系,而并不能保证它们之间是独立的。

独立成分分析正因为以保证特征维度之间的相互独立为目标,往往会有比主成分分析更好的降维效果,目前已经被广泛应用于数据挖掘、图像处理等多个领域。

(2)特征选择

不同的特征对模型的影响程度不同,我们要选择出对模型影响大的特征,移除不太相关的特征,这个过程就是特征选择。特征选择的最终目的是 通过减少冗余特征来减少过拟合、提高模型准确度、减少训练时间 。特征选择是对原始特征取特征子集的操作,而特征提取则是对原始特征进行映射或者变换操作,以得到低维的新特征。

特征选择在特征工程中十分重要,往往可以在很大程度上决定模型训练结果的好坏。常用的特征选择方法包括 过滤式(Fil-ter)、包裹式(Wrapper) 及嵌入式(Embedding)

①过滤式

过滤式特征选择一般通过统计度量的方法来评估每个特征和结果的相关性,以对特征进行筛选,留下相关性较强的特征。其核心思想是: 先对数据集进行特征选择,再进行模型的训练 。过滤式特征选择是独立于算法的。正因此,过滤式特征选择拥有较高的通用性,可适用于大规模数据集;也正因此,过滤式特征选择在分类准确率.上的表现欠佳。常用的过滤式特征选择方法有Pearson相关系数法、方差选择法、假设检验、互信息法等,这些方法通常是单变量的。

(2)包裹式

包裹式特征选择通常 把最终机器学习模型的表现作为特征选择的重要依据,一步步筛选特征 。这一步步筛选特征的过程可以被看作目标特征组合的搜索过程,而这一搜索过程可应用最佳优先搜索、随机爬山算法等。目前比较常用的一-种包裹式特征选择法是递归特征消除法,其原理是使用一个基模型(如随机森林、逻辑回归等)进行多轮训练,每轮训练结束后,消除若干权值系数较低的特征,再基于新的特征集进行新的一轮训练。

由于包裹式特征选择是根据最终的模型表现来选择特征的,所以它通常比过滤式特征选择有更好的模型训练表现。但是,由于训练过程时间久,系统的开销也更大,一般来说, 包裹式特征选择不太适用于大规模数据集

③嵌入式

嵌入式特征选择同样 根据机器学习的算法、模型来分析特征的重要性,从而选择比较重要的N个特征 。与包裹式特征选择最大的不同是,嵌入式特征选择将特征选择过程与模型的训练过程结合为一体,这样就可以更高效且快速地找到最佳的特征集合。简而言之,嵌入式特征选择将全部的数据一起输入模型中进行训练和评测,而包裹式特征选择一般一步步地筛选和减少特征进而得到所需要的特征维度。常用的嵌入式特征选择方法有基于正则化项(如Lasso)和基于树模型的特征选择( 如GBDT).

2.5 模型性能的评估与选择

该节内容可以去看下面这篇博客:

三.深度学习的发展历程和应用

作为机器学习的一个重要分支,深度学习近年来在全球范围内都引起了广泛的关注。然而深度学习在火热之前已经经历了一段漫长的发展历程,接下来我们简单了解一下。

3.1 深度学习的发展历程

1.起源

1943年,心理学家麦卡.洛克和数学逻辑学家皮兹发表论文《神经活动中内在思想的逻辑演算》,在此论文中提出了 MP模型 。MP模型是模仿神经元的结构和工作原理,构造出的一个基于神经网络的数学模型,本质上是一种“模拟人类大脑”的神经元模型(这里有必要说明的是,我们说的“模拟”,更准确的说法其实应该是“参考”,计算机领域的“人工神经网络”的确受到了生物学上的“神经网络”的启发,但是两者相差万里,没有直接的可比性)。 MP模型作为人工神经网络的起源,开创了人工神经网络的新时代,也奠定了神经网络模型的基础。

1949年,加拿大著名心理学家唐纳德.赫布在《行为的组织》中提出了一种基于无监督学习的规则一一 海布学习规则(HebbRule) 。海布学习规则模仿人类认知世界的过程建立一种“网络模型”,该网络模型针对训练集进行大量的训练并提取训练集的统计特征,然后按照样本的相似程度进行分类,把相互之间联系密切的样本分为一类,这样就把样本分成了若干类。 海布学习规则与“条件反射”机理一致,为以后的神经网络学习算法奠定了基础,具有重大的历史意义。

20世纪50年代末,在MP模型和海布学习规则的研究基础上,美国科学家罗森.布拉特发现了一种类似于人类学习过程的学习算法一感知器学习,并于1957年正式提出了由两层神经元组成的神经网络,即 “感知器” 。感知器本质上是一种线性模型,可以对输入的训练集数据进行二分类,且能够在训练集中自动更新权值。 感知器的提出吸引了大量科学家研究人工神经网络,对神经网络的发展具有里程碑式的意义。

但随着研究的深入,人们发现了感知器模型甚至无法解决最简单的线性不可分问题(例如异或问题)。由于这一不足,再加上没有及时推进多层神经网络,20世纪70年代,人工神经网络进入第一个寒冬期,人工神经网络的发展也受到了很大的阻碍甚至质疑。

2.发展

1982年,著名物理学家约翰.霍普菲尔德发明了 Hopfield神经网络 。Hopfield神经网络是一种结 合存储系统和二元系统的循环神经网络。Hopfield网络也可以模拟人类的记忆,根据选取的激活函数不同,有连续型和离散型两种类型,分别用于优化计算和联想记忆。但该算法由于容易陷入局部最小值的缺陷而并未在当时引起很大的轰动。

直到1986年, 深度学习之父杰弗里 ,辛顿提出了一种适用于多层感知器的反向传播算法,即 BP算法 。BP算法在传统神经网络正向传播的基础上,增加了误差的反向传播过程,在反向传播过程中不断地调整神经元之间的权值和阈值,直到输出的误差减小到允许范围之内,或达到预先设定的训练次数为止。BP算法解决了非线性分类问题,让人工神经网络再次引起了人们广泛的关注。

但是20世纪80年代 计算机的硬件水平有限 ,运算能力跟不上,以及当神经网络的层数增加时,BP算法会出现“梯度消失“等问题,使得BP算法的发展受到了很大的限制。再加上20世纪90年代中期,以SVM为代表的浅层机器学习算法被提出,并在分类问题、回归问题上均取得了很好的效果,其原理相较于神经网络模型具有更好的可解释性,所以人工神经网络的发展再次进入了瓶颈期。

3.爆发

2006年,杰弗里辛顿及其学生鲁斯兰.萨拉赫丁诺夫 正式提出了深度学习的概念 。他们在世界顶级学术期刊Science发表的一篇文章中详细地给出了“梯度消失”问题的解决方案过无监督学习逐层训练算法,再使用有监督的反向传播算法进行调优。该方法的提出,立即在学术圈引起了巨大的反响,以斯坦福大学、多伦多大学为代表的众多世界知名高校纷纷投入巨大的人力、财力进行深度学习领域的相关研究,而后又迅速蔓延到工业界。

2012年,在著名的ImageNet图像识别大赛中,杰弗里.辛顿领导的小组以深度学习模型AlexNet一举夺冠。AlexNet采用ReLU激活函数,极大程度地解决了梯度消失问题,并采用GPU极大提高模型的运算速度。同年, 由斯坦福大学著名的吴恩达教授和世界顶尖计算机专家JeffDean共同主导的深度神经网络DNN技术在图像识别领域取得了惊人的成绩 ,在ImageNet评测中成功地把错误率从26%降低到了1 5%。深度学习技术在世界大赛的脱颖而出,再次进一步吸引了学术界和工业界对深度学习的关注。

随着深度学习技术的不断进步及计算机硬件算力的不断提升,2014年,Facebook基于深度学习技术的DeepFace项目,在人脸识别方面的准确率已经能达到97%以上,跟人类识别的准确率几乎没有差别。这样的结果也再一次证明了深度学习技术在图像识别方面的一骑绝尘。

2016年,谷歌公司基于深度强化学习开发的AlphaGo以4 : 1的比分战胜了国际顶尖围棋高手李世石,深度学习的热度一时无两。后来,AlphaGo 又接连和众多世界级围棋高手过招,均取得了完胜。这也证明了在围棋界,基于深度学习技术的机器人几乎已经超越了人类。

2017年,基于 深度强化学习技术的AlphaGo升级版Al-phaGo Zero横空出世 ,采用“从零开始”“无师自通”的学习模式,以100:0的比分轻而易举地打败了之前的AlphaGo。除了围棋,它还精通国际象棋等其他棋类游戏,可以说是真正的棋类“天才”此外在这一年,深度学习的相关技术也在医疗、金融、艺术、无人驾驶等多个领域均取得了显著的成果。所以,也有专家把2017年看成深度学习甚至是人工智能发展最为突飞猛进的一年。

深度学习发展到当前已经越来越趋于成熟,因此,无论是科研还是应用,大家也越来越理性,而不是像早些时候,把深度学习视为“万能”,去盲目跟风。当然,深度学习领域也还有许多问题需要解决,还有很多有趣、有挑战性的方向可以研究。

3.2 深度学习的应用

深度学习技术不光在学术界,在工业界也有重大突破和广泛应用,其中 自然语言处理、语音识别和图像处理应用最广泛 。接下来,我们分别来看一下这三个领域的发展现状。

1.自然语言处理

自然语言处理(NLP)是一门交叉科学,旨在让计算机能够“读懂”人类的语言。自然语言处理的基础研究包括分词、词性标注、实体识别、句法分析、语义分析以及文本向量化表示等,其应用领域有文档分类、信息检索、对话机器人、机器翻译、语音识别和合成等。传统的自然语言处理主要利用语言学领域本身的知识结合统计学的方法来获取语言知识。后来伴随着机器学习浅层模型的发展(如SVM、逻辑回归等),自然语言处理领域的研究取得了一定的突破,但在语义消歧、语言的理解等方面仍然得力不从心。近年来,深度学习相关技术(DNN、CNN、RNN等)取得了显著的进展,在自然语言处理方面的应用也展现出了明显的优势。

2.语音识别与合成

语音相关的处理其实也属于自然语言处理的范畴,目前主要是语音合成(Text to Speech, TTS)和语音识别(AutomatedSpeech Recognition, ASR)。语音识别应该是大家最为熟知的、也是应用最为广泛的。同自然语言处理类似,语音识别也是人工智能和其他学科的交叉领域,其所涉及的领域有模式识别、信号处理、概率论、信息论、发声原理等。近年来,随着深度学习技术的兴起,语音识别取得显著的进步,基于深度学习的语音技术不仅从实验室走向了市场,更得到了谷歌、微软、百度及科大讯飞等众多科技公司的青睐。语音输入法、家用聊天机器人、医疗语音救助机、智能语音穿戴设备等具体的应用场景层出不穷。

3.图像领域

事实上,图像领域目前算是深度学习应用最为成熟的领域。也正是由于深度学习算法在ImageNet图像识别大赛中远超其他机器学习算法,以巨大优势夺魁,才推动了深度学习发展的第三次浪潮。目前,通过卷积神经网络(CNN)构建的图像处理系统能够有效地减小过拟合、很好地识别大像素数图像。融合GPU加速技术后,神经网络在实际中能够更好地拟合训练数据,更快、更准确地识别大部分的图片。总而言之,深度学习模型和图像处理技术的完美结合,不仅能够提高图像识别的准确率,同时还可以在一-定程度上提高运行效率,减少一定的人力成本。

参考文章

  • 《TensorFlow从零开始学》
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/70983
 
435 次点击