机器学习的基本任务
监督学习
监督学习任务的特点是给定学习目标(这个学习目标又称为标签、标注或实际值等),整个学习过程围绕如何预测与目标更接近而展开。监督学习的主要内容有目标检测、目标识别、图像分割、二分类、多分类、多标签分类等。
无监督学习
在实际生活中,有很多数据是没有标签的或者标签代价很高,但是这些没有标签的数据也可能包含很重要的规则或信息,从这类数据中学习到一个规则或规律的过程被称为无监督学习。在无监督学习中,通过推断输入数据的结构来建模,模型包括关联学习、降维、聚类等。
半监督学习
半监督学习是监督学习与无监督学习相结合的一种学习方法,半监督学习使用大量的未标记数据,同时由部分标记数据进行模式识别。
自编码器是一种半监督学习,它的生成目标是未经修改的输入。如:自然语言处理中根据给定文本中的词预测下一个词。
生成式对抗网络也是一种半监督学习,给定一些真图像或语音,然后生成对抗网络生成一些与真图像或语音逼真的图像或语音。
强化学习
强化学习是多学科多领域交叉的产物,主要包含四个元素:智能体(Agent)、环境状态、行动、奖励,目标就是获得最多的累计奖励。
强化学习把学习看作是一个试探评价的过程,智能体选择一个动作作用于环境,环境在接收该动作后使状态发生变化,同时产生一个强化信号(奖或惩 )反馈给智能体,再由智能体根据强化信号和环境的当前状态选择下一个动作,选择的原则是使智能体收到正强化(奖)的概率增大。选择的动作不仅影响当前的强化值,也影响下一时刻的状态和最终的强化值。
强化学习不同于监督学习,强化学习中由环境提供的强化信号是智能体对所产生的动作的好坏的一种评价,并没有告诉智能体如何去产生正确的动作。因此,外部提供了很少的信息,智能体必须依靠自身的经历去学习。通过这种方式,智能体在行动-评价的环境中获得知识,并改进行动方案以适应环境。
机器学习的一般流程
明确目标
明确目标就是要明确大方向,比如当前的需求是分类问题、预测问题还是聚类问题等。明确目标后,需要进一步明确目标的具体含义,比如是分类问题,需要进一步区分是二分类、多分类还是多标签分类;如果是预测问题,具体是标量预测还是向量预测等等。确定问题,明确目标后有助于选择模型架构、损失函数及评估方法等。明确目标还包含了解目标的可行性,因为并不是所有的问题都可以通过机器学习来解决。
收集数据
为了解决这个问题,需要哪些数据?数据是否充分?哪些数据能获取?哪些数据无法获取?这些数据是否包含我们学习的一些规则等,都需要全面把握。数据可能涉及不同平台、不同系统、不同部分、不同形式等,对这些问题的了解有助于确定具体的数据收集方案、实施步骤等。能收集的数据尽量实现自动化、程序化。
数据探索与预处理
数据探索包括了解数据的大致结构、数据量、各特征的统计信息、整个数据质量情况、数据的分布情况等。为了更好体现数据分布情况,数据可视化是一个不错的选择。
通过数据探索后,可能会发现不少问题,如存在缺失数据、数据不规范、数据分布不均衡、奇异数据、非数值数据、无关或不重要的数据等。这些问题的存在直接影响着数据质量。数据预处理是接下来的重点工作,也是机器学习过程中必不可少的重要步骤,特别是在生产环境中,数据往往是原始、未加工和处理过的,因此数据预处理常常占据整个机器学习过程中的大部分时间。数据预处理过程一般包括数据清理、数据转换、规范数据、特征选择等。
选择模型以及损失函数
在选择模型时,可以先用一个简单、自己比较熟悉的一些方法来选择模型,开发一个原型或比基准更好一点的模型。这个简单的模型有助于快速了解这个项目的主要内容:了解整个项目的可行性、关键点;了解数据质量、数据是否充分等;为开发一个更好的模型奠定基础。
在选择模型时,不存在某种模型对任何情况都表现很好,因此在实际选择时,一般会选择几种不同的方法来训练模型,然后比较性能,从中选择最优的模型。
选择好模型后,还需要考虑以下几个关键点:
1、选择合适的损失函数;
2、选择合适的优化器;
3、最后一层是否需要添加softmax或sigmoid激活层。
可以根据问题类型选择最后一层激活函数以及损失函数,如下表:
问题类型 | 最后一层激活函数 | 损失函数 |
二分类、单标签 | 添加sigmoid层 | nn.BCELoss |
不添加sigmoid层 | nn.BCEWithLogitsLoss | |
二分类、多标签 | 无 | nn.SoftMarginLoss(target为1或-1) |
多分类、单标签 | 不添加softmax层 | nn.CrossEntropyLoss(target的类型为torch.LongTensor的独热编码) |
添加softmax层 | nn.NLLLoss | |
多分类、多标签 | 无 | nn.MultiLabelSoftMarginLoss(target为0或-1) |
回归 | 无 | nn.MSELoss |
识别 | 无 | nn.TripleMarginLoss |
无 | nn.CosineEmbeddingLoss(margin在[-1, 1]之间) |
评估以及优化模型
模型确定以后,还需要确定一种评估模型性能的方法,即评估方法。评估方法有以下三种:
留出法:可以将数据集划分为两个互斥的集合,其中一个集合作为训练集,另一个作为测试集。在训练集上训练出模型以后,用测试集来评估测试误差,作为泛化误差的估计。当数据集较大时,也可以直接将数据集分成三部分:训练数据集、验证数据集、测试数据集。训练数据集用来训练模型,验证数据集用来调优超参数,测试数据集用来测试模型的泛化能力。
k折交叉验证:不重复地随机将训练数据集划分为k个,其中k-1个用于模型训练,剩余的一个用于测试。
重复的k折交叉验证:当数据量比较小、数据分布很不均匀时可以采用这种方法。
使用训练数据集构建模型后,通常使用测试数据集对模型进行测试,如果对模型的测试结果满意,就可以用此模型对以后的数据进行预测;如果测试结果不满意,可以优化模型。优化的方法很多,其中网格搜索参数是一种有效方法,当然我们也可以使用手工调节参数等方法。