机器学习初学者笔记——百度飞桨零基础实践深度学习课

机器学习

机器学习是人工智能的一个分支,它使用算法和统计模型来使计算机系统自动地从经验数据中学习,并不断改进其性能。简单来说,机器学习是一种通过训练计算机程序来识别和预测模式的方法。

在机器学习中,计算机程序会根据提供的数据进行学习,然后使用这些学习结果来做出决策或者预测未来事件。这个过程包括了数据采集、清理、处理、训练模型、评估模型和预测等步骤。

本文主要是本人在进行模型调参之前进行的资料搜集

模型评估与调整——学会评估模型的性能并调整超参数以获得更好的性能。了解交叉验证、网格搜索等技术。

神经网络:

循环神经网络RNN

深度神经网络DNN

卷积神经网络CNN

生成对抗网络GAN

卷积神经网络常用的基础组网模块

卷积(Convolution):

卷积核(kernel) 填充(padding) 步幅(stride) 感受野(Receptive Field) 多输入通道、多输出通道和批量操作

池化(Pooling)

激活函数

批归一化(Batch Normalization)

丢弃法(Dropout)

池化:

平均池化(Average Pooling)

最大池化

空间金字塔池化(Spatial Pyramid Pooling,SPP)

全局平均池化(Global Average Pooling,GAP)

全局最大池化(Global Max Pooling)

NetVLAD池化

随机池化

重叠池化

RoI池化

激活函数:

Sigmoid函数

Tanh函数

ReLU函数

LReLU

PReLU

ELU

swish

hswish

归一化方法:

批归一化(Batch Normalization)

层归一化(Layer Normalization, LN)

组归一化(Group Normalization, GN)

实例归一化(Instance Normalization, IN)

其中N知batch size、H和W分别表示特征图的高度和宽度、C表示特征图的通道数,蓝色像素表示使用相同的均值和方差进行归一化:

编辑

添加图片注释,不超过 140 字(可选)

LN:对[C,W,H]维度求均值方差进行归一化,即在通道方向做归一化,与batch size大小无关,在小batch size上效果可能更好

GN:先对通道方向进行分组,然后每个组内对[Ci​,W,H]维度进行归一化,也与batch size大小无关

IN:只对[H,W]维度进行归一化,图像风格化任务适合使用IN算法

丢弃法(Dropout):

DropConnect

Standout

Gaussian Dropout

Spatial Dropout

Cutout

Max-Drop

RNNDrop

循环Drop

飞桨中提供两种方法:

downscale_in_infer

训练时以比例r随机丢弃一部分神经元,不向后传递它们的信号;预测时向后传递所有神经元的信号,但是将每个神经元上的数值乘以(1−r)。

upscale_in_train

训练时以比例p随机丢弃一部分神经元,不向后传递它们的信号,但是将那些被保留的神经元上的数值除以 (1−p);预测时向后传递所有神经元的信号,不做任何处理。

优化器:

四种主流优化算法

SGD

Momentum

AdaGrad

Adam

编辑切换为居中

添加图片注释,不超过 140 字(可选)

SGD: 随机梯度下降算法,每次训练少量数据,抽样偏差导致的参数收敛过程中震荡。

Momentum: 引入物理“动量”的概念,累积速度,减少震荡,使参数更新的方向更稳定。

每个批次的数据含有抽样误差,导致梯度更新的方向波动较大。如果我们引入物理动量的概念,给梯度下降的过程加入一定的“惯性”累积,就可以减少更新路径上的震荡,即每次更新的梯度由“历史多次梯度的累积方向”和“当次梯度”加权相加得到。历史多次梯度的累积方向往往是从全局视角更正确的方向,这与“惯性”的物理概念很像,也是为何其起名为“Momentum”的原因。类似不同品牌和材质的篮球有一定的重量差别,街头篮球队中的投手(擅长中远距离投篮)往往更喜欢稍重篮球。一个很重要的原因是,重的篮球惯性大,更不容易受到手势的小幅变形或风吹的影响。

AdaGrad: 根据不同参数距离最优解的远近,动态调整学习率。学习率逐渐下降,依据各参数变化大小调整学习率。

通过调整学习率的实验可以发现:当某个参数的现值距离最优解较远时(表现为梯度的绝对值较大),我们期望参数更新的步长大一些,以便更快收敛到最优解。当某个参数的现值距离最优解较近时(表现为梯度的绝对值较小),我们期望参数的更新步长小一些,以便更精细的逼近最优解。类似于打高尔夫球,专业运动员第一杆开球时,通常会大力打一个远球,让球尽量落在洞口附近。当第二杆面对离洞口较近的球时,他会更轻柔而细致的推杆,避免将球打飞。与此类似,参数更新的步长应该随着优化过程逐渐减少,减少的程度与当前梯度的大小有关。根据这个思想编写的优化算法称为“AdaGrad”,Ada是Adaptive的缩写,表示“适应环境而变化”的意思。RMSProp是在AdaGrad基础上的改进,学习率随着梯度变化而适应,解决AdaGrad学习率急剧下降的问题。

Adam: 由于动量和自适应学习率两个优化思路是正交的,因此可以将两个思路结合起来,这是当前广泛应用的算法。

学习率:

在深度学习神经网络模型中,通常使用标准的随机梯度下降算法更新参数,学习率代表参数更新幅度的大小,即步长。当学习率最优时,模型的有效容量最大,最终能达到的效果最好。

学习率不是越小越好。学习率越小,损失函数的变化速度越慢,意味着我们需要花费更长的时间进行收敛,如 图2 左图所示。

学习率不是越大越好。只根据总样本集中的一个批次计算梯度,抽样误差会导致计算出的梯度不是全局最优的方向,且存在波动。在接近最优解时,过大的学习率会导致参数在最优解附近震荡,损失难以收敛,如 图2 右图所示。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

正则化项:

为了防止模型过拟合,在没有扩充样本量的可能下,只能降低模型的复杂度,可以通过限制参数的数量或可能取值(参数值尽量小)实现。具体来说,在模型的优化目标(损失)中人为加入对参数规模的惩罚项。当参数越多或取值越大时,该惩罚项就越大。通过调整惩罚项的权重系数,可以使模型在“尽量减少训练损失”和“保持模型的泛化能力”之间取得平衡。泛化能力表示模型在没有见过的样本上依然有效。正则化项的存在,增加了模型在训练集上的损失。

飞桨支持为所有参数加上统一的正则化项,也支持为特定的参数添加正则化项。前者的实现如下代码所示,仅在优化器中设置weight_decay参数即可实现。使用参数coeff调节正则化项的权重,权重越大时,对模型复杂度的惩罚越高。

目标检测基本概念:

Anchor:

Anchor-Based

Anchor-Based方法又可以分为两阶段检测算法和单阶段检测算法。

Anchor-Based使用Anchor提取候选目标框,然后在特征图上的每一个点,对Anchor进行分类和回归。两阶段检测算法先使用Anchor在图像上产生候选区域,划分前景和背景,再对候选区域进行分类并预测目标物体位置。典型的两阶段检测算法是R-CNN系列(Fast R-CNN、Faster R-CNN等),经典的Faster R-CNN通过RPN(Region Proposal Network)学习候选区域(Region Propposal, RP),再对候选区域进行分类和回归,输出最终目标框和类别。基于先产生候选区域再检测的两阶段模型通常具有较优的精度,但是预测速度较慢。

此外,Anchor-Based还有一些单阶段模型,这类模型在产生候选区域的同时即可预测出物体类别和位置,不需要分成两阶段来完成检测任务。典型的单阶段算法是YOLO系列(YOLOV2、YOLOv3、YOLOv4、PP-YOLO、PP-YOLOV2等)。单阶段算法摒弃两阶段算法中的RPN产生候选区域这一步骤,将候选区域和检测两个阶段合二为一,使得网络结构更加简单,检测速度快。

但是Anchor-Based方法在实际应用中存在一些缺点,比如:手工设计Anchor需要考虑Anchor的数量、尺寸(长宽比);在特征图上像素点密集滑动会生成的检测框会存在大量负样本区域,就需要考虑正负样本不均衡的问题;Anchor的设计导致网络超参数变多,模型学习比较困难;更换不同的数据集需要重新调整Anchor。

Anchor-Free

因此研究者提出了Anchor-Free方法,不再使用预先设定Anchor,通常通过预测目标的中心或角点,对目标进行检测。包含基于中心区域预测的方法(FCOS、CenterNet等)和基于多关键点联合表达的方法(CorNert、RepPoints等)。Anchor-Free算法不再需要设计Anchor,模型更为简单,减少模型耗时,但是精度也比Anchor-Based方法精度低。

模型结构:

R-CNN

SSD

YOLO(1, 2, 3……7)

R-FCN

猜你喜欢

转载自blog.csdn.net/weixin_49844623/article/details/129806547