《神经网络与深度学习》
人工智能是计算机科学的一个分支,于1956年在达特茅斯会议上被提出,主要研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统等。简单来说,人工智能研究人类智能,并尝试用人工方法复现人类智能。
人工智能就是要让机器的行为看起来就像是人所表现出的智能行为一样。
——John McCarthy(1927-2011)
一个人在不接触对方的情况下,通过一种特殊的方式,和对方进行一系列的问答。如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么就可以认为这个计算机是智能的。
——图灵测试
1.感知:模拟人的感知能力,语音信息处理、计算机视觉
2.学习:模拟人的学习能力,监督学习、无监督学习、强化学习等。
3.认知:模拟人的认知能力,知识表示、自然语言处理、推理、规划、决策。
1.推理期(1956-60年代末):基于逻辑和事实规则,出现了几何定理证明器、语言翻译器等。
2.知识期(70年代初-80年代中期):意识到知识对于人工智能系统的重要性,构建专家知识库,出现专家系统
3.学习期(90年代至今):让计算机自动从数据中分析并获取规律,然后进行预测,出现机器学习(machine learning),伴随着计算机运算能力的提高,神经网络重新兴起,并促进了深度学习的发展
1.符号主义:用符号抽象世界中的事物,用逻辑抽象世界中的规则。
2.连接主义:模拟人类大脑神经网络
3.行为主义:控制论,模拟人的行为模式:感知-动作
机器学习是人工智能的一个分支,致力于从有限的观测数据中学习出一般性的规律,并在未来进行预测。
浅层学习不涉及特征学习,机器学习的特征主要通过人工方法或者特征转换来抽取。特征处理是机器学习中的重点工作,对模型输入的特征的优劣直接影响模型的性能,因此很多机器学习问题演变成了特征工程(特征工程需要人类智能)。
1.数据预处理:去除噪声
2.特征提取:从原始数据中提取有效特征
3.特征转换:对特征升维和降维,降维的方式主要有特征抽取(Feature Extration)和特征选择(Feature Selection)。特征选择和特征抽取有着些许的相似点,这两者达到的效果是一样的,就是试图去减少特征数据集中的属性(或者称为特征)的数目;但是两者所采用的方式方法却不同:特征抽取的方法主要是通过属性间的关系,如组合不同的属性得新的属性,这样就改变了原来的特征空间;而特征选择的方法是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间。特征抽取的方法主要包括主成分分析(PCA)和线性判别分析(LDA),特征选择的方法有Filter方法、Wrapper方法、Embedded方法。
4.预测:学习一个函数(分类、回归)
表示学习是机器学习过程中针对数据特征的一种技术手段。为了提高机器学习的准确率,就需要获取数据更有效地特征,如果使用人工进行抽取,工作量太大。如果有一种算法能够自动的学习出有效的特征,并最终提高机器学习模型的性能,这种学习就被称作表示学习。
表示学习的关键是解决语义鸿沟,在某种程度上反应数据的高层语义信息。语义鸿沟是指底层特征(原始数据特征)和高层语义信息差别大。比如两个汽车的图片像素数据差别很大而在语义信息上却是相似的。
1)应该具有很强的表示能力,相同长度的向量表示更多的信息
2)使后续的学习任务变得简单,即表示出更高层的语义信息
3)具有一般性,能够迁移到其他的任务上
1)局部表示
以表示颜色为例,对人类来说,有多少种不同的颜色就可以有多少种不同的符号来表示,比如天蓝色、海蓝色、咖啡色、土黄色...但是计算机识别不了符号,因此就用向量来表示,比如目前已知的颜色有1000种,则计算机就用一个1000维的向量来表示颜色,向量的每一个分量都代表不同的颜色,对于每一个颜色,其对应的向量中只有一个分量为1,其余均为0。一旦出现一种新的颜色,向量的维度就要加1。
局部表示在特征空间中的体现:所有的数据对象都是不同坐标轴上的点。
2)分布式表示
分布式表示选择数据对象共有的特征组成特征向量,并根据数据对象是否具有某个特征来判断该对象的类型。比如颜色共有的特征是RGB,因此分布式表示方法表示颜色仅需要一个3维向量即可表示出所有的颜色。
分布式表示在特征空间中的体现:低维空间中分散的点
|
局部表示 |
分布式表示 |
A |
[1 0 0 0] |
[0.25 0.5] |
B |
[0 1 0 0] |
[0.2 0.9] |
C |
[0 0 1 0] |
[0.8 0.2] |
D |
[0 0 0 1] |
[0.9 0.1] |
局部表示可解释性强,但是维度太高并且无法计算数据对象之间的相似度。局部表示可以通过神经网络转化为分布
传统的特征转换,如PCA、LDA等方法一般是使用人为设计的规则,并且特征学习和最终的模型的学习是分开的,因此学习到的特征并不一定能提升模型的性能。
深度学习是表示学习的学习过程加上预测过程。深度指的是学习特征要分为多步,如先学习底层特征,再学习中层特征、再学习高层特征。学习指的是表示学习的过程。
人工神经网络是深度学习的工具,用于解决深度学习中贡献度分配的问题(选择更有效地特征)。具体方法有梯度下降+反向传播算法。
传统的机器学习往往将任务分解为多个子模块,分别独立的进行优化。各个子模块的优化目标不能和总体目标保持一致,因此效果差。而端到端的学习不必拆分子模块,整个学习过程也无须人工干预,只需要将(输入-输出)数据对输入到神经网络中,即可自行学习。
选定的待识别目标的特征,如预测芒果的甜度时,选取芒果的大小、产地、品种、颜色作为特征。
挑选10000个芒果作为训练数据,标注每个芒果的特征值以及测得的甜度,甜度就是每个芒果的标签,但是标签值可以是连续的也可以是不连续的,如预测芒果是好果还是坏果时,标签值就是二值的(0或1)。
一个芒果就是一个样本,样本 = 特征值+标签值 : {},一个样本可看作二维数组
机器学习就是要从已知的历史数据中学习到固有的规律,从而进行预测。但是在大数据时代,历史数据太过庞大。如果使用全部的数据进行学习,效率太低。因此就要在原有数据的基础上进行采样,用更少的数据,即采样数据,代表总体。我们假设采样得到的数据全部都是独立同分布的。同分布是指样本数据满足一个隐含的分布,这个隐含的分布虽然是未知的,但却是真实存在的,即全体历史数据满足的分布。独立是指,样本之间是相互独立的,样本1对样本2不会产生影响。满足了独立同分布以后,便可以用样本数据代替总体数据进行学习。
所有的样本放在一起就是数据集,一个数据集可以看成三维数组
训练集用于训练模型,测试集用于测试学习到的模型
对于一个学习任务,我们首先要确定其输入空间和输出空间,输入空间就是特征向量的长度,输出空间就是标签的取值范围,可以是离散的也可以是连续的。确定了输入输出空间以后,我们基本就可以学习输入和输出之间的特定联系了,这种联系可以是一个映射函数y=g(x)或者是一个概率分布 p(y|x) 。假设现在要学习的参数是映射函数y=g(x),我们并不能确定这个函数具体多少,但是我们可以假设它的类型(线性or非线性,多项式or三角函数),并在学习过程中不断地优化参数,使其能够接近真实的映射函数。例如要预测曼哈顿楼价和位置、楼层、面积之间的关系,我们可以假设它们之间的关系是,根据的不同取值可以得到无穷多个函数,这些函数同属于一个函数族,这个函数族就构成了我们的假设空间,而形成这个假设空间的模板函数就是模型.
常见假设空间分为线性假设空间和非线性假设空间,对应的模型分别是线性模型和非线性模型。
线性模型:,为向量
非线性模型:,为函数向量,如果本身为可学习的基函数,即将看作模型,能由其他的基函数生成(可套娃),则可看作神经网络模型。
学习准则 = 调整参数的原则,预测函数通过学习准则不断地调整参数,使得整个预测函数不断地向真实函数拟合。
A.损失函数
损失函数用于计算预测值和真实值之间的误差,常见的有0-1损失函数、平方损失函数、绝对损失函数、对数损失函数。
通过损失函数我们只能知道预测函数f(X)对于单个样本点的预测能力(借用损失函数L(Y,f(x)),损失函数越小,说明模型对于该样本预测越准确),但是无法得知预测函数在整个训练集上的表现。这就引入了经验风险的概念。
B.经验风险
经验风险就是把训练集中的所有样本的损失函数值加起来再除以样本总数。
但是如果模型按照经验风险进行计算的话,训练出的模型只能是在训练集上有较好的表现,再其他数据上的表现可能不好,因此就引出期望风险。
C.期望风险
计算预测函数对所有样本点的损失函数值的期望,但是不现实。P(x,y)是联合概率分布。
D.结构风险
既然期望风险无法计算,因此只能用经验风险代替期望风险,即用局部最优代替全局最优,当训练数据集无限大时,经验风险也就无限接近期望风险,但是由于训练数据集在实际中只是总体数据的一个子集,因此训练集并不能完美的反映总体数据,再训练集上将经验风险最小化就容易出现过拟合的问题,即在训练集上表现很好,而在测试集上表现很差。为了避免过拟合,就引入了结构风险。结构风险用于对参数个数进行限制,及减小参数空间。以学习多项式函数为例,变量个数越多(等都看作是不同的变量,而不是同一变量的不同次幂),函数越复杂,就越容易过拟合。是的L2范数,也是参数空间的大小。
L1范数和L2范数的正则化:
与L2相比,L1的鲁棒性更好。因为L2范数将误差平方化(如果误差大于1,则误差会放大很多),模型的误差会比L1范数大的多,因此模型会对这个样本更加敏感,这就需要调整模型来最小化误差。如果这个样本是一个异常值,模型就需要调整以适应单个的异常值,这会牺牲许多其它正常的样本,因为这些正常样本的误差比这单个的异常值的误差小。
L1正则常被用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解(好多参数为0).
L2主要用来防止模型过拟合,直观上理解就是L2正则化是对于大数值的权重向量进行严厉惩罚。