算法崗面試題
- 介紹下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