面经----深度学习

梯度消失

梯度消失是指在深层神经网络中,随着网络层数的增加,梯度在反向传播过程中逐渐减小,最终变得非常接近于零,导致前面的隐藏层学习缓慢甚至停止更新,从而影响整个网络的性能。

梯度消失问题主要出现在使用某些特定的激活函数(如Sigmoid或Tanh)或者初始化权重过大或过小的情况下。这些激活函数在输入接近饱和区域时,梯度变得非常小,接近于零。在反向传播过程中,梯度会通过乘法传递到前面的层,导致梯度逐渐减小,从而使得前面的隐藏层的权重更新缓慢,甚至无法更新。

梯度消失的解决办法

  1. 使用适当的激活函数:选择具有更好梯度传递性质的激活函数,如ReLU、Leaky ReLU等,可以缓解梯度消失问题。

  2. 使用合适的权重初始化方法:权重初始化时避免过大或过小,可以使用Xavier初始化、He初始化等方法来确保合适的权重范围。

  3. 使用批归一化(Batch Normalization):BatchNormalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。

  4. 使用残差连接(Residual Connections):残差连接可以通过引入跨层的直接连接,使得梯度能够更轻松地传递到前面的隐藏层,缓解梯度消失问题。

模型不收敛的原因

注意,收敛并不意味着模型达到了全局最优解,有可能会陷入局部最优解。因此,收敛并不保证模型达到了最佳性能,但它表明模型已经趋于稳定,并且进一步训练的效果可能不会显著改善。

超参数的问题

学习率过大或者过小

当学习率过大时,参数的更新幅度会变得非常大,那么模型可能在最优解附近震荡,而无法稳定收敛到最优解,并且大的学习率可能导致参数跳过全局最优解。

当学习率过小时,参数的更新幅度会变得非常小,接近于零。这将导致模型的参数在训练过程中变化缓慢,而损失函数可能会停留在较高的值。

数据集问题

数据集中存在噪声、标签错误、数据不平衡等问题,都可能对模型的训练产生负面影响。

模型问题

模型复杂度过高:如果模型的复杂度过高,容量过大,而训练数据较少,可能导致过拟合现象,模型无法收敛。

Relu、Sigmoid、tanh及Softmax

适用场景

Relu和tanh多用于神经网络的隐藏层,Sigmoid多用于二分类的预测层,Softmax多用于多分类的预测层。

Relu的优点

Relu在大于0的部分梯度为常数,所以不会有梯度消失现象。Relu的导数计算的更快。

Relu在小于0的部分梯度为0,所以神经元激活值为负时,梯度为0,此神经元不参与训练,具有稀疏性。

神经网络中权重共享

卷积神经网络

在卷积层中,使用相同的卷积核对输入图像的不同区域进行卷积操作。这样可以提取图像的局部特征,并共享权重以减少参数数量。

循环神经网络

在循环层中,同一时间步和不同时间步之间的权重矩阵是共享的。这样可以利用先前时间步的信息来影响后续时间步的计算。

pytorch

整体架构

  1. Tensor(张量):PyTorch中的Tensor类似于NumPy的多维数组,是PyTorch的核心数据结构。它可以表示输入数据、模型参数和计算结果。

  2. Module(模块):Module是PyTorch中构建神经网络模型的基本单元。通过继承torch.nn.Module类,可以定义自定义的神经网络层、模型架构和正向传播函数。

  3. Autograd(自动求导):Autograd是PyTorch的自动微分引擎,用于计算张量的导数。通过构建计算图并跟踪每个操作的梯度,Autograd可以自动计算梯度并实现反向传播。

  4. Optimizer(优化器):PyTorch提供了多种优化器,如SGD、Adam等,用于优化模型的参数。优化器根据计算得到的梯度更新模型的参数,以最小化损失函数

新加一个层需要哪些步骤

  1. 定义一个新的层类:创建一个继承自torch.nn.Module的新类,实现该层的构造函数和正向传播函数。在正向传播函数中,定义该层的操作和计算逻辑。

  2. 将新层添加到模型中:在模型的构造函数中,实例化新的层对象,并将其作为成员变量添加到模型中。这样,模型就可以在正向传播过程中使用新的层。

卷积是怎么实现

卷积在PyTorch中通过torch.nn.Conv2d类实现。该类提供了二维卷积操作,可以配置卷积核的大小、步幅、填充等参数。通过将输入张量和卷积核传递给卷积层,可以执行卷积运算并生成输出张量。

多卡机制,数据并行还是模型并行

在PyTorch中,有两种常见的多卡并行训练策略:数据并行和模型并行。

  • 数据并行(Data Parallelism):数据并行将训练数据划分为多个小批次,并将每个小批次分配给不同的GPU进行处理。每个GPU上的模型副本独立地处理自己的小批次,并计算梯度。然后,梯度被收集和聚合,并用于更新模型的参数。

  • 模型并行(Model Parallelism):模型并行将模型的不同部分分配到不同的GPU上进行处理。每个GPU负责处理模型的一部分,并将结果传递给其他GPU进行下一步计算。模型并行通常在需要处理大型模型的情况下使用。

分类损失为啥用交叉熵

一般情况下,最后一个输出层的节点个数与分类任务的目标数相等。假设最后的节点数为N,那么对于每一个样本,神经网络可以得到一个N维的数组作为输出结果,数组中每一个维度会对应一个类别。在最理想的情况下,如果一个样本属于k,那么这个类别所对应的的输出节点的输出值应该为1,而其他节点的输出都为0,即[0,0,1,0,….0,0],这个数组也就是样本的Label,是神经网络最期望的输出结果,交叉熵就是用来判定实际的输出与期望的输出的接近程度。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值