二、深度学习_基本概念笔记
0 深度学习基本概念
深度学习(Deep Learning)是机器学习的一个子集,它基于人工神经网络(特别是深层神经网络)的学习,深度学习模型能够学习数据中的复杂模式,并且在图像识别、语音识别、自然语言处理等多个领域都有典型的应用
1 深度学习和机器学习的区别
(1)概念层面:
- 机器学习:是人工智能的一个分支,它使计算机系统利用数据来不断改进性能,而无需进行明确的编程,机器学习涵盖了如决策树、支持向量机、聚类、降维等多种算法和技术
- 深度学习:是机器学习的一个子集,专注于使用深层神经网络来模拟人类学习的方式,通过数据学习复杂的模式和表示,通常需要大量的数据和计算资源
(2)模型结构:
- 机器学习:使用的模型结构相对简单,如线性回归、逻辑回归、决策树等,这些模型的层数较少,参数也较少
- 深度学习:使用的是深层神经网络,这些网络有多个隐藏层,能够学习数据中的复杂和抽象的特征表示
(3)数据依赖性:
- 机器学习:在小数据集上也能工作,尽管性能可能不如大数据集上的表现
- 深度学习:通常需要大量的标注数据来训练模型,以便网络能够学习到有效的特征表示
(4)计算资源:
- 机器学习:通常可以在普通的计算机上运行,不需要特别强大的计算资源
- 深度学习:由于模型的复杂性,通常需要GPU或TPU等高性能计算资源来加速训练过程
(5)应用领域:
- 机器学习:适用于各种问题,包括分类、回归、聚类、推荐系统等
- 深度学习:在图像和语音识别、自然语言处理、游戏智能等需要处理复杂数据的领域表现出色
(6)特征工程:
- 机器学习:通常需要手动提取特征或使用特征选择技术来提高模型性能
- 深度学习:能够自动从原始数据中学习特征,减少了手动特征工程的需求
(7)可解释性:
- 机器学习:许多传统的机器学习模型相对容易解释,例如决策树
- 深度学习:由于模型的复杂性,深度学习模型通常被认为是“黑箱”,难以解释其决策过程
备注:尽管存在这些区别,深度学习和机器学习在实践中往往是互补的,深度学习可以作为机器学习中的一种强大工具,而机器学习中的许多概念和技术也适用于深度学习模型的开发和优化
2 深度学习核心概念
深度学习指的是使用深层神经网络进行学习的过程,“深层”意味着网络有多个隐藏层,这使得模型能够学习数据中的复杂模式
层的概念: 层是神经网络的基本构建块,每一层都由多个神经元组成,分为两种类型:
- 线性层 (Linear Layer):
- 也称为全连接层(Fully Connected Layer)或密集层(Dense Layer)
- 执行的操作是内积(inner product)或点积(dot product)
- 包含权重(weights)和偏置(bias)
- 输出节点(output nodes)是该层的输出
- 激活层 (Activation Layer):
- 引入非线性因素,使得模型能够学习非线性关系
- 常用的激活函数为ReLU(Rectified Linear Unit)
3 深度学习模型
3.1 模型构建
在深度学习框架(如PyTorch)中,模型是由层堆叠而来,通过继承nn.Module
模块并定义自定义类来进行构建的,这个类通常包含:
__init__
方法:初始化模型,接收超参数,并实例化所需的层forward
方法:定义数据通过网络的前向传播路径,接收输入特征并输出预测结果
3.2 模型训练
深度学习模型的训练过程包括准备模型(model)、优化器(optimizer)、损失函数(loss_fn)、数据加载器(data_loader)和训练周期(epochs)
训练流程:
Step1:遍历数据集加载器,取出一批数据 Step2:把特征 X 导入 模型,做正向传播,得到预测结果 y_pred Step3:通过损失函数,计算预测结果和真实结果的误差 loss Step4:根据 loss 做反向传播,计算每个参数的偏导数 Step5:利用优化器让每个参数减去偏导数,执行梯度下降的过程,优化一步 Step6:利用优化器清空每个参数的偏导数,为下次优化做准备 Step7:重复上面的过程,直到退出即可
3.3 过程监控
- 对于回归问题,通常监控损失(loss)
- 对于分类问题,除了监控损失外,还可能监控准确率(accuracy)、召回率(recall)、精确率(precision)和F1分数(F1 score)
3.4 保存模型
为便于后续使用或继续训练,需要保存模型,包括:
-
保存定义模型的类
-
保存模型训练完之后的权重
4 数据的批量化打包
数据的批量化打包是深度学习训练过程中的一个重要环节,特别是在处理大规模的数据集时,这种方法可以有效地管理内存使用,提高数据加载的效率,并允许进行数据增强等预处理操作
4.1 目的
- 内存管理:由于数据量可能非常大,一次性加载所有数据到内存中可能会导致内存溢出,分批次加载数据可以避免这个问题
- 计算效率:批量处理数据可以利用现代计算硬件(如GPU)的并行处理能力,提高训练效率
- 数据预处理和增强:在每个批次中对数据进行预处理和增强,可以增加模型的泛化能力,减少过拟合
4.2 使用流程
Step1:训练开始:初始化训练过程,包括模型、优化器、损失函数等
Step2:从硬盘中读取一批原始数据:使用数据加载器从硬盘中按批次读取数据
Step3:做必要的预处理和数据增强:对每个批次的数据进行预处理,如归一化、裁剪、旋转等数据增强操作
Step4:交给模型训练:将处理后的数据输入模型,进行前向传播和反向传播,更新模型参数
Step5:训练完成之后丢掉:一旦一个批次的数据被处理,就可以从内存中释放,为下一个批次的数据腾出空间
Step6:从硬盘读取第二批数据:重复上述过程,直到所有数据都被处理
Step7:迭代:这个过程会在整个训练周期中不断重复
4.3 本质
数据的批量化打包本质上是一个生成器(generator),它按需生成数据,而不是一次性将所有数据加载到内存中
4.4 PyTorch中的策略
在PyTorch中,数据的批量化打包通过以下步骤实现:
Step1:自定义 Dataset:
- 继承
torch.utils.data.Dataset
类,实现自定义的数据集类 __init__
:初始化方法,用于设置数据的路径和其他必要的参数__len__
:返回数据集中的样本总数__getitem__
:根据索引返回单个样本,这里可以进行数据的预处理和增强
Step2:实例化 DataLoader:
- 使用
torch.utils.data.DataLoader
类来包装自定义的Dataset
类 DataLoader
负责数据的批量加载,可以设置批量大小(batch size)、是否打乱数据(shuffle)、多进程加载(num_workers)等参数
5 不同类型数据的处理
5.1 表格类数据
表格类数据,也常被称为结构化数据,是机器学习中常见的数据类型之一,这类数据通常由行和列组成,每一行代表一个样本,每一列代表一个特征
在深度学习中,尤其是使用全连接网络(也称为多层感知机或密集网络)时,表格类数据需要被转换成适合网络输入的格式
5.1.1 全连接网络
全连接网络是由多个全连接层组成的神经网络,每个连接的权重都是通过学习得到的,在处理表格类数据时,全连接网络能够学习特征之间的复杂关系
5.1.2 数据格式
[batch_size, num_features](简称:[B, N]):这是深度学习框架中常用的数据格式,其中batch_size
表示每批数据中的样本数量,num_features
表示每个样本的特征数量,这种格式适用于大多数深度学习框架,如TensorFlow和PyTorch,尽管在具体的实现细节上可能有所不同
5.2 图像类数据
图像数据通常由宽度、高度和通道三个维度组成:
- 宽度 (W):图像的水平像素数(列数据)
- 高度 (H):图像的垂直像素数(行数据)
- 通道 (C):图像的颜色通道数(例如,RGB图像有3个通道数)
图像数据在深度学习模型中的常见格式为:
[batch_size, channel, height, width](简称:[N, C, H, W]):这是PyTorch中常用的格式,其中batch_size
表示每批数据的数量,channel
表示通道数,height
和width
分别表示图像的高度和宽度
5.3 视频数据
在深度学习中,视频数据通常被拆分为单独的图像帧,然后按照图像数据的方式进行处理
视频数据的格式可以表示为:
[batch_size, channel, height, width, time_step]:这里的time_step
表示视频中的帧数或时间维度,这种格式允许模型在处理每一帧图像的同时,也考虑了时间序列信息
5.4 数据处理的金标准
数据科学中处理数据的金标准是:按维度理解数据 ,即:
- 按维度定义数据
- 按维度处理数据