浅谈深度学习、Pytorch框架的一些必备的理论知识

机器学习20_一些理论知识


一. 关键概念:

  • 算法(Algorithm):
    原本用以定义在解决问题时,按照某种固定步骤一定可以得到问题的结果的处理过程。后在数据科学领域,用以指代能够根据历史数据实现预测或得出某种结果的计算步骤或数学方法。
  • 人工神经网络(ANN):
    模拟人脑结构、复现人脑思考规律、以制造和人相似的智慧为目的的机器学习算法。
  • 机器学习(ML):
    使用计算机实现算法,使得计算机能够学习数据、获取经验。并实现于预测或得出结果的过程。
  • 深度学习(DL):
    以研究人工神经网络算法为核心的学科。

二. 神经网络的由来

 1943年,在哲学家、数学家、心理学家以及脑神经科学家的相互碰撞下,模拟人脑结构、复现人脑思考规律、以制造和人相似的智慧为目的的算法 - - - 人工神经网络(ANN)就诞生了。它用一个简单的图形模拟了人脑的学方式,用圆圈表示神经元,用线模拟神经元与神经元之间的联系 - - “轴突”,用数据模拟电信号。从而让神经元左侧输入数据,在经过神经元对数据的处理之后,在右侧输出预测结果。这看起来就和人类学习的方式非常相似了。

三. 神经网络曾面临的挑战

  • 预测效果差
  • 数据需求大
  • 计算时间长
  • 根本无法达到人类智力水平

四. 机器学习中的基本概念

(1)样本、特征、标签

 在机器学习中,我们使用的数据一般都是m行n列的二维数据表,这些表格通常是按一定规则储存的数字或者文字,通常表示为 Numpy 中的 array 或者是 Pandas中的 DataFrame。如下图所示:
浅谈深度学习、Pytorch框架的一些必备的理论知识
在这个数据表中,

  • 横向的每一行就是一个 “样本(samples)”,也就是我们收集到的一条条数据。

  • 每一行前的数字是样本的 “索引(index)”。

  • 而数据表中的列,则表示每个样本的某种属性,在机器学习中我们称其为 “特征(features)”,也叫做 “字段” 或者“维度”。注意,这里的维度与二维表的维度可不是相同的含义,前者指的是n的大小,而后者指的则是.shape()后返回的数字的个数。

  • 最后的一列则是 “标签(label)”,也叫做目标变量(target或者target variable)。标签也是样本的一种属性。不过通常来说,它是我们希望算法进行预测、判断的问题的正确答案。

    在经典的机器学习中,因为数据表总是由一个个的特征组成,所以我们一般把数据表(不包含标签的部分)称之为特征矩阵,往往使用大写加粗的 X 来表示,同样的,我们使用小写字母 x 来表示每个特征。

(2)从机器学习的基本数据结构 “特征矩阵” 到深度学习中的基本数据结构 “特征张量”

 在深度学习中,我们接到的预测任务将会变得更加复杂,在这种要求下,我们的数据将不再是单纯的二维表了,而是像图像、语音、视频这种非结构化的数据。对于深度学习而言,我们使用的基本数据结构就变成了张量,单一的图像就需要三维Tensor来表示;语音、视频的维度则会更高,所以我们的数据集就会变成像是这样的:
浅谈深度学习、Pytorch框架的一些必备的理论知识
 在这个例子中,我们的Tensor的结构为 [32, 1, 28, 28],这里的32代表着图像上的32张图,1代表着一个颜色通道(灰色),28, 28则代表着每一个样本的像素大小是28*28的。

 在高维张量的操作中,我们一般不会再区分 “行列”,而是认为每个索引对应的就是一个样本,比如 [32, 1, 28, 28] 实际上就是由32个三维Tensor构成的四维Tensor,这32个三维Tensor就是32张图片,也就是32个样本。而这些三维Tensor所包含的内容,也就是32个样本分别对应的特征。由于我们所使用的张量往往是高于两个维度的,因此我们不能称其为“矩阵”,因此,在深度学习中,我们一般称特征所在的张量叫做特征张量。同样的也用大写加粗的 X 来表示。

 由于数据是非结构化的,所以标签也不会位于数据的最后一列。在深度学习中,标签几乎100%都是和数据集分开的,不过这些标签都很普通,不过就是一些数字的组合。(例如:tensor([1, 2, 3, 2, 3…]))

(3) 分类和回归

 标签是机器学习中非常重要的一个概念,不同的标签指向了不同的问题。机器学习可以解决现实中广泛存在的各种问题,但是最为广泛的问题主要是两类:分类和回归。
 在机器学习中,在判断 “有无”、“是否”、“是A是B还是C” 的时候,它预测出的答案会是某种类别,这就是分类问题。而当机器学习在做预测,比如 “是多少?”、“增长/下降多少?”的时候,它给出的答案就是某个具体的数字,这就是回归问题
 举一个很典型的例子:预计一只股票会不会涨,就是分类问题;预测一只股票会涨/跌多大幅度,就是回归问题。

(4)有监督算法和无监督算法

 既然标签是人为规定的,那是否可以选择没有标签的算法呢?当然可以, 对于有标签的任务,我们称其为 “有监督学习”,包括大家耳熟能详的:KNN、决策树、支持向量机、线性回归、逻辑回归、大部分神经网络等。 对于没有标签的任务,我们就将其称为“无监督学习”,包括:聚类分析、协同过滤(推荐系统中的核心算法之一),以及变分自编码器等深度学习算法。
 “有监督学习” 非常符合人工智能诞生之初人们对算法的要求:从我们已知的历史数据中进行学习,然后去预测我们渴望了解的东西。“无监督学习” 相对的,由于我们没有给算法提供任何的正确答案,大多数时候,我们都只是告诉无监督算算法,这有一堆数据,你去学学看,然后告诉我你能得到什么。在深度学习中,“无监督学习算法” 在许多时候都被我们用来作为辅助算法,以增强有监督学习的效果。
 在实际使用中,还存在着半监督学习算法、强化学习等更加深入的领域。

(5)如何判断一个模型的优劣?

根据以下四点来判断:

  • 模型预测效果的准确性
  • 运算速度的快慢
  • 可解释性
  • 服务于业务
(6)框架是什么?框架(framework)和库(library)有什么区别?

 框架就是封装程度较高的库,Pytorch也可以被说成是用于构建深度学习算法的Python库,也就是Torch库的Python版本。
 简单来说,我们经常会用 pandas 和 numpy 来执行非常底层、非常基础的操作,所以一般我们不会认为他们是框架。但Pytorch、sklearn等都是在numpy等库的基础上再次进行了封装,形成的更高级别的库。在这些库中,我们基本不执行太底层和基础的操作,而是专注于构筑复杂的程序来解决问题。对于这样的库,我们称之为框架。

(7)如何让一个神经网络算法的结果变得更加优秀?
  • 加大数据规模
  • 调整神经网路的架构,也就是调整网络上的神经元个数、网络的层数、信息在网络之间的传递方式
(8)Pytorch的优势
  • 天生支持巨量数据和巨大神经网络的高速运算
  • 灵活性高,足以释放神经网络的潜力,并且在保留灵活性的同时,又有Python语法简单易学的优势
  • 支持研究环境与生产环境的无缝切换,调试成本很低
(9)Pytorch中模块的两大类

Torch库:

  • 运行基础 :
    torch.tensor 基本数据结构
    torch.autograd 自动微分模块
  • 支持神经网络相关的数据预处理 (torch.utils) :
    utils.data / utils.datasets 数据导入与处理
    utils.tensorboard 训练结果的可视化
    utils.model_zpp 预训练模型
  • 构筑神经网络结构的基本元素 (torch.nn 比较重要) :
    nn.Module 神经网络的各种 “层”
    nn.functional 神经网络的损失函数与激活函数
  • 优化算法模块 :
    torch.optim
  • 神经网络的运算性能
    torch.torchelastic 分布式Pytorch训练
    torch.cuda 在GPU上训练Pytorch
  • 生产环境中部署深度学习算法
    torch.JIT

成熟AI领域库:

  • 计算机视觉(torchvison) :
    torchvision.datasets CV常用数据
    torchvision.models CV常用模型
    torchvision.transforms 图像数据的预处理工具
  • 自然语言处理(torchtext)
    torchtext.data 文字数据的数据预处理
    torchtext.datasets NLP领域常用的数据集
  • 语音处理 (torchaudio)
    torchaudio.datasets 语音领域的常用数据集
    torchaudio.transforms 语音领域的预处理工具
    torchaudio.models 语音领域的常用模型
    torchaudio.functional 语音领域的常用函数
上一篇:蓝桥杯算法训练之数对(取余取整)


下一篇:八、【interrupt】按键中断