机器学习入门一:基础知识

前言

首先本系列是个人学习知识的总结,如果能帮助到其他人那再好不过,文中多会出现英语图片或语句,我会尽量解释。

机器学习介绍

1.什么是机器学习?

其实就是字面上的意思,让机器能够自主学习,更精确一点就是:令机器获得一种不需要明确编程指令,便能够自主学习如何去解决具体问题的能力。如图,其步骤大致是:
机器学习训练步骤——版本0.1

  1. 收集训练数据
  2. 将数据输入预先搭建的数学模型中,启动程序开始训练模型(此时模型参数是随机值)
  3. 经过一段时间后训练完成,我们获得训练好的模型(此时模型参数已经自动调整为最优)
  4. 将此模型投入使用,输入真实的数据,希望模型能够输出一个准确的预测结果

(务必记住机器学习训练步骤,之后会不断更新)
机器学习入门一:基础知识
机器学习的主要应用有:

输入 输出 应用
图片 判断图中是否有人脸(输出是或否) 图片分类
音频片段 截取到的人声片段 语音识别
中文句子 英文句子 文本翻译
车载镜头或传感器 距离其它车辆的位置 自动驾驶

2.机器学习中的常见困难

  • 模型的泛化1 (Generalization)能力

    模型的泛化问题主要体现在数据拟合的部分:(我们以分类O和X举例,蓝线就是机器画的分界线)

    欠拟合(Underfitting):意思就是模型还没有训练好,还不足以达到理想效果,还需要再训练一会儿。

    适拟合(Appropriate-fitting):意思就是模型练的刚刚好,分类效果很好,这是我们希望看到的情况。

    过拟合(Over-fitting):意思就是模型训练得准确过头了,在训练数据上的准确率达到完美,那就是说明这个模型只适用于这一个训练集,如果放到实战中,由于实战的样本和训练集的样本不一样,那这个模型表现是不会太好的。

    【至于为何会过拟合?其实就是模型迭代了太多次,学到了许多细枝末节没有的特征,这些特征只适用于训练的数据集里,而不一定适用于实际的输入。举个例子,假如训练数据正好都是暖色系的图片,那在猫猫识别模型里可能就会说暖色系的图片更有可能是猫猫,实际上并没有必然的关联。】

    机器学习入门一:基础知识
    下方这个图的纵轴表示的是损失值 2 ** ,横轴是训练的迭代次数**,可见训练次数过多也不一定是好事。

机器学习入门一:基础知识
总结一下:训练模型就和怪物猎人里烤肉一样,时间不够就是生肉,时间正好就是熟肉,时间太长就变成焦肉了。

3.机器学习中数据集划分

机器学习中最开始是只有两个数据集划分,一个是训练集,一个是是测试集

  • 训练集(Training Set):指作为模型输入的训练样本数据,比如一个数据集中,有800张带标签的猫猫图片和200张带标签的狗狗的图片。
  • 测试集(Test Set):指模型训练完成后,测试集里的数据作为真实数据去对模型进行测试,在测试过程中不对模型的参数做任何修改。

但是后来发现只有两个数据集不太行啊,每次训练完直接测试都不咋样,干脆加一个验证集,用来做个出厂检验吧。

  • 验证集(Validation Set):指在用训练集训练完模型后用来调整超参数的集合。由于验证集有测试训练效果的作用,因此不能被当做训练集去训练。一般我们把训练集的20%数据用作验证集,剩下80%当做训练步骤的输入。

    超参数(hyperparameters) :指神经网络的全连接层数或者每一层的节点数,些被称之为模型的超参数,以区分于模型自身的参数,如模型的权重和偏置,全连接层和节点后文会讲)

至于为什么不直接用训练集和测试集?可以看看具体解释3

4.机器学习中几种学习类别

机器学习入门一:基础知识

监督学习(Supervised Learning)

输入数据:{input,correct output}

  • 监督学习的特点就是输入数据会带有正确的标签,比如1代表图片里有猫猫,0代表没有猫猫的话,输入数据为:[xxx.jpg,1]、[xxx.jpg,0]

  • 应用领域:分类(Classification)、回归(Regression)

无监督学习(Unsupervised Learning)

输入数据:{input}

  • 非监督学习的特点就是输入数据不带任何的标签,比如输入数据为各种图片:[xxx.jpg]、[xxx.jpg]

  • 应用领域:分布估计(Distribution Estimation)、聚类(Clustering)、降维(Dimensionality Reduction)、关联(Association)

半监督学习(Semi-Supervised Learning)

**输入数据:{input} 或者 {input,correct output} **

  • 是监督学习与无监督学习相结合的一种学习方法。半监督学习使用大量的未标记数据,以及同时使用标记数据,来进行模式识别工作,一般无标记数据的数量远大于有标记数据。

  • 应用领域:与监督学习和无监督学习类似

强化学习(Reinforcement Learning)

输入数据:{input, some output, grade}

  • 强化学习是一类特殊的机器学习算法,借鉴于行为主义心理学。与有监督学习和无监督学习的目标不同,算法要解决的问题是智能体(agent,即运行强化学习算法的实体)在环境中怎样执行动作以获得最大的累计奖励。强化学习应用广泛,被认为是通向强人工智能/通用人工智能的核心技术之一。所有需要做决策和控制的地方,都有它的身影。
    举例,假如围棋用强化学习算法来训练,输入就有可能是:[x,失败,负反馈],x为围棋棋子落点坐标,output为比赛的结果,grade为这一步的一个反馈。

  • 应用领域:棋牌类或博弈类游戏、机器人控制、自动驾驶

机器学习入门一:基础知识

每种学习方式的人工与机器参与度

好了,学了一些基础知识后,让我们把机器学习训练步骤升级一个版本

机器学习训练步骤——版本1.0

  1. 收集训练数据,并按2:8的比例划分为验证集训练集两组
  2. 用训练集作为输入,开始训练模型
  3. 模型训练得差不多之后,用验证集对模型进行评估
  4. 如果模型表现结果不满意,则跳到步骤二再次开始进行训练
  5. 如果模型表现结果满意,则结束训练

=========================== 以下为注释 ===============================


  1. 解释一下泛化的概念:拿图片分类模型举例,之前说过,我们训练好一个模型,当然是希望它投入实际的应用中去,而不是希望模型在训练的时候分类准确率高,但一到实际应用时准确率便低,就好像一个学生每次训练月考都是满分,但是到了实战高考的关键时刻就是0分,这是我们所不希望看见的。泛化就是指,模型在获得各种各样的真实输入的情况下所能够拥有的表现,其表现越好,我们称之为泛化能力越强。 说句人话就是光在训练时候做得好有个p用,实战表现好才是真的好。 ↩︎

  2. 损失值可以理解为模型输出结果减去真实结果,假如我们设定输出结果是1就代表图片上有猫,输出是0就代表图片上没有猫,那模型的输出往往不是绝对的1或0,而是0.1745或者0.8798等等的浮点数,损失值就是指真实值(1或0)减去模型输出值。(可以先暂时这么理解,之后会详细说明损失函数这一概念) ↩︎

  3. 为什么不直接使用两个数据集:一个训练集和一个测试集?直接在训练集上面训练模型,在测试集上面评估模型,这样不是更简单一些吗?
      不这样做的原因在于,开发一个模型通常需要我们去调整模型的配置:例如,选择最佳的全连接层数或者每一层的节点数。我们通过模型在验证集上面的表现来做这种调整。本质上,这种调整也是一种学习的过程:在某种参数空间中寻找最佳的模型配置。结果,根据模型在验证集上面的表现来调整其配置会很快地导致模型在验证集上面过拟合,即便模型从来没有直接在验证集上进行训练。
      产生这一现象的原因即所谓的“信息泄漏“。每一次基于模型在验证集上面的表现来调整某个超参数的时候,某些关于验证集的信息就会泄漏给模型。如果我们仅仅作一次这样的调整,那么只会有很少的信息被泄漏,那么你的验证集依然可以被用来评估模型。然而,如果你多次重复这一过程——运行一个实验,在验证集上面评估模型,然后修改模型——那么关于验证集的越来越多的信息会被泄漏个模型。
      最后,我们只会得到一个在验证集上面表现良好的模型,因为你就是朝着这个方向去优化它的。然后我们所关心的是模型在新数据上面的表现,而不是验证集,所以我们需要应用一个完全不同的,全新的数据集来评价这个模型,即测试集。我们的模型不能够直接地或者间接地接触过任何关于测试集的信息。如果模型基于测试集的表现来进行调整的话,那么对模型的泛化能力的评价是存在缺陷的 ↩︎