深度学习笔记 掌握AI专业术语

深度学习领域不同于其他计算机的研究方向,模型如何训练、参数如何更新等知识,其中会涉及很多的专业术语与名词。熟悉这些名词和概念有助于学好深度学习。

一、常见术语与名词

1、训练

  • 深度学习中有很多算法,每种算法都有自己的模型结构,比如人工神经网络。如果想让这个网络工作,光有模型结构是不行的,我们还需要知道结构中的参数,也就是权重偏移项权重是模型的灵魂,我们做的所有工作,就是为了找到最适合某个问题的模型权重。

  • 确定模型中的参数的过程,我们就称为 “训练”。训练是一个迭代的过程,模型一般会遍历训练数据很多遍,也就是反复地对手头的数据进行学习,每次遍历都会更新一次或者若干次参数。训练的过程就像我们日常的学习一样。比方说我们要学习高数,我们把高数教材看一遍,就会对高数有一定的了解。但有些地方可能还不是很理解或者理解错了,我们会再看一遍,这时又会有新的领悟。看的次数越多,领悟的内容就越丰富。

  • 在训练阶段使用的数据我们称为“训练集”,上文所举例子中高数教材就是训练集的一个例子。训练集的质量决定了模型的质量,如果训练集的质量很低,就不可能获得一个性能很好的模型。这个很好理解,好比我们要去参加高等数学的考试,而我们一直看的是英语的教材,或者是质量很差的 “水货” 高数教材,那么考试的结果显然不会很理想。

1、Epoch

遍历一遍训练数据就叫作 “一个 Epoch”。假设我们有 1000 条数据,我们把这 1000 条数据都学习一边,就叫作 “完成了一个 Epoch”。学习了几遍全部数据,就是完成了几个 Epoch。

训练模型的时候,我们要告诉模型预计训练多少个 Epoch,但这个值并不是固定的,因为并没有一个准确的 Epoch 数能一定能得到一个比较好的模型。那我们到底应该告诉模型训练多少个呢?我们有一个标准:模型训练的 Epoch 数必须要让模型达到一个收敛的状态。并且为了模型有更多的选择,我们可以让模型收敛后,再多训练一些 Epoch,然后保存一些模型,最后进行挑选。这是一个经验与实际结合的过程。

1、Batch Size

模型学习是一个迭代的过程,虽然理论上是一次性将所有数据学完的,但是通常不会这么做。考虑到内存、处理速度、优化角度等方面,我们每次只会取一定数量的数据进行学习,比如 32、64、128。这每次用到的一定数量的数据,就叫作 “一个 Batch”,每个 Batch 中数据的个数,无论有多少个,都统称为 “Batch Size”。

我们仍然以学习高数来看。高数中有很多章节,我们的大脑就相当于计算机硬件资源(GPU、CPU、内存等)。有的人大脑很好,一次性可以阅读很多个章节,然后再统一归纳总结一次。但有的人没有那么厉害,一次只能阅读一个章节的内容,阅读一章就总结归纳一章的内容。每次阅读章节的量就是 Batch Size。

4、Step

一个 Epoch,会取若干次数据进行训练,每次取的数据量为 Batch Size,每一次取数据我们称为 “一个 Step” 或者 “一个 Iterator”,下文中我会统一使用 Step。

一个 Epoch 中,Step 的数目等于数据总量除以 Batch Size。

如果 Batch Size 等于数据总量,那么一个 Epoch 就只有一个 Step,即上文所说的 “一次性将所有数据学完”。虽然这么做是可以的,但实际项目中数据量巨大,模型也非常复杂,我们很少会让 Batch Size 等于数据总量。通常 Batch Size 是要小于数据总量的,具体是多少要结合实际分析,这取决于计算资源和模型的复杂程度。

Epoch、Step 与 Batch Size 的关系

比如有 10000 张训练图片,要训练一个 50 层的残差神经网络。有一张显存为 32G 的 GPU,通过实验发现:Batch Size 为 128 的时候可以正常训练。那此时,训练一个 Epoch 会经过多少个 Step 呢?计算方式如下:

import math

step = math.ceil(10000 / 128)   # 向上取整
print(step)     # 79

这是 1 张 GPU 训练的情况,但现实中我们经常会采用单机多卡的形式,因为这样可以加快训练的速度。因此,假设我们现在有 4 张同样的 GPU,那训练一个 Epoch 会经过多少个 Step 呢?计算方式如下:

import math

step = math.ceil(10000 / (128 * 4))
print(step)     # 20

多卡的时候每个 Step 会在每张卡上训练相同 Batch Size 的不同数据,然后把梯度汇总到 CPU 上计算,最后更新参数。

5、评估

在训练的过程中,我们可能会保存很多个模型,比如每个 Epoch 保存一个,每若干个 Step 保存一个,或者是每经过若干长度的时间就保存一个。

那我们如何从这些模型中挑选一个模型呢?

  • 我们会准备一份数据,这部分数据不会在训练过程中使用,我们称为 “评估集”,或者是 “验证集”、“测试集”。

  • 我们可以通过评估集获取每个模型的各项评估指标,再利用这些评估指标衡量模型表现,最后通过指标的结果挑选一个最优的模型。这一过程就是 “评估”。评估集能很好地反映出我们的模型是否能解决实际的问题,比如说,我们要参加的是高数考试,那张考试卷就是评估集,我们参加这场考试就是评估。

  • 对于训练集与评估集,在绝大部分的实际项目中都是提前确定好的,特别是评估集,它代表这个项目要解决的问题。一些小的实验性项目,可以将数据按一定的比例随机分成训练集和评估集,一般这个比例是 7:3 或 8:2,即训练集占所有数据的 70% 或者 80%,数据的其余部分作为评估集。

二、深度学习的分类

深度学习大体上可以分为有监督学习无监督学习,现在可以实际落地的项目大多数来源于有监督学习。

1. 有监督学习

有监督学习就是我们常说的预测任务,即分类回归

  • 分类与回归的区别就是输出的内容。当给定输入时,分类输出的是具体的类别, 而回归输出的是一个数值。比如要预测给定的手写数字是 0 到 9 中的哪一个,这就是一个分类任务;而如果我们需要对一个区域内的房价进行预测,最后预测的结果是一个数值,这就是回归任务。

  • 在有监督学习中,它的训练集是需要被标记好的。在说明什么是标记好的数据之前,我们先来回忆一下什么是深度学习。

  • 深度学习是让机器像人一样来思考问题、解决问题,但人类也不是天生就什么都会,我们是通过后天不断地学习,才能掌握某一种技能。上学的时候数学老师教给我们数学知识,于是我们学会了数学,英语老师教给我们英语知识,我们学会了英语。被标记好的数据就是教材,它对应数据的真实结果,训练过程相当于是老师,通过这些数据把知识教给机器。模型在训练的过程中,我们会让模型的输出不断接近真实的结果,从而持续更新参数,达到学习的目的,就像我们在学习中会不断修正我们所得到的知识。

2. 无监督学习

无监督学习是在没有额外信息的情况下自动提取数据中模式和结构,其中具有代表性的无监督学习是聚类算法,常见的有 K-Means、层级聚类、EM 算法等。传统的聚类算法比较简单,并且实际落地的项目较少。

深度学习中具有代表性的无监督学习是 GAN自编码器,有监督学习和无监督学习最大的区别就在于,有监督学习的训练集是需要人工提前标记的。

3. 评估指标

我会通过下面的这个例子,来带你了解各个评估指标。根据项目的不同,可以采用不同的指标来评估你的模型。

假设我们要对模型 A 进行评估,并且模型 A 可以自动识别包含小猫的图片:

  • 用 100 张图片对模型 A 进行测试,100 张图片中有 70 张包含猫和 30 张不含猫的图片(这一类我们叫作“其他”);
  • 模型 A 挑选出了 80 张它认为是猫的图片;
  • 模型 A 挑出来的这 80 张图片中,有 60 张是猫,20 张是其他。

混淆矩阵

混淆矩阵是我们经常使用的一种对分类结果可视化的方法。我们可以通过混淆矩阵计算出精确率、准确率与召回率。混淆矩阵如下所示:

它们分别所代表的含义:

  • 正例:代表我们目标的类别。
  • 负例:代表我们不关心的那个类别。
  • TP(真正):真实的类别是正例,同时模型也预测为正例。
  • FN(假负):真实的类别是正例,但模型预测为负例。
  • FP(假正):真实的类别是负例,但模型预测为正例。
  • TN(真负):真实的类别是负例,同时模型也预测为负例。

了解完混淆矩阵中的 TP、FN、FP 和 TN 的含义后,来看看基于它们计算的准确率、精确率和召回率。

准确率

准确率(Accuracy)可以衡量预测值与真值相符合的程度,它是非常常见的评估指标。通常准确率越高,分类模型的性能就越好。

TP, TN = 60, 10
FP, FN = 20, 10

Accuracy = (TP + TN ) / (TP + FP + FN + TN)
Accuracy      # 0.7

准确率是一个很好很直观的评估指标,但有时候准确率高并不能代表这个算法好,因为在类别极度不平衡的时候,它没办法很好地衡量模型的性能。假设这样一个场景:现在模型要对某机器进行异常检测,但是这个异常发生的概率非常非常低,绝大多数时间这台机器都是在正常工作的。在这个场景中,显而易见,正例是机器的异常情况,而负例则是正常状况,是我们不关心的 “其他”。假设验证集中有 1 万条数据,其中只有 5 条数据是异常,其他都是正常的。但我们的模型把这 1 万条数据全部预测为正常,它的准确度为:

accuracy = (10000 - 5) / 10000 
accuracy    # 0.9995

此时这个模型的准确率非常高,但它的性能又如何呢?非常差,因为我们关心的异常记录,在模型的预测中,一条也没有发现。

精确率

精确率(Precision)指的是如果模型预测一条数据是正例,那么有多大的概率确实是正例

它的计算公式如下:

precision = TP / (TP + FP)    # 60 / (60 + 20)
precision    # 0.75

模型 A 的精确度为 75%,也就说模型 A 预测一张图片为猫的话,它有 75%的可能性确实是猫。

召回率

召回率(Recall)可以用来衡量模型能在验证集中找回多少正例,它的计算公式如下:

recall = TP / (TP + FN)   # 60 / (60 + 10)
recall      # 85.7%

模型 A 的召回率为 85%,也就意味着模型 A 能找回 85% 猫的图片,即在给定的 70 张猫的图片中,可以找回 60 张。

F1-Score

了解完准确率、精确率和召回率后,我们再来看 F1-Score,它是根据精确率(Precision)与召回率(Recall)来计算的。因为精确率与召回率经常会出现矛盾的情况,精确率高了召回率有可能会很低,反之亦然。

F1-Score 是一个综合了精准率与召回率的评估指标,在矛盾的情况下,它也能够准确地评估模型的性能。它的计算公式如下:

F1 = 2 * precision * recall / (precision + recall)
F1    # 80%

均方误差

上面讲到的评估指标都是用于分类任务的,下面我们来看看回归任务常用的评估指标:均方误差

假设我们有模型 f(x),输入 x 的真实值为 y,验证集中一共有 m 条记录。那么均方误差的计算公式如下:

均方误差衡量的是模型预测的结果与真实值之间的差距,均方误差越小意味着模型的预测结果越接近真实结果。均方误差是一个非常常用的评估指标,在后续的课程中我们会经常使用到它。

作者:叶庭云
CSDN:https://yetingyun.blog.csdn.net/
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
觉得文章对你有帮助、让你有所收获的话,期待你的点赞呀,不足之处,也可以在评论区多多指正。

  • 4
    点赞
  • 3
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页

打赏

叶庭云

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值