首页 简历|笔试面试

机器学习面试八股7

  • 25年9月4日 发布
  • 782.04KB 共7页
机器学习面试八股7机器学习面试八股7机器学习面试八股7机器学习面试八股7机器学习面试八股7

111GAN 网络的思想

GAN 用一个生成模型和一个判别模型,判别模型用于判断给定的图片是不是真实的图片,生成

模型自己生成一张图片和想要的图片很像,开始时两个模型都没有训练,然后两个模型一起进

行对抗训练,生成模型产生图片去欺骗判别模型,判别模型去判别真假,最终两个模型在训练

过程中,能力越来越强最终达到稳态。

1121*1 的卷积作用

实现跨通道的交互和信息整合,

实现卷积核通道数的降维和升维,

实现多个 feature map 的线性组合,而且可是实现与全连接层的等价效果。

113 怎么提升网络的泛化能力

从数据上提升性能:收集更多的数据,对数据做缩放和变换,特征组合和重新定义问题。

从算法调优上提升性能:用可靠的模型诊断工具对模型进行诊断,权重的初始化,用小的随机

数初始化权重。对学习率进行调节 ,尝试选择合适的激活函数,调整网络的拓扑结构,调节

batch 和 epoch 的大小,添加正则化的方法,尝试使用其它的优化方法,使用 early stopping。

114 什么是 seq2seq model

Seq2seq 属 于 encoder-decoder 结 构 的 一 种 , 利 用 两 个 RNN, 一 个 作 为 encoder 一 个 作 为

decoder。Encoder 负责将输入序列压缩成指定长度的向量,这个向量可以看作这段序列的语

义,而 decoder 负责根据语义向量生成指定的序列。

115 神经网络为啥用交叉熵

通过神经网络解决多分类问题时,最常用的一种方式就是在最后一层设置 n 个输出节点,

一般情况下,最后一个输出层的节点个数与分类任务的目标数相等。假设最后的节点数为

N,那么对于每一个样例,神经网络可以得到一个 N 维的数组作为输出结果,数组中每一

个维度会对应一个类别。在最理想的情况下,如果一个样本属于 k,那么这个类别所对应

的的输出节点的输出值应该为 1,而其他节点的输出都为 0,即[0,0,1,0,….0,0],这个数组也

就是样本的 Label,是神经网络最期望的输出结果,交叉熵就是用来判定实际的输出与期望

的输出的接近程度。均方误差较为平缓,有可能收敛较慢

116 注意力公式

Soft attention、global attention、动态 attention ,Hard attention ,静态 attention

117 论文 flow 情况

谈谈自己投稿的论文,论文投稿级别,论文内容,用到的方法,对比方法等

118 推导 LSTM 正向传播和单向传播过程

链接

119DNN(深度神经网络)的梯度更新方式

120 深度模型压缩方法

链接

• 参数修剪和共享(针对模型参数的冗余性)3 类:模型量化和二进制化、参数共享、结

构化矩阵

• 低秩因子分解(使用矩阵/张量分解来估计深度学习模型的信息参数)

• 转移/紧凑卷积滤波器(特殊的结构卷积滤波器来降低存储和计算复杂度)

• 知识蒸馏(学习一个蒸馏模型,训练一个更紧凑的神经网络来重现一个更大的网络的输

出)

• 知识蒸馏是对模型的能力进行迁移,根据迁移的方法不同可以简单分为基于目标蒸馏

(也称为 Soft-target 蒸馏或 Logits 方法蒸馏)和基于特征蒸馏的算法两个大的方向,下面我

们对其进行介绍。

一般来说,参数修剪和共享,低秩分解和知识蒸馏方法可以用于全连接层和卷积层的

CNN,但另一方面,使用转移/紧凑型卷积核的方法仅支持卷积层。

基于参数修剪/共享、低秩分解的模型可以从预训练模型或者从头开始训练,因此灵活而有

效。然而转移/紧凑的卷积核和知识蒸馏模型只能支持从零开始训练。

121 模型压缩效果评价指标有哪些?

运行效率、参数压缩率、准确率

122 模型优化加速方法

模型优化加速能够提升网络的计算效率,具体包括:

Op-level 的快速算法:FFT Conv2d (7x7, 9x9), Winograd Conv2d (3x3, 5x5) 等;

Layer-level 的快速算法:Sparse-block net [1] 等;

优化工具与库:TensorRT (Nvidia), Tensor Comprehension (Facebook) 和 Distiller (Intel) 等;

123 压缩和加速方法如何选择?

1)对于在线计算内存存储有限的应用场景或设备,可以选择参数共享和参数剪枝方法,

特别是二值量化权值和激活、结构化剪枝。其他方法虽然能够有效的压缩模型中的权值参

数,但无法减小计算中隐藏的内存大小(如特征图)。

2)如果在应用中用到的紧性模型需要利用预训练模型,那么参数剪枝、参数共享以及低

秩分解将成为首要考虑的方法。相反地,若不需要借助预训练模型,则可以考虑紧性滤波

设计及知识蒸馏方法。

3)若需要一次性端对端训练得到压缩与加速后模型,可以利用基于紧性滤波设计的深度

神经网络压缩与加速方法。

4)一般情况下,参数剪枝,特别是非结构化剪枝,能大大压缩模型大小,且不容易丢失

分类精度。对于需要稳定的模型分类的应用,非结构化剪枝成为首要选择。

5)若采用的数据集较小时,可以考虑知识蒸馏方法。对于小样本的数据集,学生网络能

够很好地迁移教师模型的知识,提高学生网络的判别性。

6)主流的5个深度神经网络压缩与加速算法相互之间是正交的,可以结合不同技术进行

进一步的压缩与加速。如:韩松等人结合了参数剪枝和参数共享;温伟等人以及 Alvarez 等

人结合了参数剪枝和低秩分解。此外对于特定的应用场景,如目标检测,可以对卷积层和

全连接层使用不同的压缩与加速技术分别处理。

GPU 加速的地方(指的是使用 GPU 的地方)

124 用过哪些 Optimizer,效果如何

优化算法是不断迭代模型参数以降低模型损失函数的值

1)SGD;2)Momentum;3)Nesterov;4)Adagrad;5)Adadelta;6)RMSprop;7)

Adam;8)Adamax;9)Nadam。

(1)对于稀疏数据,尽量使用学习率可自适应的算法,不用手动调节,而且最好采用默认

参数。

(2)SGD 通常训练时间最长,但是在好的初始化和学习率调度方案下,结果往往更可靠。

但 SGD 容易困在鞍点,这个缺点也不能忽略。

(3)如果在意收敛的速度,并且需要训练比较深比较复杂的网络时,推荐使用学习率自适

应的优化方法。

(4)Adagrad,Adadelta 和 RMSprop 是比较相近的算法,表现都差不多。

(5)在能使用带动量的 RMSprop 或者 Adam 的地方,使用 Nadam 往往能取得更好的效果。

125Depthwise 卷积与 Pointwise 卷积

Depthwise(DW) 卷 积 与 Pointwise(PW) 卷 积 , 合 起 来 被 称 作 Depthwise Separable

Convolution(参见 Google 的 Xception),该结构和常规卷积操作类似,可用来提取特征,但

相比于常规卷积操作,其参数量和运算成本较低。所以在一些轻量级网络中会碰到这种结

构如 MobileNet。

Depthwise Separable Convolution 是将一个完整的卷积运算分解为两步进行,即 Depthwise

Convolution 与 Pointwise Convolution。

Depthwise Convolution 的一个卷积核负责一个通道,一个通道只被一个卷积核卷积。上面

所提到的常规卷积每个卷积核是同时操作输入图片的每个通道。Depthwise Convolution 完

成后的 Feature map 数量与输入层的通道数相同,无法扩展 Feature map。而且这种运算对

输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的

feature 信 息 。 因 此 需 要 Pointwise Convolution 来 将 这 些 Feature map 进 行 组 合 生 成 新 的

Feature map。

126Pointwise Convolution

Pointwise Convolution 的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M 为

上一层的通道数。所以这里的卷积运算会将上一步的 map 在深度方向上进行加权组合,生

成新的 Feature map。有几个卷积核就有几个输出 Feature map。如下图所示。

127Hash 表处理冲突的方法

开放定址法

链地址法 :将所有 Hash 地址相同的记录都链接在同一链表中

再 Hash 法 :同时构造多个不同的 Hash 函数,当产生冲突时,计算另一个 Hash 函数地址直到

不再发生冲突为止

建立公共溢出区:将 Hash 表分为基本表和溢出表,若是与基本表发生冲突,都放入溢出表

Apriori 原理:如果一个项集是频繁的,则它的所有子集一定也是频繁的;相反,如果项集

是非频繁的,则它的所有超集也一定是非频繁的。

加盐 hash:就是一个随机生成的字符串。我们将盐与原始密码连接(concat)在一起(放

在前面或后面都可以),然后将 concat 后的字符串加密。采用这种方式加密密码,查表法

就不灵了(因为盐是随机生成的)

128 中缀表达式转后缀表达式

转换过程需要用到栈,具体过程如下:

1)如果遇到操作数,我们就直接将其输出。

2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。

3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注

意,左括号只弹出并不输出。

4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇

到发现更低优先级的元素(或者栈为空)为止。弹出完这些元素后,才将遇到的操作符压入

到栈中。有一点需要注意,只有在遇到" ) “的情况下我们才弹出” ( “,其他情况我们都不

会弹出” ( "。

5)如果我们读到了输入的末尾,则将栈中所有元素依次弹出,并输出。

129 大顶堆怎么插入、删除

插入: 需要先将要插入的结点 x 放在最底层的最右边,,此时需要找到新插入节点的父节点,

对堆进行自下而上的调整(从小到大)使其变成一个大顶堆。 时间:O(logn)。 “结点上

浮”

删除:将堆的最后一个元素填充到删除元素的位置,然后调整堆结构构造出新的大顶堆 ,并

下调到合适位置,最后把该叶子删除。 “结点下沉”

130 堆栈区别

堆和栈的区别:

一、堆栈空间分配区别:

1)、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。

其操作方式类似于数据结构中的栈;

2)、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由 OS

回收,分配方式倒是类似于链表。

二、堆栈缓存方式区别:

1)、栈使用的是一级缓存,他们通常都是被调用时处于存储空间中,调用完毕立即释放;

2)、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为

孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

堆:内存中,存储的是引用数据类型,引用数据类型无法确定大小,堆实际上是一个在内

存中使用到内存中零散空间的链表结构的存储空间,堆的大小由引用类型的大小直接决定

引用类型的大小的变化直接影响到堆的变化

栈:是内存中存储值类型的,大小为 2M,超出则会报错,内存溢出

三、堆栈数据结构区别:

堆(数据结构):堆可以被看成是一棵树,如:堆排序;

栈(数据结构):一种先进后出的数据结构。

特点:先进后出

开通会员 本次下载免费

所有资料全部免费下载! 推荐用户付费下载获取返佣积分! 积分可以兑换商品!
一键复制 下载文档 联系客服