深度学习面试八股文(2023.9.06)

一、优化器

1、SGD是什么?

  • 批梯度下降(Batch gradient descent):遍历全部数据集算一次损失函数,计算量开销大,计算速度慢,不支持在线学习。
  • 随机梯度下降(Stochastic gradient descent,SGD)每次随机选择一个数据计算损失函数,求梯度并更新参数,计算速度快,但收敛性能可能不太好。
  • 批量随机梯度下降(Min-batch SGD):用小批量样本来近似全部,将样本分为m个mini-batch,每个mini-batch包含n个样本。
  • 使用动量(Momentum)的随机梯度下降法(SGD): 在随机梯度的学习算法中,每一步的步幅都是固定的,而在动量学习算法中,每一步走多远不仅依赖于本次的梯度大小还取决于过去的速度。速度是累积各轮训练参数的梯度。动量主要解决SGD的两个问题:一是随机梯度方法引入的噪声;二是Hessian矩阵病态问题,可以理解为SGD在收敛过程中和正确梯度相比来回摆动比较大的问题。

2、简单介绍下Adam算法

RMSprop将学习率分解成一个平方梯度的指数衰减的平均。Adam中动量直接并入了梯度一阶矩(指数加权)的估计。其次,相比于缺少修正因子导致二阶矩估计可能在训练初期具有很高偏置的RMSProp,Adam还包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩估计。本质上是带有动量项的RMSProp,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要是经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

3、Adam和SGD的区别

  • SGD缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。
  • Adam的优点主要在于:①考虑历史步中的梯度更新信息,能够降低梯度更新噪声。②此外经过偏差和校正后,每一次迭代学习率都有个确定单位,使得参数比较平稳。
  • 但Adam可能对前期出现的特征过拟合,后期才出现的特征很难纠正前期的拟合效果。且SGD和Adam都没法很好的避免局部最优问题。

二、过拟合

1、过拟合指什么?造成的原因是什么?解决方法有哪些?

  • 定义:模型在训练集上表现很好,但在测试集和新数据上表现很差。
  • 出现的原因:①模型的复杂度过高、参数过多②训练数据比较小 ③训练集和测试集的分布不一致④样本里面的噪声数据干扰过大,导致模型过分记住了噪声特征
  • 解决方法:①降低模型的复杂度 ②数据增强 ③正则化(l1, l2, dropout)④早停

2、过拟合与欠拟合的比较

过拟合:模型在训练集上表现很好,但在测试集和新数据上表现很差。输出结果高方差Variance,模型很好的适配训练样本,但在测试集上表现很糟,有一个很大的方差。 

欠拟合:模型在训练集和测试机上的性能都较差,输出结果高偏差bias,模型不能适配训练样本,有很大的偏差。

3、偏差和方差的区别

  • 偏差:偏差度量了学习算法的期望预测和真实结果的偏离程度,刻画了学习算法本身的拟合能力。
  • 方差:方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。

三、归一化

1、批量归一化(BN)是什么?有什么作用?

  • 批量归一化(BN)的计算公式如下:

  • 作用:加快网络的训练与收敛的速度;控制梯度爆炸,防止梯度消失。

2、训练与推理时BN中的均值、方差计算差异是什么?

  • 训练时,均值、方差分别是该批次内数据相应维度的均值和方差。
  • 推理时,均值、方差是基于所有批次的期望计算得到的。其中在推理时所用的均值和方差时通过移动平均计算得到的,可以减少存储每个batch均值方差的内存。

3、LN(layer normalization)和BN的区别

LN和BN相比,只考虑单个sample内的统计变量,因此也不用使用BN实现中的running mean, running var。LN也完全不用考虑输入batch_size的问题。

4、transformer中为什么不适用BN归一化?

  • 一种解释是,cv和nlp数据特性不同,对于nlp数据,前向和反向传播中,batch统计量及其梯度都不太稳定,一个batch中每个句子对应位置分量不一定有意义。
  • 要能在某个维度做独立同分布假设,才能合理归一化。对于cv来说,batch之间的图像是独立的,但nlp的文本本质上可以看成一个时间序列,而时间序列是不定长的,长度不同的序列原则上属于不同的统计对象,所以很难得到稳定的统计量,得不到稳定的统计量,BN就无法成立,因为BN依靠滑动平均来获得一组预测用的统计量。

5、梯度消失和梯度爆炸的主要原因

  • 梯度消失:主要是网络层较深,其次是采用了不合适的损失函数,会使得靠近输入层的参数更新缓慢。导致在训练时,只等价于后面几层的浅层网络的学习。
  • 梯度爆炸:一般出现在深层网络和权值初始化值太大的情况下。在深层神经网络或循环神经网络中,误差的梯度可在更新中累积相乘。如果网络层之间的梯度值大于1.0,那么重复相乘会导致梯度呈指数级增长,梯度会变得非常大,然后导致网络权重的大幅更新,并因此使网络变得不稳定。梯度爆炸会使得训练过程中,权重的值变得非常大,以至于溢出,导致模型损失变成NaN等。
  • 解决方法:梯度剪切,对梯度设定阈值,权重正则化,BN,残差网络的捷径(shortcut)

6、Pytorch中的乘法

  • 数乘运算:torch.mul
  • 向量点积:torch.dot,计算两个张量的点乘积(内积),两个张量都为一维向量。
  • 矩阵乘运算:torch.mm, 输入的两个tensor shape分别使n x c, c x m,输出使n x m;
  • torch.matmul,对二维张量执行的操作就是torch.mm, 此外还可以用于高维张量运算。
  • @符号乘法相当于矩阵乘torch.mm,严格按照第一个参数的列数要等于第二个参数的行数。

四、神经网络

1、什么是卷积网络?

对图像和滤波矩阵做内积的操作就是卷积操作。

其中图像是指不同的数据窗口数据;滤波矩阵是指一组固定的权重,因为每个神经元的多个权重固定,所以又可以看作一个恒定的滤波器fliter;内积是指逐个元素相乘再求和的操作。

2、什么是CNN的池化pooling层?

池化是指取区域平均或者最大,即平均池化或最大池化。

上图所展示的是取区域最大,即上图左边部分中 左上角2x2的矩阵中6最大,右上角2x2的矩阵中8最大,左下角2x2的矩阵中3最大,右下角2x2的矩阵中4最大,所以得到上图右边部分的结果:6 8 3 4

3、如何确定CNN的卷积核通道数和卷积输出层的通道数?

CNN的卷积核通道数 = 卷积输入层的通道数

CNN的卷积输出层通道数 = 卷积核的个数

4、简述下什么是生成对抗网络(GAN)?

假设有两个模型,一个是生成模型(Generative Model,下文简写为G),一个是判别模型(Discriminative Model,下文简写为D),判别模型(D)的任务就是判断一个实例是真实的还是由模型生成的,生成模型(G)的任务是生成一个实例来骗过判别模型(D),两个模型相互对抗,最终使得生成模型生成的实例域真实的没有区别,判别模型无法区分自然的还是模型生成的。

5、简要介绍下tensorflow的计算图?

 tensorflow的计算图也叫数据流图。数据流图用节点(nodes)和边(edges)的有向图来描述数学计算。节点一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点和输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“边”表示“节点”之间的输入/输出关系,这些数据“边”可以输运“size可动态调整”的多维数据数组,即“张量tensor”。张量从图中流过的直观图像是这个工具取名为“tensorflow"的原因。一旦输入端的所有张量都准备好,节点将被分配到各种计算设备完成异步并行地执行运算。

6、有哪些深度学习(RNN、CNN)调参的经验?

CNN调参主要是在优化函数、emdbedding 的维度、以及残差网络的层数几个方面。

  • 优化函数方面有两个选择:SGD,Adam,相对来说Adam要简单很多,不需要设置参数,效果也还不错。
  • embedding随着维度的增大会出现一个最大值点,也就是开始时是随维度的增加效果逐渐比那好,到达一个点后,而后随维度的增加,效果会变差。
  • 残差网络的层数与embedding的维度有关系,随层数测增加,效果变化也是一个凸函数。
  • 可能包含激活函数、dropout层和BN层的使用。激活函数推荐使用relu, dropout层数不宜设置过大,过大会导致不收敛,调节步长可以是0.05,一般调整到0.5或0.5就可以找到最佳值。

7、为什么不同的机器学习领域都可以使用CNN,CNN解决了这些领域哪些共性问题?他是如何解决的?

CNN的关键是卷积运算,卷积核和卷积输入层进行局部连接可以获取整个输入的局部特征信息或者说是每个输入特征的组合特征。所以CNN的本质是完成了特征提取或者说是对原始特征的特征组合工作,从而增加模型的表达能力。不同领域的机器学习都是通过数据的特征进行建模,从而解决该领域的问题。故CNN解决了不同领域的特征提取问题,所用的方法是基于局部连接/权值共享/池化操作/多层次结构。

8、LSTM结构为什么比RNN好?

LSTM有forget gate, input gate, cell state, hidden information等的变化;因为LSTM有进有出,且当前的cell information是通过input gate控制之后叠加的,RNN是叠乘,因此LSTM可以防止梯度小时或者爆炸。

9、Sigmoid, Tanh, Relu这三个激活函数有什么有优点和缺点?

  • sigmoid函数,①优点:输出范围在(0,1)之间,适合用于二分类问题,可以将输出解释为概率;具有平滑的导数,可以利用梯度下降等优化算法进行训练。②缺点:sigmoid函数存在梯度饱和问题,当输入很大或很小时,梯度接近于零,导致梯度消失,训练速度变慢;且sigmoid输出不是以零为中心的,这可能导致神经网络在训练过程中不稳定;计算sigmoid函数的指数运算较为昂贵。
  • Tanh函数:①优点:输出范围在(-1,1),相对于sigmoid,均值更接近零,有助于减轻梯度消失问题;具有平滑的导数,可用于梯度下降等优化算法。②缺点:仍然存在梯度饱和的问题,当输入很大或很小时,梯度接近于零,导致梯度消失。计算Tanh函数的指数运算也较为昂贵。
  • Relu函数(Rectified Linear Unit):①优点:计算简单,只需比较输入是否大于零,因此训练速度快。相比于前两种激活函数,relu函数激活时不会饱和,避免了梯度消失问题。②缺点:部分神经元可能会“死亡”(输出始终为零,不更新),这会导致网络的稀疏性;Relu对于负数输入的梯度为零,这可能导致梯度爆炸问题,输出不受限制,可能会导致梯度爆炸问题。
  • 为了克服以上缺点,研究人员开发了各种改进的激活函数,如Leaky Relu, Parametric Relu,ELU和Swish等。这些函数在一定程度上解决了梯度饱和、梯度爆炸和神经元死亡等问题。

10、为什么引入非线性激励函数?

深度学习的前提是神经网络的隐层加上了非线性激活函数,提升了模型的非线性表达能力,使得神经网络可以逼近任意复杂的函数。假设有一个100层的全连接神经网络,其隐层的激活函数都是线性的,则从输入层到输出层实际上可以用一层全连接来等价替换,这样无法实现真正的深度学习。举例:线性函数 f(x)=2x+3 对 x 经过三次相同的线性变换等价于对 x 只进行一次线性变换:f(f(f(x)))=2(2(2x+3)+3)+3=8x+21。

11、为什么LSTM模型既存在sigmoid又存在tanh两种激活函数,而不是选择统一一种sigmoid或者tanh?这样做的目的是什么?

  • sigmoid函数用在了各种gate上,产生0-1之间的值,这个一般只有sigmoid最直接了,相当于要么是1被记住,要么是0被忘带。
  • tanh用在了状态和输出上,是对数据的处理,这个用其他激活函数或许可以。

12、如何解决RNN梯度爆炸和弥散的问题?

为了解决梯度爆炸问题,Thomas Mikolov首先提出了简单的启发性解决方案,就是当梯度大于定阈值时,将它截断为一个较小的数。

13、什么样的数据集不适合用深度学习?

  • 数据集太小,数据集样本不足时,深度学习相比于其他机器学习,没有明显优势
  • 数据集没有局部相关特性,目前深度学习表现比较好的领域主要是图像/语音/自然语言处理等,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不适于使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影响相关的结果。

14、广义线性模型是怎样应用在深度学习中的?

深度学习从统计学角度,可以看作递归的广义线性模型。广义线性模型相对于经典的线性模型,核心在于引入了连接函数g(.),形式变为y=g−1(wx+b)。深度学习时递归的广义线性模型,神经元的激活函数,即广义线性模型的连接函数。逻辑回归(广义线性模型的一种)的Logistic函数即为神经元激活函数中的sigmoid函数,很多类似的方法在统计学和神经网络中的名称不一样,容易引起困惑。

15、神经网络的简单发展史

  • sigmoid会饱和,造成梯度消失。于是有了ReLU。
  • ReLU负半轴是死区,造成梯度变0。于是有了LeakyReLU,PReLU。
  • 强调梯度和权值分布的稳定性,由此有了ELU,以及较新的SELU。
  • 太深了,梯度传不下去,于是有了highway。
  • 干脆连highway的参数都不要,直接变残差,于是有了ResNet。

16、神经网络中激活函数的真正意义?

  • 非线性:即导数不是常数。这个条件是多层神经网络的基础,保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。
  • 几乎处处可微:可微性保证了在优化中梯度的可计算性。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响。
  • 计算简单:非线性函数有很多。极端的说,一个多层神经网络也可以作为一个非线性函数,类似于Network In Network[2]中把它当做卷积操作的做法。但激活函数在神经网络前向的计算次数与神经元的个数成正比,因此简单的非线性函数自然更适合用作激活函数。这也是ReLU之流比其它使用Exp等操作的激活函数更受欢迎的其中一个原因。

17、深度神经网络容易收敛到局部最优,为什么应用广泛?

深度神经网络“容易收敛到局部最优”,很可能是一种想象,实际情况是,我们可能从来没有找到过“局部最优”,更别说全局最优了。很多人都有一种看法,就是“局部最优是神经网络优化的主要难点”。这来源于一维优化问题的直观想象。在单变量的情形下,优化问题最直观的困难就是有很多局部极值。

18、如何确定是否出现梯度爆炸?

  • 模型无法从训练数据中获得更新,如低损失
  • 模型不稳定,导致更新过程中损失出现显著变化
  • 训练过程中,模型损失变为NaN

19、GRU和LSTM的区别? 

GRU是Gated Recurrent Units,是循环神经网络的一种。

  • GRU只有两个门(update和reset),GRU直接将hidden state 传给下一个单元。
  • LSTM有三个门(forget,input,output),LSTM用memory cell 把hidden state 包装起来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/132180.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机竞赛 机器视觉opencv答题卡识别系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 答题卡识别系统 - opencv python 图像识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分…

电压放大器的应用范围有哪些

电压放大器是一种常见的电子设备,用于将输入信号的电压放大到更高的水平。它在各个领域中具有广泛的应用范围。本文将详细介绍电压放大器的应用。 音频放大器: 电压放大器在音频系统中起着重要作用,用于将来自音源(如CD播放器、MP…

清华智能体宇宙火了;主流大语言模型的技术原理细节

🦉 AI新闻 🚀 清华智能体宇宙火了 摘要:清华大学联合北邮、微信团队推出了AgentVerse,这是一个可以轻松模拟多智能体宇宙的环境。它专为大语言模型开发,智能体可以利用LLM能力完成任务。AgentVerse提供了几个示例环境…

Linux使用正则匹配配置文件有效内容

cat /etc/libvirt/libvirtd.conf|egrep -v "^#|^$" 这个正则表达式是在使用grep命令进行文本匹配过滤。下面是对该正则表达式的解释: ^#:^表示行的开头,#表示一个井号符号。这个部分匹配以井号开头的行。^$:$表示行的结…

聚精品,通全球 2024中国(杭州)国际电商物流包装产业展览会四月隆重开幕

2024中国(杭州)国际电商物流包装产业展览会 2024年4月12-14日 | 杭州国际博览中心 同期举办:2024长三角快递物流供应链与技术装备展览会(杭州) 2024中国(杭州)国际数字物流技术与应用展览会 展会…

Unity 课时 4 : No.4 模拟面试题

课时 4 : No.4 模拟面试题 C# 1. 请说明字符串中 string str null string str “” string str string.Empty 三者的区别 第一个未作初始化没有值, 第二个为空字符串, 答案: str null 在堆中没有分配内存地址 str "" 和 string.Empty 一样都是…

《打造高可用PostgreSQL:策略与工具》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

ChatGPT帮助一名儿童确诊病因,之前17位医生无法确诊

9月13日,Today消息,一位名叫Alex的4岁儿童得了一种浑身疼痛的怪病,每天需要服用Motrin(美林)才能止痛。3年的时间,看了17名医生无法确诊病因。(新闻地址:https://www.today.com/heal…

【Vue2.0源码学习】生命周期篇-初始化阶段(initState)

文章目录 1. 前言2. initState函数分析3. 初始化props3.1 规范化数据3.2 initProps函数分析3.3 validateProp函数分析3.4 getPropDefaultValue函数分析3.5 assertProp函数分析 4. 初始化methods5. 初始化data6. 初始化computed6.1 回顾用法6.2 initComputed函数分析6.3 defineC…

java 咖啡餐厅管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 咖啡餐厅管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…

四叶草clover配置工具:Clover Configurator for Mac

Clover Configurator是一款Mac上的工具,用于配置和优化Clover引导加载器。Clover引导加载器是一种用于启动macOS的开源引导加载器。它允许用户在启动时选择操作系统和配置启动选项。 Clover Configurator提供了一个可视化的界面,让用户可以轻松地编辑和…

Java时间复杂度和空间复杂度(详解)

目录 1.复杂度分析 2.时间复杂度 大O的渐进表示法 3.空间复杂度 1.复杂度分析 当我们设计一个算法时,怎样衡量其好坏? 算法在编写为可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此,衡量一…

使用新版Maven-mvnd快速构建项目

目前我们项目的构建方式多数是 maven、gradle,但是 maven 相对 gradle 来说,构建速度较慢,特别是模块相对较多的时候,构建速度更加明显。但是我们将项目由 maven 替换为 gradle 相对来说会比较麻烦,成本较高。于是我们…

Qt的ui文件不能简单复制

在使用vsQt开发时,直接复制另外一个widget类的ui文件,简单改名成当前类对应的ui文件,会导致编译出错。尽可能使用添加的Qt class自带的ui文件,因为ui文件的配置文件中有许多与当前类相关的字符串,简单复制容易报错。

二刷力扣--字符串

字符串 摘自Python文档-标准库: 在Python中, 字符串是由 Unicode 码位构成的不可变序列。 由于不存在单独的“字符”类型,对字符串做索引操作将产生一个长度为 1 的字符串。 也就是说,对于一个非空字符串 s, s[0] s[0:1]。 不存…

分布式调度 Elastic-job

分布式调度 Elastic-job 1.概述 1.1什么是任务调度 我们可以思考一下下面业务场景的解决方案: 某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算…

IP地址SSL证书的作用是什么?

IP地址SSL证书的作用是确保网站连接的安全性和可信度。具体而言,IP地址SSL证书的作用包括以下几个方面: 1. 数据加密:IP地址SSL证书使用SSL协议为网站提供了数据加密功能。通过加密传输,证书可以保护敏感信息(如用户登…

每日刷题-5

目录 一、选择题 二、算法题 1、不要二 2、把字符串转换成整数 一、选择题 1、 解析:printf(格式化串,参数1,参数2,.….),格式化串: printf第一个参数之后的参数要按照什么格式打印,比如%d--->按照整形方式打印&am…

《TCP/IP网络编程》阅读笔记--Timewait状态和Nagle算法

1--Timewait状态 对于服务器端/客户端,当一端结束连接时,会向另一端发送 FIN 消息;两端的在经过四次挥手过程后,其 Socket 不会马上消除,而是会处于一个 Time-wait 状态的阶段,此时 Socket 拥有的端口号并没…

c语言练习57:浮点数在内存中的存储

浮点数在内存中的存储 上⾯的代码中, num 和 *pFloat 在内存中明明是同⼀个数,为什么浮点数和整数的解读结果会差别 这么⼤? 要理解这个结果,⼀定要搞懂浮点数在计算机内部的表⽰⽅法。 根据国际标准IEEE(电⽓和电⼦⼯…