机器学习基础概论

本文将是一篇长文,是关于机器学习相关内容的一个总体叙述,会总结之前三个例子中的一些关键问题,读完此文将对机器学习有一个更加深刻和全面的认识,那么让我们开始吧。

我们前面三篇文章分别介绍了 二分类问题多分类问题标量回归问题,这三类问题都是要将输入数据与目标结果之间建立联系。同时,这三类问题都属于监督学习的范畴,监督学习是机器学习的一个分支,还包括三个其他的主要分支:无监督学习、自监督学习 和 强化学习。

监督学习

这是目前最常见的机器学习类型,除了上面提到的分类和回归问题,还包括一些其他的类别,包括如下几点:

  1. 语法树预测:对于句子分析其生成的语法树;
  2. 目标检测:在图片中对目标对象画一个边界框;
  3. 序列生成:给定一张图片,预测描述图片的文字;
  4. 图像分割:给定一张图片,在特定目标上找到一个遮罩。

无监督学习

无监督学习通常包括降维和聚类两种方式,目的是对一些初始数据进行无目的的处理或训练,将数据进行可视化、压缩或去噪等,以便更好的理解数据的内在联系等,往往是监督学习的前置步骤。

自监督学习

这是一种特殊的监督学习方法,监督学习的标签是人工手动标注,自监督学习的标签是由输入数据经由 启发式算法 自动生成的。比如 Google 邮件中的的自动联想,输入前一个单词自动预测后一个单词,给出视频过去的帧,去预测后一帧等,都是没有标注经过大量数据学习出来的。

强化学习

强化学习现阶段几乎都用在了游戏方面,比如下围棋,一个智能系统通过反馈,会学习使其某种奖励最大化的方法,如围棋中围出面积最大的区域等。

接下来,我们思考一下究竟我们把一个网络训练成什么样算是一个好的网络呢?用专业点的术语就是说如何评估机器学习的模型。查看我们之前的示例,都是最后用一个测试集去测试一次,看最终的效果怎么样来评估网络的好坏,这是没有问题的,我们同意这一点,但问题是我们为什么在训练的过程中,把数据分为了训练集和验证集,用验证集去提供反馈调整网络的参数,而不是说用训练集去训练网络,然后用测试集去验证,这就不需要验证集了。

原因是假如我们把数据分为了训练集和测试集,没有验证集,我们用训练数据训练网络,测试集提供反馈,这就会把测试集的信息泄露给训练网络,虽然没有用测试集去训练网络,网络没有直接从测试集获取信息,但是泄露了数据的特征,就会导致网络会向测试集的数据去倾斜,最终会导致过拟合,因此如果判断网络的好坏,必须要用从来没有给网络提供任何信息的数据进行一次测试,这样的结论才是可靠的。

现在,我们都同意了整体数据集一定要分为 训练集,验证集 和 测试集 三个部分,但这三个部分集合的数据怎样去划分呢?测试集是单独的一部分数据,这一部分是独立的,这是我们上面论证的观点。那整体数据除去了测试集,剩下的数据我们如何去划分训练集和验证集呢?如果数据量较大,我们可以简单的把数据分为两部分,较大的一份训练数据和较小的一份验证数据,因为数据量足够大,因此各种特征信息均匀分布,这样就可以满足条件了。

那数据量较小呢?由于数据量较小,训练集上不管如何划分,都会导致数据的特征划分不均匀,自然也会导致训练出的网络有较大的偏差,由于这个原因,我们就需要用到前面文章提到的 K 折验证的方法。

在这一种方法中,我们将这部分数据,分成了 K 份,每次把 K 份中的一份当做验证集,其余的 K-1 份数据当做训练集,进行 K 次训练,然后计算平均值,这种方法会尽可能弥补数据量不足的缺陷,当然代价就是会进行更多次的训练,更多的运算,更长的时间。如果这样数据量或精度仍然不能满足要求,我们甚至会进行打乱的数据多次 K 折训练:将数据随机重新排序--K 折训练--再次打乱数据--再次 K 折计算,代价也更大,这就需要根据实际情况进行选择了。

我们需要注意,对于数据集,我们要注意三个问题:第一,数据要有代表性要随机,测试集包含的数据特征在训练集中应该包含,不能是两位数的手写数字测试集和一位数的手写数字训练集,这没有办法得到正确的结论;第二,如果数据集是有序的,如股票的价格走势,就不能随意将数据打乱去进行训练;第三,如果训练集和验证集如果有交集,会导致训练出的网络不准确,需要注意。

数据的预处理

在将数据输入网络进行训练前,数据的预处理是另外一个需要解决的问题。这里有三种方法进行数据的预处理。如下分别进行说明:

向量化

由于训练网络只能处理浮点数的张量,因此对于类似于文本类的数据,都需要通过 one-hot 编码将其转化为张量。

值标准化

如果数据的各维度数据取值范围相差较大,需要将其进行值标准化,避免导致网络无法收敛或偏差较大等问题。

处理缺失值

网络无法判断 0 或者是某项数据缺失,因此如果数据缺失时,需要进行处理。

过拟合与欠拟合

我们多次提到过过拟合了,欠拟合很好理解,训练的不够没有找到合适的模型去解决问题,解决办法就是优化算法,进行更多次的训练就好了。而对于过拟合,有几种常见的解决办法:

减小网络的大小

这跟我们的直觉不相符合,减小网络的大小会有更好的训练结果吗?我们这么思考这个问题,在手写数字识别的问题中,训练集有五万个训练数据,我们可以构建一个五万维的网络,每一张训练集的数据,都刚好通过网络中某一个节点,我们可以让这五万个数据损失降为 0,百分百的判断出这张图片上的数字是几,但是很显然,我们的测试集放到这个网络中,得到正确答案的感觉就是随机的,相当于通过一个完全没有训练的网络,这当然不是我们想要的,因此我们需要减小网络的维度,减小到 1000 或 100,这样的网络训练出来的结果才可能在测试集上得到更好的准确率。网络进行数据的拟合很容易,难的是找到好的 泛化 模型,这也是网络训练的核心。我们可以再开始的时候用较小的网络进行训练,然后逐渐增加层的大小或增加新层。(当然也可以开始用一个较大的网络逐步减小网络,都是一样的,但前一种更好)

添加权重正则化

如果两个网络都可以解释一个数据集的数据,那么较小的那个网络更不容易过拟合。就像日心说就避免了金星那些逆行、本轮和均轮的各种问题,简单的可能是更好的。如下的 kernel_regularizer 就是在训练的时候扩大了损失,使其减小了损失导致的过拟合。

model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001), activation='relu', input_shape=(10000,)))

添加 dropout 正则化

对于这个方法,我一直觉得很有趣,这个方法的逻辑是引入噪声。具体做法就是在使用 dropout 的训练网络的层中,使其输出值按照一定概率进行舍弃或者说是设置为 0,这就是人为的引入一些错误,是不是很奇怪,但是确实有用,因为这会在各层之间数据传递避免了一些不突出的关联模式。换句话说,数据间有的数据关联性很强,而另外一些不强,这种人为引入的噪声会抹平一些没有那么强的关联,避免过拟合。

终于到这里了!

我们前面介绍总结了太多机器学习的概念或者是回答了一些问题,现在我们就可以结合之前的例子,总结梳理一下,概括出一个较通用的机器学习模板:

  1. 定义问题,收集标注数据:我们提出问题,然后获取足够多的好的数据,然后明确数据是否是有用的,就像再多夏天可乐的销量数据也没办法训练出今年冬天可乐的销量数据;
  2. 选择衡量成功的指标:需要确定是分类正确,或者是预测准确等,究竟需要得出什么样的结果,已经这些结果如何去衡量;
  3. 确定评估方法:直接留出验证集、K 折交叉验证或者是重复 K 折交叉验证;
  4. 准备数据:对数据进行预处理,用 one-hot 方法扩展为张量,或者是数据标准化等;
  5. 开发比基准更好的模型:用一个小型的网络,做出比纯随机更好的效果,判断是否的概率大于 50%,手写数字判断概率大于 1/10 等;
  6. 扩大规模,开发过拟合模型:添加更多的层、每一层添加更多的参数,使其训练结果过拟合,如果没办法过拟合,你就没办法确定什么是较好的参数值;
  7. 调参:这一个过程往往也是机器学习开发者耗时最多、最让人崩溃的环节,对参数进行无休无止的调节,寻找更好的参数层数配置等,直到逼近到目标。

如此七个步骤,就是一个训练一个网络需要的七个环节,我们进行网络的训练,几乎都需要经过这些步骤。

到此,对于机器学习——在这里我们讨论的主要是其中的深度学习——的基础知识或整体概况,我们都有了一个比较深入的了解,这篇文章概括并总结了一些关键的问题。后续我们就需要进行更多的实践,了解框架中各种 api 的使用了,具体的细节我们到时候再逐步分析与讨论。

恭喜你:完成了机器学习基础知识的学习。

原文地址:https://www.cnblogs.com/renyuzhuo/p/12222586.html

时间: 2024-10-29 15:24:01

机器学习基础概论的相关文章

【机器学习基础】混合和装袋

融合模型(Aggregation Model) 如果我们已经得到了一些特征或者假设,它们和我们做机器学习的目标有若干的一致性的话,我们可以将这些假设综合起来,让预测效果变得更好,这样的模型被称为融合模型. 融合模型是通过混合(mix)和组合(combine)一些假设的方式,得到更好的预测结果. 下面列举了四种不同的混合组合方式,并给出了数学表示形式: 当有多个假设时,我们选择检验误差最小的假设作为我们最信任的目标函数: 我们现在有多个假设,我们可以给每个假设一个投票的权利,综合所有假设的投票结果

机器学习实战笔记1(机器学习基础)

1:如何选择合适的算法 2:python简介 (1)   python的优势:相对于matlab,matlab单个软件授权就要花费数千美元,也没有一个有影响力的大型开源项目.相对于c++/c/java,完成简单的操作就需要编写大量的代码:而如今我们应该花费更多的时间去处理数据内在的含义,而无需花费太多精力解决计算机如何得到数据结果(python简洁) (2)   python具有numpy科学函数库,它是一个使运算更容易.执行更迅速的库:另外还有matplotlib绘图工具. 3:python语

第一章:机器学习基础

第一部分:分类 本书前两部分主要探讨监督学习(supervisedieaming).在监督学习的过程中,我们只需要给定输入样本集,机器就可以从中推演出指定目标变量的可能结果.监督学习相对比较简单,机器只需从输入数据中预测合适的模型,并从中计算出目标变量的结果.      监督学习一般使用两种类型的目标变量:标称型和数值型.标称型目标变量的结果只在有限目标集中取值,如真与假.动物分类集合{爬行类.鱼类.哺乳类.两栖类.植物.真菌};数值型目标变量则可以从无限的数值集合中取值,如0.100.42.0

【机器学习实战】第1章 机器学习基础

第1章 机器学习基础 机器学习 概述 机器学习就是把无序的数据转换成有用的信息. 获取海量的数据 从海量数据中获取有用的信息 我们会利用计算机来彰显数据背后的真实含义,这才是机器学习的意义. 机器学习 场景 例如:识别动物猫 模式识别(官方标准):人们通过大量的经验,得到结论,从而判断它就是猫. 机器学习(数据学习):人们通过阅读进行学习,观察它会叫.小眼睛.两只耳朵.四条腿.一条尾巴,得到结论,从而判断它就是猫. 深度学习(深入数据):人们通过深入了解它,发现它会'喵喵'的叫.与同类的猫科动物

机器学习实战之第一章 机器学习基础

第1章 机器学习基础 机器学习 概述 机器学习就是把无序的数据转换成有用的信息. 获取海量的数据 从海量数据中获取有用的信息 我们会利用计算机来彰显数据背后的真实含义,这才是机器学习的意义. 机器学习 场景 例如:识别动物猫 模式识别(官方标准):人们通过大量的经验,得到结论,从而判断它就是猫. 机器学习(数据学习):人们通过阅读进行学习,观察它会叫.小眼睛.两只耳朵.四条腿.一条尾巴,得到结论,从而判断它就是猫. 深度学习(深入数据):人们通过深入了解它,发现它会'喵喵'的叫.与同类的猫科动物

【机器学习基础】线性可分支持向量机

引言 接下里的一系列有关机器学习的博文,我将具体的介绍常用的算法,并且希望在这个过程中尽可能地结合实际应用更加深入的理解其精髓,希望所付出的努力能得到应有的回报. 接下来的有关机器学习基础博文主要根据机器学习技法课程的学习,围绕特征转换(feature transforms)这个主要工具,从以下三个方向进行探讨: 如果现在有很多特征转换可以使用的时候,我们该如何运用这些特征转换,如何控制特征转换中的复杂度的问题,从这个角度刺激了支持向量机(Support Vector Machine)算法的发展

机器学习基础2--评价回归模型

再次回到上一节的13次模型. 这个疯狂的曲线造成了一种现象过拟合. 很明显,你的房子不可能只值这么点价钱,所以看上去,这个13次模型甚至还不如一开始的二次模型. 那么现在有个疑问,我们应该怎样去选择最合适的模型? 我们想要准确预测,但是我们无法观测未来. 下面我们模拟一次预测过程: 1.我们随机将一些房子数据排除在外. 2.然后拟合剩下的数据 3.最后进行预测和推断. 术语: 训练集(training set):用来拟合模型的数据. 测试集(test set):排除出去的数据. 训练损失(tra

机器学习基础4--评估线性分类

如线性回归一样,我们也分成了训练集和测试集. 用训练集进行分类器的学习,用测试集来评估分类错误. 分类错误: 测试集 -> 隐藏类型标签 -> 放到分类器进行处理 -> 得出结果 -> 与定义好的类型标签进行比较 错误率: 分类错误数/总句子数 正确率: 分类正确数/总句子数 那么,什么样的正确率才是好的? 至少要比随机猜测效果要好. 如果有k个分类,那么正确率至少要大于等于1/k 同时要关注是否有意义: 2010年,全球有90%的邮件是垃圾邮件.而只要说所有邮件都是垃圾邮件,就有

机器学习基础5--文档相似性检索与度量算法

案例:在阅读文章时,推荐相似的文章. 这个案例简单粗暴,尤其是我看小说的时候,闹书荒的时候,真的很希望有这样的功能.(PS:我现在就职于某小说公司) 那么,如何衡量文章之间的相似度? 在开始讲之前,先提一下elasticsearch. elasticsearch所使用的索引方式被称为倒排索引.将文档拆分成一个一个的词,然后记录该词出现在哪篇文档的哪个位置.具体解释请参照维基百科. 而在这里,我们将使用和倒排索引类似的方法--词袋模型. 我们有如下一句话. "Carlos calls the sp