【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,超出则会报错,内存溢出三、堆栈数据结构区别:堆(数据结构):堆可以被看成是一棵树,如:堆排序;栈(数据结构):一种先进后出的数据结构。特点:先进后出
更多校园招聘常见面试问题(开发、算法、编程题目)参见CSDN博客:http://t.csdn.cn/V4qbH
欢迎关注、收藏、点赞后进行问题咨询及秋招建议!
#我发现了面试通关密码##数据人的面试交流地##如何判断面试是否凉了##我心目中的理想工作是这样的##23届找工作求助阵地#介绍秋招面试过程中对机器学习算法、数据挖掘、python语言、C++语言、数据结构的面试题目和基础总结
查看10道真题和解析

360集团公司氛围 407人发布