机器学习-绪论
绪论
机器学习的定义
人可以通过经验学习,比方说“朝霞不出门,晚霞行千里”,就是通过经验得来的知识。获得知识后,即使在不同的地点,不同的时间,看到不同的霞,我们也能作出正确的判断。那么,机器是否也能学习并利用经验,从而对一些未出现过的情况,在不通过显式编程(人作出判断并告诉机器)的情况下也能作出正确的预测呢?答案是可以的,这就是机器学习。
对于机器来说,经验是通过数据传达的。机器学习的主要研究内容就是从数据中产生模型的算法,也即学习算法。Mitchell给出一个更为形式化的定义,假设我们用P来表示程序处理任务T时的性能,如果程序通过利用经验E提高了在任务T上的性能,则称该程序对E进行了学习。
在本书中,模型泛指所有从数据中学得的结果,在别的文献中,也有对模型和模式作出区分的,模型指学得的全局性结果(比如一棵决策树),模式指学得的局部性结果(比如一条规则)。
另一本经典教材的作者Mitchell给出了一个形式化的定义,假设:
- P:计算机程序在某任务类T上的性能。
- T:计算机程序希望实现的任务类。
- E:表示经验,即历史的数据集。
若该计算机程序通过利用经验E在任务T上获得了性能P的改善,则称该程序对E进行了学习。
基本概念
要进行机器学习,首先要有数据,我们可以收集一组结构相同的记录,这组记录的集合就称为数据集。比如下面这个西瓜数据集:
编号 | 色泽 | 根蒂 | 敲声 |
---|---|---|---|
001 | 青绿 | 蜷缩 | 浊响 |
002 | 乌黑 | 稍蜷 | 沉闷 |
003 | 浅白 | 硬挺 | 清脆 |
注:实际使用数据时往往需要先进行编码,即把文本改为数值(比如青绿=1,乌黑=2,等等),以便计算机进行处理。
接下来给出一些基本概念的定义:
示例(instance),样本(sample)
数据集中的每条记录是对一个事件或对象(比如这里的西瓜)的描述,也称作示例或者样本。特别地,有时会把整个数据集称为一个样本,因为数据集可以看作是从样本空间中抽样所得。这时候就需要根据上下文信息来进行判断了。
属性(attribute),特征(feature),属性值(attribute value)
对象具备一些性质,并由此可以进行区分,这些性质就称为属性或者特征,比方说表格中的色泽、根蒂和敲声。不同对象在这些属性上会有不同的取值,这个取值就称为属性值。
属性空间(attribute space),样本空间(sample space),输入空间,特征向量(feature vector)
由属性张成的空间,比方说上面的表格中有3个属性,那就可以张成一个3维空间,每个样本都可以用空间中的一个点来表示,这个点对应于一个坐标向量,所以有时也把一个样本称为一个特征向量。
维数(dimensionality)
即数据集中每个样本拥有的特征数目。
学习(learning),训练(training),训练样本(training sample),训练示例(training instance)
从数据中获的模型的过程。在这个过程中使用的数据称为训练数据,里面的每个样本称为一个训练样本,也称训练示例或训练例。训练样本的集合就是训练集。
模型(model),学习器(learner),假设(hypothesis),真相(ground-truth)
模型有时也称为学习器,可以看作一组参数的有序集合,能够把属性空间映射到输出空间上。每一个模型对应于一个假设,也即数据存在的某种规律。真相指的是真正存在的规律,学习就是为了接近真相。
如果我们希望通过机器学习来实现预测(prediction),那么只有样本是不够的,要让机器明白怎样的样本会产生怎样的结果,还需要为每个样本设置标记,标记有可能是离散值(分类任务),也可能是连续值(回归任务)。带标记的数据集如下:
编号 | 色泽 | 根蒂 | 敲声 | 标记 |
---|---|---|---|---|
001 | 青绿 | 蜷缩 | 浊响 | 好瓜 |
002 | 乌黑 | 稍蜷 | 沉闷 | 坏瓜 |
003 | 浅白 | 硬挺 | 清脆 | 坏瓜 |
标记(label),样例(example),标记空间(label space),输出空间
标记指示的是对象的类别或者事件的结果,样本和标记组合起来就是样例。所有标记的集合称为标记空间,也称为输出空间。
分类(classification),回归(regression),聚类(clustering)
根据预测值的不同,可以把任务分为几种不同的类别。若预测的是离散值,比如“好瓜”,“坏瓜”,则该任务称为分类任务;若预测的是连续值,比如瓜的重量,则该任务称为回归任务;还有一种聚类任务,旨在基于某种度量将样本分为若干个簇(cluster),使得同一簇内尽量相似,不同簇间尽量相异。聚类任务不需要对样本进行标记。
特别地,只涉及两种类别的分类任务称为二分类任务(binary classification),通常称一个类为正类(positive class),另一个类为反类或者负类(negative class)。涉及到多个类别的分类任务就称为多分类(multi-class classification)任务。
测试(testing),测试样本(testing sample),测试示例(testing instance)
训练完成后,使用模型预测新样本的标记这个过程称为测试。测试中使用到的样本称为测试样本,也称测试示例或测试例。
监督学习(supervised learning),无监督学习(unsupervised learning)
根据训练样本是否标记可以把任务分为两大类,需要标记的是监督学习,不需要标记的是无监督学习。前者的代表是回归和分类,后者的代表是聚类。
泛化(generalization)能力
让机器进行学习的目标并不仅仅是为了让模型能在训练数据上有好的表现,我们更希望模型在新的样本上也能有良好的表现。模型适用于新样本的能力就称为泛化能力,泛化能力好的模型能够更好地适用于整个样本空间。
独立同分布(independent and identically distributed)
一般来说,训练数据只占训练空间很少的一部分,当我们希望这一小部分的采样能够很好地反映整个样本空间的情况,从而令学得的模型具有良好的泛化能力。通常假设样本空间中的所有样本都服从于一个未知的分布(distribution),并且训练样本都是从该分布上独立采样所得,这就称为独立同分布。训练样本越多,越能反映该分布的特性,从而能学得泛化能力更强的模型。
假设空间
类似由样本构成的样本空间和由标记构成的标记空间,所有的假设共同构成了假设空间。学习的过程就可以看作是在假设空间中搜索最能匹配(fit)训练集的假设。
假设空间的规模有多大呢?举个例子,样本空间维度是3,也即每个样本由3个特征来表示。这三个属性可能的取值分别为3,2,2。那么假设空间的规模就是 4 × 3 × 3 + 1 = 37
,为什么呢?因为除了可能的取值之外,每个属性还有一种选择就是使用通配符*号表示,即无论取何值都可以。所以一个有3种可能取值的属性在排列组合时有4种情形。最后的加一表示的是 假设,它对应的是一种无论属性取何值都不可能达到目的的状况。比方说,前面的假设都是假设怎样的瓜会是好瓜,而假设则对应于好瓜根本不存在。
有时候会出现多个假设都能匹配训练集的情形,这些假设的集合就称为版本空间(version space)。版本空间是假设空间的子空间。
归纳偏好
对于学习算法来说,要产生一个模型就意味着要从版本空间中挑选出一个假设。但是版本空间中的假设都和训练集一致,无法直接分辨出哪一个更好,这时候归纳偏好,简称偏好就起作用了。
注意区分偏好和特征选择,前者是基于某种领域知识而产生的,后者则是基于对训练样本的分析进行的。
偏好指的是,在多个假设等效时,学习算法会认为某一种假设更优,并选择这种假设来建立最终的模型。如果一个学习算法没有偏好,比方说每次随机地从版本空间中选择一个假设,则它所给出的结果是时好时坏,自相矛盾的。所以任何一个有效的学习算法都应当有自己的归纳偏好。
怎样确定归纳偏好呢?一个常用的原则是奥卡姆剃刀(Occam’s razor),用一句话概述就是:若多个假设与观察一致,则选最简单的那个。注意,奥卡姆剃刀并不是唯一的准则,并且如何诠释“最简单”也是待考虑的。
给定基于某种归纳偏好的算法产生的模型A和基于另一种归纳偏好的算法产生的模型B,有时我们会注意到,A和B在不同的样本集上的表现各有好坏,有时候A的效果更好,有时候B的效果更好。甚至一个随机产生的模型都有可能在某个样本集上表现得优于我们精心设计的算法所产生的模型。怎样去定位这个问题呢?
书中使用NFL定理(No Free Lunch Theorem)来解答了这个问题,有一个关键点就是总误差与学习算法无关,证明在书上有,这里主要解析一下书中想要表达的思路。当我们考虑样本空间的所有可能分布,并认为它们都以相同的概率出现或同等重要时,无论使用什么模型,造成的总误差都是相同的,与学习算法无关!
但是!现实中并不是这样的,我们只考虑样本空间服从同一种分布的情形。打个比方,模型A是精心设计的算法产生的,模型B则简单地设定为把任何样本预测为负类。那么对于按照样本分布抽样所得的测试集,模型A效果会比B好;但是如果只抽取负类样本作为测试集,则模型B优于A。显然这种情况下模型B没有任何意义,因为我们根本就不care全是负类这种分布!
所以说,若考虑所有潜在的问题,则所有算法都一样好。要谈论算法的优劣,必须结合具体问题 !学习算法的归纳偏好和问题是否相配,往往起到决定性的作用。
其它
关于发展历程和应用状况,属于阅读材料,所以这里不作详细的笔记了。这个小节再补充一点其他内容。
归纳(induciotn)和演绎(deduction)是科学推理的两大基本手段,前者是从特殊到一般的泛化(generalization),后者是从一般到特殊的特化(specialization)。举个例子:
演绎
1 | 大前提:人都会死 |
演绎是一个层层递进的过程,条件A指出一个可能,条件B指出另一种可能,互相交叉,构成大小前提,一直往下,从而推出新的可能。数学公理系统中,新的定理就是通过一组公理的演绎得出的。
归纳
1 | 事件1:苏格拉底死了 |
归纳是从一组平等的事物中发现普遍规律/联系的过程。机器学习中从样例学习就属于归纳推理。
注:对于提到的人名,我很抱歉T.T
归纳学习
归纳学习有广义和狭义之分。广义上,只要是从样例中学习就都属于归纳学习;狭义上,不仅要从样例中学习,还要求学得概念(concept),因此也称为概念学习。概念学习技术目前应用和研究都比较少,因为要学得泛化性能好且语义明确的概念太难了。现在的技术大多都是产生黑箱模型,难以明白学得的是什么,只知道它确实有用。
简要带过以下归纳学习(广义)的几大主流技术,最早期的主流是符号主义学习,例如决策树,能直接模拟人类对概念进行判定的流程,有良好的解释性很强大的表示能力。但是表示能力太强也直接导致了假设空间太大,复杂度极高的缺陷。问题规模较大时难以进行有效的学习。
接下来发展的另一主流技术是连接主义学习,例如神经网络。与符号主义学习能产生明确的概念不同,连接主义产生的是“黑箱”模型。连接主义学习涉及到大量的参数设置,而参数设置缺乏理论指导,只能依靠手动调参,参数的设置是差之毫厘谬以千里,参数的一点点差别体现在结果上可能是极其巨大的。因此,试错性大大地限制了连接主义学习的发展。
再往后,统计学习技术就闪亮登场了,例如支持向量机。它与连接主义学习有密切的联系,但没有连接主义学习那么大的局限性。
而现在最火的深度学习技术,其实就属于连接主义学习技术,可以简单地理解为多层神经网络。深度学习的模型复杂度非常高,以至于使用者只要下功夫调参,性能往往就会很好。为什么深度学习会突然变得热门呢?有两大支持,一是数据支持,深度学习模型参数极多,如果数据不够,很容易会过拟合,但这是一个大数据时代,海量的数据允许我们构造出精准的模型;二是计算支持,随着计算机技术的发展,现代计算机具备了足够的计算海量数据的能力。
课程补充
K-NN简介
摘自 https://zhuanlan.zhihu.com/p/25994179
基本概念,原理以及应用
k近邻算法是一种基本分类和回归方法。本篇文章只讨论分类问题的k近邻法。
K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。(这就类似于现实生活中少数服从多数的思想)根据这个说法,咱们来看下引自维基百科上的一幅图:
如上图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。这也就是我们的目的,来了一个新的数据点,我要得到它的类别是什么?好的,下面我们根据k近邻的思想来给绿色圆点进行分类。
- 如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
- 如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。
从上面例子我们可以看出,k近邻的算法思想非常的简单,也非常的容易理解,那么我们是不是就到此结束了,该算法的原理我们也已经懂了,也知道怎么给新来的点如何进行归类,只要找到离它最近的k个实例,哪个类别最多即可
其实并没有这么简单,算法的核心思想确实是这样,但是要想一个算法在实际应用中起作用,还有很多问题需要考虑。比如k怎么确定的,k为多少效果最好呢?所谓的最近邻又是如何来判断给定呢?
k近邻算法中k的选取以及特征归一化的重要性
选取k值以及它的影响
k近邻的k值我们应该怎么选取呢?
如果我们选取较小的k值,那么就会意味着我们的整体模型会变得复杂,容易发生过拟合
假设我们选取k=1这个极端情况,怎么就使得模型变得复杂,又容易过拟合了呢?
假设我们有训练数据和待分类点如下图
上图中有俩类,一个是黑色的圆点,一个是蓝色的长方形,现在我们的待分类点是红色的五边形
好,根据我们的k近邻算法步骤来决定待分类点应该归为哪一类。我们由图中可以得到,很容易我们能够看出来五边形离黑色的圆点最近,k又等于1,那太好了,我们最终判定待分类点是黑色的圆点。
由这个处理过程我们很容易能够感觉出问题了,如果k太小了,比如等于1,那么模型就太复杂了,我们很容易学习到噪声,也就非常容易判定为噪声类别,而在上图,如果,k大一点,k等于8,把长方形都包括进来,我们很容易得到我们正确的分类应该是蓝色的长方形!如下图:
所谓的过拟合就是在训练集上准确率非常高,而在测试集上准确率低,经过上例,我们可以得到k太小会导致过拟合,很容易将一些噪声(如上图离五边形很近的黑色圆点)学习到模型中,而忽略了数据真实的分布
如果我们选取较大的k值,就相当于用较大邻域中的训练数据进行预测,这时与输入实例较远的(不相似)训练实例也会对预测起作用,使预测发生错误,k值的增大意味着整体模型变得简单
k值增大怎么就意味着模型变得简单了,不要急,我会解释的!哈哈。
我们想,如果k=N(N为训练样本的个数),那么无论输入实例是什么,都将简单地预测它属于在训练实例中最多的类。这时,模型是不是非常简单,这相当于你压根就没有训练模型呀。直接拿训练数据统计了一下各个数据的类别,找最大的而已!这好像下图所示:
我们统计了黑色圆形是8个,长方形个数是7个,那么哈哈,如果k=N,我就得出结论了,红色五边形是属于黑色圆形的(明显是错误的)
这个时候,模型过于简单,完全忽略训练数据实例中的大量有用信息,是不可取的
恩,k值既不能过大,也不能过小,在我举的这个例子中,我们k值的选择,在下图红色圆边界之间这个范围是最好的,如下图
那么我们一般怎么选取呢?李航博士书上讲到,我们一般选取一个较小的数值,通常采取 交叉验证法来选取最优的k值。(也就是说,选取k值很重要的关键是实验调参,类似于神经网络选取多少层这种,通过调整超参数来得到一个较好的结果)
距离的度量
在上文中说到,k近邻算法是在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,我们就说预测点属于哪个类。
定义中所说的最邻近是如何度量呢?我们怎么知道谁跟测试点最邻近。这里就会引出我们几种度量俩个点之间距离的标准。
我们可以有以下几种度量方式:
其中当p=2的时候,就是我们最常见的欧式距离,我们也一般都用欧式距离来衡量我们高维空间中俩点的距离。在实际应用中,距离函数的选择应该根据数据的特性和分析的需要而定,一般选取p=2欧式距离表示。
特征归一化的必要性
首先举例如下,我用一个人身高(cm)与脚码(尺码)大小来作为特征值,类别为男性或者女性。我们现在如果有5个训练样本,分布如下:
A [(179,42),男] B [(178,43),男] C [(165,36)女] D [(177,42),男] E [(160,35),女]
通过上述训练样本,我们看出问题了吗?
很容易看到第一维身高特征是第二维脚码特征的4倍左右,那么在进行距离度量的时候,我们就会偏向于第一维特征。这样造成俩个特征并不是等价重要的,最终可能会导致距离计算错误,从而导致预测错误。
我们应该让每个特征都是同等重要的!这也是我们要归一化的原因!归一化公式如下:
决策树
暑期学过决策树,参见 https://www.zwn-blog.xyz/2022/07/27/暑期机器学习引论/#决策树
SVM
网上看了PageRank最高的博客,感觉相当深刻,放在这里反而不合适,于是摘抄了一份放在文末,希望有一天我也能完全吃透。
学习范式
Focus on ideas rather than detailed algorithms
集成学习
传统机器学习算法 (例如:决策树,人工神经网络,支持向量机,朴素贝叶斯等) 的目标都是寻找一个最优分类器尽可能的将训练数据分开。集成学习 (Ensemble Learning) 算法的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话:三个臭皮匠,赛过诸葛亮。
Thomas G. Dietterich 指出了集成算法在统计,计算和表示上的有效原因:
- 统计上的原因
一个学习算法可以理解为在一个假设空间 中选找到一个最好的假设。但是,当训练样本的数据量小到不够用来精确的学习到目标假设时,学习算法可以找到很多满足训练样本的分类器。所以,学习算法选择任何一个分类器都会面临一定错误分类的风险,因此将多个假设集成起来可以降低选择错误分类器的风险。
- 计算上的原因
很多学习算法在进行最优化搜索时很有可能陷入局部最优的错误中,因此对于学习算法而言很难得到一个全局最优的假设。事实上人工神经网络和决策树已经被证实为是一 个NP 问题。集成算法可以从多个起始点进行局部搜索,从而分散陷入局部最优的风险。
- 表示上的原因
在多数应用场景中,假设空间 中的任意一个假设都无法表示 (或近似表示) 真正的分类函数 。因此,对于不同的假设条件,通过加权的形式可以扩大假设空间,从而学习算法可以在一个无法表示或近似表示真正分类函数 的假设空间中找到一个逼近函数 的近似值。
目前,有三种常见的集成学习框架:bagging,boosting和stacking(上课只提到了前两个)。国内,南京大学的周志华教授对集成学习有很深入的研究,其在09年发表的一篇概述性论文《Ensemble Learning》对这三种集成学习框架有了明确的定义,概括如下:
bagging:从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果:
boosting:训练过程为阶梯状,基模型按次序一一进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次都进行一定的转化。对所有基模型预测的结果进行线性综合产生最终的预测结果:
stacking:将训练好的所有基模型对训练基进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测:
有了这些基本概念之后,直觉将告诉我们,由于不再是单一的模型进行预测,所以模型有了“集思广益”的能力,也就不容易产生过拟合现象。
Bagging
Bagging 的核心思路是——民主。
Bagging 的思路是所有基础模型都一致对待,每个基础模型手里都只有一票。然后使用民主投票的方式得到最终的结果。
大部分情况下,经过 bagging 得到的结果方差(variance)更小。
具体过程:
- 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
- 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
- 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
举例:
在 bagging 的方法中,最广为熟知的就是随机森林了:bagging + 决策树 = 随机森林
《一文看懂随机森林(4个步骤+4种方式评测+10个优缺点)》
Boosting
Boosting 的核心思路是——挑选精英。
Boosting 和 bagging 最本质的差别在于他对基础模型不是一致对待的,而是经过不停的考验和筛选来挑选出“精英”,然后给精英更多的投票权,表现不好的基础模型则给较少的投票权,然后综合所有人的投票得到最终结果。
大部分情况下,经过 boosting 得到的结果偏差(bias)更小。
具体过程:
- 通过加法模型将基础模型进行线性的组合。
- 每一轮训练都提升那些错误率小的基础模型权重,同时减小错误率高的模型权重。
- 在每一轮改变训练数据的权值或概率分布,通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
举例:
在 boosting 的方法中,比较主流的有 Adaboost 和 Gradient boosting 。
Bagging 和 Boosting 的4 点差别
样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
差别部分内容转自《Bagging和Boosting 概念及区别》
深度学习
深度学习是一个数学问题
机器学习和数学,是深度学习的一体两面。机器学习是深度学习的方法论,数学是其背后的理论支撑。
其实每一种算法,究其根本,都是一种数学表达。无论是机器学习,还是深度学习,都是试图找到一个函数,这个函数可以简单,可以复杂,函数的表达并不重要,只是一个工具,重要的是这个函数能够尽可能准确的拟合出输入数据和输出结果间的关系。
这就是机器学习要做到的事,找到一个数学表达,即上述例子中的函数f。
而深度学习的魅力在于,它的数学表达特别的强!
深度学习的强大是有数学原理支撑的,这个原理叫做“万能近似定理”(Universal approximation theorem)。这个定理的道理很简单 —— 神经网络可以拟合任何函数,不管这个函数的表达是多么的复杂。
因为这个定理,深度学习在拟合函数这一方面的能力十分强大、暴力和神秘。
但是,哪有免费的午餐,深度学习的强大也带来了对应的问题 —— 黑箱化
黑箱的意思是,深度学习的中间过程不可知,深度学习产生的结果不可控。
一方面,我们比较难知道网络具体在做些什么;另一方面,我们很难解释神经网络在解决问题的时候,为什么要这么做,为什么有效果。
在传统的机器学习中,算法的结构大多充满了逻辑,这种结构可以被人分析,最终抽象为某种流程图或者一个代数上的公式,最典型的比如决策树,具有非常高的可解释性。
到了深度学习,这样子的直观就不见了。简单来说,深度学习的工作原理,是通过一层层神经网络,使得输入的信息在经过每一层时,都做一个数学拟合,这样每一层都提供了一个函数。因为深度学习有好多层,通过这每一层的函数的叠加,深度学习网络的输出就无限逼近目标输出了。这样一种“万能近似”,很多时候是输入和输出在数值上的一种耦合,而不是真的找到了一种代数上的表达式。当我们在说”拟合“、”函数“这一类词的时候,你或许认为我们会像写公式一样把输入和输出之间的关系列在黑板上。但事实并不是这样,深度学习拟合出来的函数,一般人还真写不出来……
所以,很多时候,你的深度学习网络能很好的完成你的任务,可是你并不知道网络学习到了什么,也不知道网络为什么做出了特定的选择。知其然而不知其所以然,这可以看作是深度学习的常态,也是深度学习工作中的一大挑战。
先拿一个最简单的例子来说:一个系统的输入是 ,输出为 ,我们知道 ,以此类推。我们很容易就得出 与 之间的映射关系,即 是两倍的 ( )。
这里的两倍,就是输入和输出之间的映射关系。当我们知道了这种映射关系之后,我随便给出一个输入 (比如1203),都能得到输出 (2406)。
这个例子比较简单,我们一眼就能看出输入和输出之间的关系,当 为图片、声音、股市交易单、人口与房价等等复杂的输入时,如何计算出想要的输出 呢?
这时候就很明确了,从输入推理出输出的关键就在于,获取输入和输出之间的映射关系,我们将输入和输出之间的映射关系定义成一个函数 ,这里的 就是输出, 是输入。
关键就在于,怎么求解这个 呢?这时候就要祭出神经网络了,它的作用就是通过调整参数 来求解输入输出之间的映射关系 。
从理论上来讲,神经网络通过调整各层的参数 ,可以拟合任意复杂度的函数(这一部分不展开了,感兴趣的可以去学习相关内容)。我们先喂给神经网络一定量的输入输出数据,通过一次次的训练,让网络学习到当前输入输出数据之间的映射关系。那么如果未知的输入 与训练神经网络的输入服从同分布的话,将这个未知输入 送入神经网络中就能够映射出一个输出 。
神经网络就get到预测的能力了!
可是这种映射的结果一定是准确的吗,比如我输入一张猫咪的图像进入识别动物的神经网络,我想要的输出结果是:这是一只猫咪。但神经网络给出的输出有可能是:这是一只狗狗
这意味着,神经网络学习到的输入和输出之间的映射关系,不一定是准确的!
那么什么样的神经网络能够更加准确的学习到输入和输出之间的映射关系呢?答案是更深的神经网络。
原来把网络层数加深就好了!
可是神经网络采取下图这种全连接的连接方式,即每层中的任意个神经元都与下一层的全部神经元相连接,然后每个连接之间都有一组参数 ,这种全连接形式带来的参数量是极其巨大的,导致的计算量是不可接受的。
那么是不是换成大算力的计算设备就可以了呢?答案是否定的。
参数量巨大只是其中的一个问题,还有一个问题是,过于深的神经网络在求解过程中很容易陷入局部最优解,而非全局最优解。这成为了阻碍深度神经网络发展的主要因素。
直到 2006 年,深度学习界的大牛,Hinton 教授发表的论文中提出了两个重要观点:(1)多层的神经网络具有优秀的特征学习能力,能够学习到数据更本质的特征;(2)可通过逐层预训练的方式解决深度神经网络难以获得全局最优解的问题。
半监督学习
目前知道最科学的定义是来自《Introduction to Semi-supervised Learning》,这里只给出一个自我感觉良好的说法,大概就是,在有标签数据+无标签数据混合成的训练数据中使用的机器学习算法吧。一般假设,无标签数据比有标签数据多,甚至多得多。
虽然训练数据中含有大量无标签数据,但其实在很多半监督学习算法中用的训练数据还有挺多要求的,一般默认的有:无标签数据一般是有标签数据中的某一个类别的(不要不属于的,也不要属于多个类别的);有标签数据的标签应该都是对的;无标签数据一般是类别平衡的(即每一类的样本数差不多);无标签数据的分布应该和有标签的相同或类似 等等。
事实上,某些要求在实际应用中挺强人所难的,所以明明感觉半监督好像很厉害,但应用就是不多啊。但在学术上,这些要求还是可以有滴。
一般,半监督学习算法可分为:self-training(自训练算法)、Graph-based Semi-supervised Learning(基于图的半监督算法)、Semi-supervised supported vector machine(半监督支持向量机,S3VM)。简单介绍如下:
1.简单自训练(simple self-training):用有标签数据训练一个分类器,然后用这个分类器对无标签数据进行分类,这样就会产生伪标签(pseudo label)或软标签(soft label),挑选你认为分类正确的无标签样本(此处应该有一个挑选准则),把选出来的无标签样本用来训练分类器。
2.协同训练(co-training):其实也是 self-training 的一种,但其思想是好的。假设每个数据可以从不同的角度(view)进行分类,不同角度可以训练出不同的分类器,然后用这些从不同角度训练出来的分类器对无标签样本进行分类,再选出认为可信的无标签样本加入训练集中。由于这些分类器从不同角度训练出来的,可以形成一种互补,而提高分类精度;就如同从不同角度可以更好地理解事物一样。
3.半监督字典学习:其实也是 self-training 的一种,先是用有标签数据作为字典,对无标签数据进行分类,挑选出你认为分类正确的无标签样本,加入字典中(此时的字典就变成了半监督字典了)
4.标签传播算法(Label Propagation Algorithm):是一种基于图的半监督算法,通过构造图结构(数据点为顶点,点之间的相似性为边)来寻找训练数据中有标签数据和无标签数据的关系。是的,只是训练数据中,这是一种直推式的半监督算法,即只对训练集中的无标签数据进行分类,这其实感觉很像一个有监督分类算法…,但其实并不是,因为其标签传播的过程,会流经无标签数据,即有些无标签数据的标签的信息,是从另一些无标签数据中流过来的,这就用到了无标签数据之间的联系
5.半监督支持向量机:监督支持向量机是利用了结构风险最小化来分类的,半监督支持向量机还用上了无标签数据的空间分布信息,即决策超平面应该与无标签数据的分布一致(应该经过无标签数据密度低的地方)(这其实是一种假设,不满足的话这种无标签数据的空间分布信息会误导决策超平面,导致性能比只用有标签数据时还差)
其实,半监督学习的方法大都建立在对数据的某种假设上,只有满足这些假设,半监督算法才能有性能的保证,这也是限制了半监督学习应用的一大障碍。
参考
https://zhuanlan.zhihu.com/p/134089340
https://github.com/Vay-keen/Machine-learning-learning-notes
https://github.com/familyld/Machine_Learning
https://zhuanlan.zhihu.com/p/25994179
https://leovan.me/cn/2018/12/ensemble-learning/
https://easyai.tech/ai-definition/ensemble-learning/
https://zhuanlan.zhihu.com/p/72415675
https://www.zhihu.com/question/63492375
https://www.zhihu.com/question/27068705
https://www.zhihu.com/question/19725590/answer/241988854
https://tangshusen.me/2018/10/27/SVM/
https://www.joinquant.com/view/community/detail/a98b7021e7391c62f6369207242700b2
https://zhuanlan.zhihu.com/p/79531731
https://blog.csdn.net/zc02051126/article/details/49618633
https://zhuanlan.zhihu.com/p/127022333
https://0809zheng.github.io/2020/03/30/ridge.html
https://www.cnblogs.com/wuliytTaotao/p/10837533.html
https://link.springer.com/referenceworkentry/10.1007/978-1-4899-7687-1_910#Sec13186
http://palm.seu.edu.cn/zhangml/files/mla11-mll.pdf
https://blog.csdn.net/zwqjoy/article/details/80431496
https://ryuchen.club/posts/0x000034/ (推荐)
https://zhuanlan.zhihu.com/p/78798251
https://zhuanlan.zhihu.com/p/622244758
https://www.biaodianfu.com/hierarchical-clustering.html
https://zhuanlan.zhihu.com/p/411533418
https://zhuanlan.zhihu.com/p/33196506
https://www.cnblogs.com/wry789/p/13125658.html
https://blog.csdn.net/qq_41485273/article/details/113178117
https://www.jianshu.com/p/7d4323c28716
http://lunarnai.cn/2019/01/02/watermelon-chap-13/
https://zhuanlan.zhihu.com/p/411533418
https://www.huaxiaozhuan.com/统计学习/chapters/12_semi_supervised.html
https://blog.csdn.net/tyh70537/article/details/80244490
https://zhuanlan.zhihu.com/p/37747650
https://blog.csdn.net/qq_40722827/article/details/104515955
https://www.cnblogs.com/dyl222/p/11055756.html
https://www.zhihu.com/tardis/zm/art/392908965
https://blog.csdn.net/j123kaishichufa/article/details/7679682
https://www.cnblogs.com/heaad/archive/2011/01/02/1924088.html
https://www.cnblogs.com/stevenlk/p/6543628.html
等等