【第一周】深度学习基础
🚋

【第一周】深度学习基础

1、学习笔记

2、练习实验

2.1 pytorch 基础练习

在本实验主要介绍了 Pytorch 张量类的使用, 在PyTorch中的张量Tensor与Numpy的ndarray类似。 但张量类Tensorndarray多一些重要功能: 首先,GPU很好地支持加速计算,而NumPy仅支持CPU计算; 其次,张量类支持自动微分。 这些功能使得张量类更适合深度学习。
💡
补充一下张量操作中的广播机制,在某些情况下,即使形状不同,我们仍然可以通过调用 广播机制(broadcasting mechanism)来执行按元素操作。
由于ab分别是 矩阵,如果让它们相加,它们的形状不匹配。 我们将两个矩阵广播为一个更大的 矩阵,矩阵a将复制列, 矩阵b将复制行,然后再按元素相加。
notion image
💡
还需要注意的是,运行一些操作可能会导致为新结果分配内存。 例如,如果我们用a = a + b,我们将取消引用a指向的张量,而是指向新分配的内存处的张量。
notion image
但是,我们可以使用切片表示法X[:] = X + Y或者X += Y来减少操作的内存开销,将操作的结果分配给先前分配的数组。
notion image
notion image

2.2 螺旋数据分类

在本实验中,我们首先构建了具有两个全连接层的神经网络模型,并使用交叉熵损失函数和随机梯度下降化器进行训练,并未取得满意的效果。
然后,在模型中使用ReLU激活函数,模型在复杂的数据分布中能够获得更高的分类准确率。这个结果证明了激活函数的有效性,因为它能够引入非线性变换,提升神经网络的表达能力,从而更好地适应复杂的数据分布。
notion image

3、思考总结

💡
1、AlexNet有哪些特点?为什么可以比LeNet取得更好的性能?
AlexNet 相较于 LeNet 具有以下几个特点:
  1. 多层卷积层和池化层:AlexNet包含了5个卷积层和3个池化层,这使得网络可以提取更复杂的特征表示。相比之下,LeNet只有2个卷积层和2个池化层。
  1. 使用ReLU激活函数:在AlexNet中,使用了ReLU作为激活函数,而不是传统的Sigmoid函数。ReLU函数在计算上更加高效,并且可以缓解梯度消失问题。
  1. 使用Dropout正则化:AlexNet在全连接层中引入了Dropout正则化技术,以减少过拟合的风险,提高模型的泛化能力。
  1. 数据增强:AlexNet在训练过程中使用了数据增强技术,通过对训练样本进行随机的平移、旋转、缩放等操作,增加了训练数据的多样性,有助于提高模型的鲁棒性。
💡
2、激活函数有哪些作用?
激活函数在神经网络中有以下几个作用:
  1. 增加非线性:激活函数通过映射输入数据到空间中的非线性表示来增加数据可分性,增强神经网络的表达能力,使其能够学习到更加复杂的特征和模式,从而提高分类和回归的准确性。
  1. 防止梯度消失:在多层神经网络中,激活函数的选择对梯度的消失有很大的影响,适当的激活函数可以避免梯度消失。
  1. 实现输出的范围控制:激活函数可以对神经元的输出进行限制,使其在一定范围内变化。
💡
3、梯度消失现象是什么?
梯度消失现象(Gradient Vanishing)是指在深度神经网络中,当反向传播算法计算梯度时,梯度值逐渐变小并趋近于零的现象。
💡
4、神经网络是更宽好还是更深好?
深度和宽度对于函数复杂度的贡献是不同的,深度的贡献是指数增长的,而宽度的贡献是线性增长的。所以相同神经元总数情况下,增加网络深度能过比增加网络宽度带来更强的网络表示能力。但是,过多的增加网络深度会带来梯度消失问题,因此,最终选择神经网络的宽度和深度要根据数据的特征和任务的需求来确定。
💡
5、为什么要使用Softmax?
其中, 表示原始的输出值, 表示类别的数量。
Softmax 函数是对输入值进行指数运算,这样可以将负数转化为正数,提高了差异较大的值之间的可区分性。同时,Softmax函数的输出是归一化的概率值,它将输入值映射到0到1之间,并且各个类别的概率之和为1。
因此,Softmax函数在多分类问题中起到了重要的作用,它将原始的输出值转化为概率分布,方便我们对不同类别进行分类和判断。
💡
6、SGD 和 Adam 哪个更有效?
SGD是一种基本的优化算法,它没有动量的概念。SGD每次从样本中随机选择一组数据进行训练,并根据梯度进行一次参数更新,保持一个单一的学习速率,适用于较小的数据集和较简单的模型。
Adam是一种自适应学习率的优化算法,它集成了一阶动量和二阶动量。Adam通过自适应地计算每个参数的学习率,可以更好地适应不同参数的梯度情况。
总体来说,Adam在很多情况下表现良好,特别是对于大规模数据集和复杂模型。但是,在某些情况下,SGD可能仍然是一个有效的选择,特别是在资源有限或数据较小的情况下。

4、进阶内容

🧐
本周的扩展内容主题为:CV中的注意力机制,需要学习下面论文:
  • 【CVPR2018】Non-local Neural Networks,首次把NLP中 Transformer 的注意力引入到CV领域
  • 【CVPR2018】Squeeze-and-Excitation Networks,推荐结合视频学习:SENet讲解
  • 【ECCV2018】CBAM: Convolutional Block Attention Module,推荐结合视频学习:CBAM讲解
  • 【ICCV2019】Selective Kernel Networks,推荐结合视频学习:SKNet讲解
  • 【CVPR2019】Dual Attention Network for Scene Segmentation,分别在空间维度和通道维度计算attention,然的并行
  • 【CVPR2020】ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks,推荐结合视频学习:ECANet讲解
  • 【CVPR2021】Coordinate Attention for Efficient Mobile Network Design,推荐结合视频学习:CANet讲解
2021年以后,Transformer研究逐渐成为主流,单纯研究 attention 的顶会顶刊论文就比较少了。
但是,推荐一个 github Repo: 各种Attention的pytorch实现,总结了上百篇CV论文里提到的 attention,推荐大家做为工具经常查阅。