视觉算法面试问题

1.ResNet有哪几层?并详细介绍一下

有18,34,50,101,152

Resnet参数量比VGGNet低,效果非常突出。ResNet的结构可以极快的加速神经网络的训练,模型的准确率也有比较大的提升。

ResNet网络中有如下几个亮点:

  • 提出residual结构(残差结构),并搭建超深的网络结构(突破1000层)
  • 使用Batch Normalization加速训练(丢弃dropout)

在ResNet网络提出之前,传统的卷积神经网络都是通过将一系列卷积层与下采样层进行堆叠得到的。但是当堆叠到一定网络深度时,就会出现两个问题。

  1. 梯度消失或梯度爆炸。
  2. 退化问题(degradation problem)。

BN(Batch Normalization)层能够解决梯度消失或者梯度爆炸问题,提出了residual结构(残差结构)来减轻退化问题

右侧残差结构可以明显减少参数量

resnet18,34使用左侧残差结构,后面大的层数使用右侧残差结构

isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。

2.激活函数的作用?有哪些激活函数?

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的,这种情况就是最原始的感知机(Perceptron)。

使用激活函数能够给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,使深层神经网络表达能力更加强大,这样神经网络就可以应用到众多的非线性模型中。

激活函数一般可分为饱和激活函数和非饱和激活函数:

饱和激活函数:(满足条件:趋于无穷时,导数接近于0)

 Sigmoid函数需要一个实值输入压缩至[0,1]的范围        tanh函数需要讲一个实值输入压缩至 [-1, 1]的范围

非饱和激活函数优势在于两点:

    1.非饱和激活函数能解决深度神经网络(层数非常多)带来的梯度消失问题

    2.使用非饱和激活函数能加快收敛速度

什么情况下适合使用Sigmoid?

Sigmoid 函数的输出范围是 0 到 1。非常适合作为模型的输出函数用于输出一个0~1范围内的概率值,比如用于表示二分类的类别或者用于表示置信度。

梯度平滑,便于求导,也防止模型训练过程中出现突变的梯度

Sigmoid有哪些缺点?

容易造成梯度消失。我们从导函数图像中了解到sigmoid的导数都是小于0.25的,那么在进行反向传播的时候,梯度相乘结果会慢慢的趋向于0。这样几乎就没有梯度信号通过神经元传递到前面层的梯度更新中,因此这时前面层的权值几乎没有更新,这就叫梯度消失。除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。如果初始化权重过大,可能很多神经元得到一个比较小的梯度,致使神经元不能很好的更新权重提前饱和,神经网络就几乎不学习。

函数输出不是以 0 为中心的,梯度可能就会向特定方向移动,从而降低权重更新的效率

Sigmoid 函数执行指数运算,计算机运行得较慢,比较消耗计算资源。

 与sigmoid不同的是,tanh是“零为中心”的。因此在实际应用中,tanh会比sigmoid更好一些。但是在饱和神经元的情况下,tanh还是没有解决梯度消失问题。

什么情况下适合使用Tanh?

tanh 的输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好;

在 tanh 图中,负输入将被强映射为负,而零输入被映射为接近零。

Tanh有哪些缺点?

仍然存在梯度饱和的问题

依然进行的是指数运算

什么情况下适合使用ReLU?

ReLU解决了梯度消失的问题,当输入值为正时,神经元不会饱和

由于ReLU线性、非饱和的性质,在SGD中能够快速收敛

计算复杂度低,不需要进行指数运算

ReLU有哪些缺点?

与Sigmoid一样,其输出不是以0为中心的

Dead ReLU 问题。当输入为负时,梯度为0。这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新

训练神经网络的时候,一旦学习率没有设置好,第一次更新权重的时候,输入是负值,那么这个含有ReLU的神经节点就会死亡,再也不会被激活。所以,要设置一个合适的较小的学习率,来降低这种情况的发生

3.有哪些归一化方式,并说说作用与区别:

归一化(Normalization)技术是一种重要的预处理步骤或网络层设计,用于改善数据分布,从而加速训练过程并提高模型的性能。以下是一些常见的归一化方法:

  1. 批量归一化(Batch Normalization, BN)

    • 在每个小批量(batch)上独立进行归一化处理,使得网络中的每一层输入都具有均值为0、方差为1的分布。BN有助于缓解梯度消失/爆炸问题,并且能够一定程度上起到正则化作用。
  2. 实例归一化(Instance Normalization, IN)

    • 对于一个样本中的所有特征图分别进行归一化,通常用于图像生成任务中,如风格迁移等。与BN不同,IN关注的是单个样本内部特征的一致性。
  3. 层归一化(Layer Normalization, LN)

    • 对于一个样本中的每个训练批次的所有特征进行归一化,适用于循环神经网络(RNNs)和变体如长短期记忆网络(LSTMs)。LN对于解决RNNs中的长期依赖问题特别有用。
  4. 组归一化(Group Normalization, GN)

    • 将特征图分成若干组,在组内进行归一化。这种方法结合了BN和IN的优点,适用于小批量训练场景。
  5. 批重标定(Batch Renormalization, BR)

    • 是BN的一种改进版本,允许在测试时的小批量数据上对BN统计量进行修正,以减少BN在小批量数据上的不稳定性。
  6. 权重归一化(Weight Normalization, WN)

    • 不是针对激活值而是直接对模型的权重进行归一化,可以简化参数的学习动态。WN通过将权重分解成方向和大小两部分来实现。
  7. 谱归一化(Spectral Normalization, SN)

    • 主要应用于对抗生成网络(GANs),通过对模型的权重施加约束来稳定训练过程。SN限制了权重矩阵的最大奇异值。

4.深度学习中有哪些常见的评估指标:

在深度学习中,评估模型的性能是至关重要的。不同的任务类型(如分类、回归、序列预测等)可能需要不同的评估指标。以下是一些常用的任务及其相关的评估指标:

### 分类任务
- **准确率(Accuracy)**:正确预测的样本数占总样本数的比例。
- **精确率(Precision)**:真正例(True Positives, TP)占所有被预测为正例的样本的比例
- **召回率(Recall)**:真正例(TP)占所有实际为正例的样本的比例。
- **F1分数(F1 Score)**:精确率和召回率的调和平均数,适用于不平衡数据集。
- **AUC-ROC曲线下的面积(Area Under the ROC Curve, AUC-ROC)**:衡量模型区分正负样本的能力。
- **混淆矩阵(Confusion Matrix)**:显示预测结果与实际类别之间的关系,帮助理解模型在各个类别的表现
- **多标签分类**:Hamming Loss、Jaccard Index、One Error、Coverage Error等。

### 回归任务
- **均方误差(Mean Squared Error, MSE)**:预测值与真实值之间差的平方的均值。
- **均方根误差(Root Mean Squared Error, RMSE)**:MSE的平方根。
- **平均绝对误差(Mean Absolute Error, MAE)**:预测值与真实值之间差的绝对值的均值。
- **R²分数(Coefficient of Determination, R²)**:表示模型解释了数据中多少变异性的比例。

### 物体检测任务
- **平均精度(Average Precision, AP)**:针对每个类别的精度-召回率曲线下面积。
- **平均平均精度(Mean Average Precision, mAP)**:所有类别AP的平均值。

### 序列到序列任务(如机器翻译)
- **BLEU(Bilingual Evaluation Understudy)**:比较机器翻译结果与参考译文的相似度。
- **ROUGE(Recall-Oriented Understudy for Gisting Evaluation)**:主要用于评估自动摘要的质量。

### 强化学习
- **累计奖励(Cumulative Reward)**:在一定时间内智能体获得的奖励总和。
- **折扣因子(Discount Factor)**:影响未来奖励的重要性。
- **探索与利用平衡(Exploration vs Exploitation)**:评估策略在未知环境下的适应能力。

选择合适的评估指标对于理解和优化深度学习模型至关重要。实际应用中,可能会根据具体的业务需求和问题背景选择一个或多个指标来进行综合评估。

4.先加BN还是激活,有什么区别:

BN在激活之前的优点

  • 数值稳定性:对于一些激活函数(比如ReLU),如果输入分布中有大量的负数,会导致大量的梯度消失(即许多神经元输出为零)。
  • 加速收敛:加快训练速度

BN在激活之后的影响

  • 非线性变换:如果BN放在激活之后,那么归一化的对象将是经过非线性变换后的结果,这可能会导致归一化的效果不如直接归一化原始特征那样明显。
  • 数值稳定性:对于某些激活函数,如ReLU,如果BN放在激活之后,可能会导致归一化后仍然存在大量零值,影响后续层的学习效果。

实际上,BN通常是在全连接层或卷积层之后,激活函数之前插入的。这种做法有几个好处:

  • 保持梯度流动:由于BN层可以看作是一个线性变换,将其放在激活函数前面可以确保梯度可以通过BN层顺利地传递回网络的早期层。
  • 避免饱和:对于像sigmoid或tanh这样的饱和激活函数,如果BN放在激活之后,可能导致输出处于饱和区域,使得梯度接近于零。BN放在激活之前可以帮助缓解这个问题。
  • 规范化输入:BN层帮助将输入规范化到一个稳定的分布,这有助于激活函数更好地工作。

多头自注意力机制(Multi-Head Self-Attention Mechanism)是Transformer模型中一个关键的组件,它允许模型在处理输入数据时,从不同的表示子空间中并行地学习信息。以下是多头自注意力机制的一些核心概念和工作原理:

核心概念

  • 查询(Query)、键(Key) 和 值(Value):

    • 在自注意力机制中,每个输入元素都会被转换成三个向量:查询(Query)、键(Key)和值(Value)。查询向量用于提出“问题”,键向量则包含对问题的回答,而值向量则是最终的答案内容。
  • 自注意力(Self-Attention):

    • 自注意力是指每个位置的输出都是所有位置的加权求和,其中权重是由查询与对应位置的键之间的点积计算得出的。权重通过softmax函数进行归一化,确保它们之和为1。

工作原理

  1. 线性变换:

    • 对于输入序列中的每个元素,分别应用三个不同的线性变换(即通过三个不同的矩阵W_Q, W_K, W_V)得到查询(Query)、键(Key)和值(Value)向量。
  2. 注意力得分计算:

    • 计算查询向量Q与键向量K之间的点积,得到一个得分矩阵。这个得分矩阵反映了输入序列中各个位置之间的相关性。
  3. Softmax归一化:

    • 将得分矩阵通过softmax函数进行归一化,得到注意力权重矩阵。这些权重表明了在计算某个位置的输出时,应该赋予其他位置多少重要性
  4. 上下文向量计算:

    • 使用得到的注意力权重矩阵与值向量V相乘,得到上下文向量C,该向量包含了来自整个序列的信息。
  5. 多头机制:

    • 为了捕捉输入数据中不同类型的依赖关系,多头自注意力将上述过程重复多次,每次使用不同的线性变换矩阵。这样就可以从多个角度(或子空间)来学习输入序列的表示
  6. 连接与线性变换:

    • 将多个头部产生的上下文向量拼接起来,形成一个多维向量,然后再次应用线性变换,得到最终的输出向量。

多头自注意力机制通过并行执行多个自注意力操作,使得模型能够在单个层中捕获输入数据中多种粒度的信息。这种方式不仅提高了模型的表达能力,还增加了模型的灵活性

  1. 位置编码的作用是什么?

    • 位置编码被添加到输入嵌入中,以便模型可以区分序列中不同位置的信息。因为自注意力机制本身没有位置意识,所以位置编码提供了必要的位置信息。

梯度消失原因

  1. 激活函数的选择:传统上,神经网络中常用的激活函数如Sigmoid或Tanh,其导数范围有限(例如Sigmoid的导数最大为0.25,Tanh的最大导数为1)。当网络很深时,梯度通过多个激活函数的导数相乘,很容易变得非常小。
  2. 权重初始化不当:如果初始权重过大或过小,也会导致梯度消失。
解决方法
  1. 选择合适的激活函数:使用ReLU(Rectified Linear Unit)或其他类似激活函数可以有效缓解梯度消失问题,因为它们的导数在正区间内恒为常数,不会减小梯度。
  2. 权重初始化:采用合理的权重初始化策略,如Xavier/Glorot初始化或He初始化,可以使权重分布更适合激活函数的工作范围。
  3. 残差连接/跳跃连接:ResNet等网络结构通过引入残差块,使梯度可以直接跳过几层传递,从而减轻梯度消失现象。
  4. 批量归一化(Batch Normalization):BN层可以在一定程度上缓解梯度消失问题,因为它能保持层间输入的分布稳定。

梯度爆炸原因

  1. 权重过大:如果权重设置得太大,反向传播时的梯度也会变得很大。
  2. 激活函数的性质:某些激活函数(如ReLU)在特定条件下可能会放大梯度,导致梯度爆炸。
  3. 数据不平衡:如果输入数据具有较大的波动性,可能会导致某些层的梯度异常增大。
解决方法
  1. 梯度裁剪(Gradient Clipping):限制梯度的最大范数,防止梯度过大。
  2. 权重正则化:使用L1或L2正则化项可以惩罚过大的权重,从而控制梯度大小。
  3. 使用长短期记忆网络(LSTM)或门控循环单元(GRU):这些模型设计了专门的机制来控制长期依赖,从而避免梯度爆炸。
  4. 批量归一化(Batch Normalization):类似于梯度消失问题,BN也可以帮助稳定梯度。
  5. 改进优化算法:使用自适应学习率的方法,如Adam、RMSprop等,它们能够动态调整学习率,从而缓解梯度爆炸问题。

总结

梯度消失和梯度爆炸是训练深层神经网络时需要特别注意的问题。通过选择合适的激活函数、权重初始化方法、网络结构设计、正则化技术以及优化算法等手段,可以有效地缓解这些问题。在实际应用中,通常需要综合运用多种方法来达到最好的效果。

可以介绍一下什么是支持向量机嘛(SVM):

支持向量机(Support Vector Machine,简称SVM)是一种监督学习算法,广泛用于分类和回归任务。SVM 的核心思想是找到一个最优的超平面(在二维空间中是一条线,在三维空间中是一个平面,更高维度则是超平面),该超平面能够最好地将不同类别的数据点分开。对于分类问题,这个超平面应该最大化不同类别之间的间隔(margin),从而提高模型的泛化能力。

RNN(循环神经网络)、LSTM(长短期记忆网络)和Transformer都是处理序列数据的深度学习模型,但它们在结构和工作机制上有所不同。下面是这三种模型的主要区别:

RNN (Recurrent Neural Network)

结构与工作原理:

  • RNN 是一种能够处理序列数据的神经网络,它通过在网络中引入反馈连接来保持内部状态。
  • 在每个时间步,RNN 接收一个输入 xtxt​ 和前一时刻的状态 ht−1ht−1​,然后计算当前时刻的状态 htht​ 和输出 ytyt​。
  • 状态 htht​ 作为下一个时间步的输入,使得 RNN 能够捕捉到序列中的时序信息。

优点:

  • 能够处理可变长度的序列数据。
  • 具有记忆功能,可以捕捉到序列中的依赖关系。

缺点:

  • 长期依赖问题:由于梯度消失或梯度爆炸,RNN 很难学习长期依赖关系。
  • 计算效率低:顺序处理使得并行化困难。

LSTM (Long Short-Term Memory)

结构与工作原理:

  • LSTM 是 RNN 的一种变体,专门设计来解决 RNN 的长期依赖问题。
  • LSTM 通过引入复杂的门控机制(输入门、遗忘门和输出门)来控制信息的流动。
  • 这些门允许 LSTM 学习哪些信息需要保留,哪些信息需要丢弃,从而有效地管理长期依赖关系。

优点:

  • 解决了 RNN 的长期依赖问题,能够更好地捕捉长时间间隔的信息。
  • 适用于多种序列任务,如语言建模、机器翻译等。

缺点:

  • 结构复杂,参数量大,训练时间较长。
  • 仍然存在一定的计算效率问题,不如 Transformer 并行化程度高。

Transformer

结构与工作原理:

  • Transformer 是一种基于自注意力机制(Self-Attention Mechanism)的模型,最初是为了解决序列到序列的任务而设计的。
  • 自注意力机制允许模型在处理序列时,同时考虑序列中的所有位置,而不是像 RNN 和 LSTM 那样逐个时间步处理。
  • Transformer 由编码器和解码器组成,每个部分都包含多头自注意力层和前馈神经网络层。
  • 编码器将输入序列转换为一系列隐藏表示,解码器使用这些表示生成输出序列。

优点:

  • 并行化:由于自注意力机制,Transformer 可以完全并行化,大大提高了训练速度。
  • 长距离依赖:自注意力机制天然支持长距离依赖,不需要像 RNN 或 LSTM 那样依赖于递归结构。
  • 灵活性:Transformer 不仅可以用于自然语言处理,还可以应用于计算机视觉等领域。

缺点:

  • 计算资源需求:Transformer 模型通常非常庞大,需要大量的计算资源和内存。
  • 位置信息:自注意力机制本身不包含位置信息,因此需要额外的位置编码来提供序列中的位置信息。

总结

  • RNN 适合处理短序列,但由于梯度消失/爆炸问题,在长序列上的表现不佳。
  • LSTM 通过门控机制解决了 RNN 的长期依赖问题,适用于更长的序列,但结构复杂且计算效率较低。
  • Transformer 通过自注意力机制实现了高效的并行处理,并能很好地处理长距离依赖,但在计算资源和内存方面要求较高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值