【第1周】深度学习基础

1 代码练习

1.1 pytorch简介

PyTorch是一种开源的深度学习框架,它提供了丰富的工具和库,用于构建和训练神经网络模型。PyTorch由Facebook的人工智能研究团队开发并于2016年首次发布。它具有以下特点:

  1. 动态计算图:PyTorch使用动态计算图的方式来构建和跟踪神经网络的计算过程。这使得开发者能够以更直观的方式编写代码,并且能够灵活地进行模型调试和调整。

  2. 灵活性和易用性:PyTorch提供了丰富而灵活的API,使得构建、训练和部署神经网络变得简单和高效。它支持动态图和静态图的混合使用,能够适应不同的开发需求。

  3. 广泛的生态系统:PyTorch拥有庞大的生态系统,包括了大量的扩展库和工具,用于各种深度学习任务。例如,TorchVision用于计算机视觉,TorchText用于自然语言处理,TorchAudio用于音频处理等。

  4. GPU加速:PyTorch能够利用GPU的并行计算能力,加速神经网络的训练和推理过程。它提供了对CUDA的良好支持,使得在GPU上进行大规模的深度学习计算变得高效和方便。

1.2 代码

1.2.1 pytorch 基础练习

1.2.1.1 定义数据

使用torch.tensor()可以创建数、数组等。
在这里插入图片描述
在这里插入图片描述

还可以生成特殊的数组,比如0数组、1数组
在这里插入图片描述
在这里插入图片描述

1.2.1.2 定义操作

计算包括

  • 基本运算,加减乘除,求幂求余
  • 布尔运算,大于小于,最大最小
  • 线性运算,矩阵乘法,求模,求行列式
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
多生成点数据,图像会更加圆滑
在这里插入图片描述
tensor的拼接
在这里插入图片描述

1.2.2 螺旋数据分类

1.2.2.1 生成数据

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

1.2.2.2 构建线性模型分类

在这里插入图片描述
在这里插入图片描述

1.2.2.3 构建两层神经网络分类

在这里插入图片描述
在这里插入图片描述

2 问题总结

2.1 AlexNet有哪些特点?为什么可以比LeNet取得更好的性能?

在这里插入图片描述

AlexNet特点

  1. 深度网络结构:相较于LeNet,AlexNet采用了更深的网络结构,具有8个卷积层和3个全连接层。通过增加网络深度,AlexNet能够学习到更高级别的特征表示,从而提高模型的表达能力。

  2. 大型卷积核和池化层:AlexNet使用了较大的卷积核尺寸(如11x11和5x5),以及池化层。这种设计使得网络可以更好地捕捉到图像中的空间结构和局部特征,从而提高模型的感知能力和鲁棒性。

  3. ReLU激活函数:AlexNet采用了ReLU(Rectified Linear Unit)作为激活函数,相较于传统的Sigmoid函数,ReLU具有更快的计算速度和更好的梯度传播特性。这有助于加速训练过程并减轻梯度消失问题。

  4. Dropout正则化:AlexNet引入了Dropout正则化技术,通过随机丢弃一部分神经元的输出来减少过拟合。这可以提高模型的泛化能力,使其在测试集上表现更好。

为什么可以比LeNet取得更好的性能?

  1. 更深的网络结构:AlexNet相对于LeNet采用了更深的网络结构,这使得网络可以学习到更多层次的抽象特征表示。这种层次化的特征提取有助于更好地区分不同类别的图像,提高分类性能。

  2. 更大的数据集:ImageNet挑战赛中使用的数据集比LeNet时代的MNIST数据集大得多,包含数百万张图像和数千个类别。更大的数据集提供了更多的样本多样性,有助于训练更复杂的模型。

  3. 引入了一些新的技术:AlexNet引入了ReLU激活函数、Dropout正则化等新的技术,这些技术改善了模型的训练和泛化能力。ReLU的使用加速了训练过程,Dropout减少了过拟合。
    在这里插入图片描述在这里插入图片描述

2.2 激活函数有哪些作用?

  1. 引入非线性:激活函数的主要作用是引入非线性,使神经网络能够学习复杂的非线性关系。如果没有激活函数,多层神经网络将等效于单层线性模型,无法应对复杂的数据模式。

  2. 增强模型的表达能力:激活函数可以增强神经网络的表达能力,使其能够学习更复杂的函数映射。通过选择合适的激活函数,神经网络可以更好地适应不同类型的数据。

  3. 增加网络的非线性决策边界:激活函数的非线性特性可以帮助神经网络学习非线性决策边界,从而更好地分类和识别复杂的模式。

  4. 缓解梯度消失问题:某些激活函数(如ReLU)具有较大的梯度传播,可以缓解梯度消失问题,使得网络的训练更加稳定和有效。

2.3 梯度消失现象是什么?

梯度消失是指在深层神经网络中反向传播时,网络的较早层(靠近输入层)的权重更新过程中,梯度逐渐变小并趋近于零的现象。这导致这些层的参数几乎不会得到有效的更新,从而使得这些层无法充分学习和适应数据。

当使用梯度下降等优化算法进行训练时,梯度是指示参数更新方向和幅度的关键指标。在深层神经网络中,反向传播算法将梯度从输出层传播回输入层,通过链式法则逐层计算梯度。然而,这个过程中,梯度会随着层数的增加而逐渐减小。

当激活函数选择为具有较小梯度的函数时(如Sigmoid函数),梯度消失问题尤为严重。由于梯度趋近于零,参数更新的幅度很小,使得网络较早层的参数很难进行有效的调整和学习。

梯度消失的结果是,深层神经网络的较早层可能无法学习到数据中的重要特征,导致网络性能下降,甚至无法收敛到合适的解。为了缓解梯度消失问题,通常会选择具有较大梯度的激活函数(如ReLU)或使用其他技术,如批归一化、残差连接等。这些方法可以帮助梯度更好地传播,促进深层网络的训练和学习。

2.4 神经网络是更宽好还是更深好?

更宽的神经网络通常具有更多的参数,因此能够表示更复杂的函数。更宽的网络可以更好地捕捉输入数据中的细微模式和特征,因此在某些情况下,增加网络的宽度可能会提高模型的性能。然而,增加宽度也会增加计算和内存要求,可能导致训练时间变长,并且需要更多的数据来避免过拟合。

更深的神经网络通过增加层数来提供更多的抽象表示能力。深层网络能够学习更高级的特征和模式,从而在某些情况下提供更好的性能。深层网络还可以通过层层传递信息和特征,有助于建模更复杂的关系。然而,增加深度也会增加网络训练的难度,可能导致梯度消失、梯度爆炸等问题,需要适当的正则化和初始化方法来解决。
在这里插入图片描述

因此,选择更宽还是更深的神经网络应该根据具体情况进行权衡。通常的实践是先从一个相对浅而宽的网络开始,然后逐渐增加深度或宽度,直到达到满意的性能。此外,还可以利用交叉验证和实验比较不同网络结构的性能,以找到最佳的平衡点。

2.5 为什么要使用Softmax?

![在这里插入图片描述](https://img-blog.csdnimg.cn/7f35ea09fed649948d2ab759f4a7366a.png

  1. 多类别分类:Softmax函数在多类别分类问题中非常有用。它将神经网络输出的原始分数(通常称为logits)转换为概率分布,每个类别对应一个概率。这样,我们可以根据最高概率来确定最终的预测类别。
    在这里插入图片描述

  2. 概率解释:Softmax函数提供了概率化的预测结果。由于Softmax将输出值归一化到0到1之间,可以将其解释为样本属于每个类别的概率。这对于需要估计类别概率的任务(如图像分类、语言模型等)非常有用。

  3. 梯度性质:Softmax函数在反向传播过程中具有良好的梯度性质。它的导数可以使用链式法则直接计算,使得梯度传播更加稳定和可靠。

  4. 对比度增强:Softmax函数在较大的输入值上表现出对比度增强的特性。它会对相对较大的分数施加较大的权重,从而加强对最大分数类别的预测,并削弱其他类别的影响。这对于训练模型更加关注置信度较高的类别是有益的。

2.6 SGD 和 Adam 哪个更有效?

SGD是一种基本的优化算法,它在每个训练样本上计算梯度并更新参数。SGD的优点是简单、易于实现,并且在处理大规模数据时具有较低的内存消耗。然而,SGD可能受到梯度的噪声和不稳定性影响,因此可能需要较小的学习率和更多的训练迭代才能收敛到最优解。

Adam是一种自适应学习率优化算法,结合了动量方法和自适应学习率调整。它根据梯度的一阶矩估计和二阶矩估计自适应地调整学习率。Adam具有更好的收敛性和学习率自适应性,适用于训练深层神经网络和处理复杂的非凸优化问题。Adam通常能够快速收敛,并且在许多情况下表现良好。

因此,选择SGD还是Adam取决于具体的情况。通常的实践是先尝试Adam算法,因为它在大多数情况下表现良好。如果Adam表现不佳,可以尝试使用SGD,并进行一些参数调整,如学习率的调整、批次大小的调整等。最终的选择应基于实验比较和交叉验证来确定哪种优化算法在特定问题上更有效。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值