算法岗面试题
- 介绍下Transformer模型。
Transformer本身是一个典型的encoder-decoder模型,Encoder端和Decoder端均有6个Block,Encoder端的Block包括两个模块,多头self-attention模块以及一个前馈神经网络模块;Decoder端的Block包括三个模块,Masked多头self-attention模块,多头Encoder-Decoder attention交互模块,以及一个前馈神经网络模块;需要注意:Encoder端和Decoder端中的每个模块都有残差层和LayerNormalization层。
- 介绍下注意力机制。
Self Attention与传统的Attention机制非常的不同:传统的Attention是基于source端和target端的隐变量(hidden state)计算Attention的,得到的结果是源端的每个词与目标端每个词之间的依赖关系。但Self Attention不同,它分别在source端和target端进行,仅与source input或者target input自身相关的Self Attention,捕捉source端或target端自身的词与词之间的依赖关系;然后再把source端的得到的self Attention加入到target端得到的Attention中,捕捉source端和target端词与词之间的依赖关系。因此,self Attention比传统的Attention mechanism效果要好,主要原因之一是,传统的Attention机制忽略了源端或目标端句子中词与词之间的依赖关系,相对比,self Attention可以不仅可以得到源端与目标端词与词之间的依赖关系,同时还可以有效获取源端或目标端自身词与词之间的依赖关系。
- 多头注意力机制的多头指的是什么?
与使用单独的一个注意力不同,多头注意力机制可以独立学习得到h组不同的线性投影(linearprojections)来变换查询、键和值。然后,这h组变换后的查询、键和值将并行地进行注意力池化。最后,将这个注意力池化的输出拼接在一起,并且通过另一个可以学习的线性投影进行变换,以产生最终输出。这种设计被称为多头注意力。自注意力机制的缺陷就是:模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置,因此作者提出了通过多头注意力机制来解决这一问题。使用多头注意力机制能够给予注意力层的输出包含有不同子空间中的编码表示信息,从而增强模型的表达能力。
- 介绍一个熟悉的网络结构,Resnet。
ResNet.又称残差神经网络,它通过引入shortcut结构来规避普通神经网络中出现的梯度消失和网络退化问题。ResNet的特点是:1.残差学习。2.shortcuts连接。3.加深网络不退化。
- 你知道哪些缓解梯度消失和梯度爆炸的方法?
以下几种方法供参考:换用Relu、LeakyRelu、Elu等激活涵函数ReLu:让激活函数的导数为1LeakyReLu:包含了ReLu的几乎所有有点,同时解决了ReLu中O区间带来的影响ELU:和LeakyReLu一样,都是为了解决0区间问题,相对于来,elu计算更耗时一些BatchNormalization LayerNormalizationBN及LN本质上是解决传播过程中的梯度问题。用LSTM或GRU来代替RNN。加入ResNet网络。使用梯度裁剪(Gradient Clipping)。
- transformer和CNN的区别是什么?
- Transformer模型的核心是self-attention机制,而CNN模型的核心是卷积和池化;
- Transformer模型可以学习到数据中每个词之间的相关性,而CNN关注于二维局部数据之间的相互关联,随着层的加深,关注区域会更广。
- Leetcode一—最长回文子串。
方法:中心扩展法。遍历每一个字符串,分两种情况进行中心扩展,一种为奇数,一种为偶数,如果两边字母相同,就继续扩展;如果不相同就停止扩展,对所有满足要求的长度求出最大值,得到最终答案。
class Solution:def expandAroundCenter(self,s,left,right):while left >=0 and right len(s)and s[left]=s[right]:left -= 1right += 1return left +1,right-1def longestPalindrome(self,s:str)->str:start,end 0,0for i in range(len(s)):left1,right1 self.expandAroundCenter(s,i,i)left2,right2 self.expandAroundCenter(s,i,i+1)if right1 - left1 > end - start:start,end = left1,right1if right2-left2 > end-start:start,end = left2,right2return s[start:end +1]
科技算法岗面试题7道
- BN层的参数,输入是N,C,H,BN层参数是多少?
BN层的参数是C*2(C为通道数),BN的本质是利用优化改变方差大小和均值的位置,在CNN中,因为网络的特征是对应到一张特征图上的,所以BN是以特征图为单位而不是按照各个维度。
- softmax和交叉熵损失怎么计算,二值交叉熵呢?
softmax计算公式如下:
- 如果softmax的e次方超过float的值了怎么办?
将分子分母同时除以中的最大值,可以解决。
- 常用的优化器有哪些,ADAM和SGD有什么区别?
常见的优化器:SGD、BGD、MBGD、Momentum、NAG、Adagrad、Adadelta,RMSprop、Adam、AdamW优化器等。SGD是随机梯度下降法,是最基本的优化器。Adam是一种自适应学习率的方法。以SGD作为最初的算法,Momentum在其基础上加入了一阶动量(历史梯度的累计),AdaGrad和RMSProp在其基础上加入了二阶动量(历史梯度的平方累计),Adam就是结合了SGD的一阶动量和RMSProp的二阶动量算法。
- Resnet的BottleneckBlock和Basic Block有什么区别,为什么这么叫?
BasicBlock架构主要使用了两个33的卷积;BottleneckBlock架构主要使用了三个卷积层,卷积核大小分别是11,33,11,两头小中间大,因此取名瓶颈块。
- L1范数和L2范数有什么区别,为什么L1解空间是稀疏的,L2解空间是稠密的
- L1是模型各个参数的绝对值之和。
- L2是模型各个参数的平方和的开方值。
- L1会趋向于产生少量的特征,而其他的特征都是0。因为最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0,产生稀疏权重矩阵。
- L2会选择更多的特征,这些特征都会接近于0。最优的参数值很小概率出现在坐标轴上,因此每一维的参数都不会是0。当最小化w时,就会使每一项趋近于0。
- L1的作用是为了矩阵稀疏化。假设的是模型的参数取值满足拉普拉斯分布,L1正则的本质其实是为模型增加了”模型参数服从零均值拉普拉斯分布”这一先验知识。(它在0的概率最大,尾部较正态分布更平坦。)
- L2的作用是为了使模型更平滑,得到更好的泛化能力。假设的是参数是满足高斯分布。(它在两端尾部略高,拉普拉斯分布,在0处更平坦。)
- L1的权值更新固定减小一个值,有可能会减小到0;
- L2的权值更新,每次减小上一次的1/2,权值会越来越小,但不会为0。
- 二分查找求×的平方根
class Solution:def mySqrt(self,x:int)->int:left,right = 0,xwhile left <= right:mid = left +(right-left)//2if mid * mid <=x and (mid +1)*(mid +1)>x:return midelif mid * mid> x and (mid 1)*(mid +1)>x:right = mid -1else:left = mid 1