深度學習(二)-----算法崗面試題


● 深度學習了解多少,有看過底層代碼嗎?caffe,tf?

 

● 除了GMM-HMM,你了解深度學習在語音識別中的應用嗎?

參考回答:

講了我用的過DNN-HMM,以及與GMM-HMM的聯系與區別;然后RNN+CTC,這里我只是了解,大概講了一下CTC損失的原理;然后提了一下CNN+LSTM。

● 用過哪些移動端深度學習框架?

參考回答:

開源的有:小米的MACE,驍龍的SNPE,騰訊的FeatherCNN和ncnn,百度的mobile-deep-learning(MDL);caffe、tensorflow lite都有移動端,只是可能沒有上面的框架效率高。據傳還有支付寶的xNN,商湯的PPL,不過都是自用,未開源。

● Caffe:整體架構說一下,新加一個層需要哪些步驟,卷積是怎么實現的,多卡機制,數據並行還是模型並行?

參考回答:

Caffe是深度學習的一個框架,Caffe框架主要包括五個組件:Blob、Solver、Net、Layer、Proto;框架結構如下圖所示。這五大組件可以分為兩個部分:第一部分,Blob、Layer和Net,這三個組件使得Caffe構成基於自己的模塊化的模型,caffe是逐層地定義一個net,而net是從數據輸入層到損失曾自下而上定義整個模型,Blob在caffe中是處理和傳遞實際數據的數據封裝包;第二部分:Solver和Proto,這兩個模型分別用於協調模型的優化以及用於網絡模型的結構定義、存儲和讀取的方式(Layer-By-Layer)定義Net,而貫穿所有Nets的結構就是caffe框架或模型;對於Layer而言,輸入的是Blob數據封裝包格式的實際數據,當采用該框架進行訓練時,也就是Solver調優模型,則需要Proto這種網絡模型的結構定義、存儲和讀取。

總體來說,caffe是通過Layer

Caffe中卷積運算的原理

俗話說,一圖勝千言,首先先給出原理示意圖,為了方便理解,這里以二維核為例

滑動窗口在圖像中每滑動一個地方,將圖像中該滑動窗口圖像展開為一列,所有列組成圖中的滑動窗口矩陣,這里假設pad=1,stride=1,K=3,則滑動窗口矩陣每行大小為W*H,一共K*K行.

每個核展開為一行,N個核形成的核矩陣大小為N*K*K。

最后將核矩陣和滑動窗口矩陣相乘,每一行就是一個特征圖,N個卷積核形成N個特征圖。

擴展到三維核

三維核就是多了一個通道的概念,原理與二維核一樣。

caffe支持多GPU並行了,原理比較簡單,就是每個GPU分別算一個batch,n個GPU,實際的batchsize就是n*batch,比如原來用一個GPU,batchsize設置成256,現在用4個GPU,把batchsize設置成64,和原來的一個GPU的運算是等價的。

實際使用的時候基本不用設置,和原來一樣編譯好就可以用了。命令就是在-gpu 后面對多個GPU號用逗號隔開,比如-gpu 1,2,3,4 就是同時使用1-4共4個GPU,GPU編號可以不連續,或者直接用-gpu all,就是使用所有的GPU。

Caffe是數據並行的。

● BN層的作用,為什么要在后面加伽馬和貝塔,不加可以嗎

參考回答:

BN層的作用是把一個batch內的所有數據,從不規范的分布拉到正態分布。這樣做的好處是使得數據能夠分布在激活函數的敏感區域,敏感區域即為梯度較大的區域,因此在反向傳播的時候能夠較快反饋誤差傳播。

● 梯度消失,梯度爆炸的問題,

參考回答:

激活函數的原因,由於梯度求導的過程中梯度非常小,無法有效反向傳播誤差,造成梯度消失的問題。

● Adam

參考回答:

Adam 算法和傳統的隨機梯度下降不同。隨機梯度下降保持單一的學習率(即 alpha)更新所有的權重,學習率在訓練過程中並不會改變。而 Adam 通過計算梯度的一階矩估計和二階矩估計而為不同的參數設計獨立的自適應性學習率。

● attention機制

參考回答:

Attention簡單理解就是權重分配,。以seq2seq中的attention公式作為講解。就是對輸入的每個詞分配一個權重,權重的計算方式為與解碼端的隱含層時刻作比較,得到的權重的意義就是權重越大,該詞越重要。最終加權求和。

● RNN梯度消失問題,為什么LSTM和GRU可以解決此問題

參考回答:

RNN由於網絡較深,后面層的輸出誤差很難影響到前面層的計算,RNN的某一單元主要受它附近單元的影響。而LSTM因為可以通過閥門記憶一些長期的信息,相應的也就保留了更多的梯度。而GRU也可通過重置和更新兩個閥門保留長期的記憶,也相對解決了梯度消失的問題。

● GAN網絡的思想

參考回答:

GAN用一個生成模型和一個判別模型,判別模型用於判斷給定的圖片是不是真實的圖片,生成模型自己生成一張圖片和想要的圖片很像,開始時兩個模型都沒有訓練,然后兩個模型一起進行對抗訓練,生成模型產生圖片去欺騙判別模型,判別模型去判別真假,最終兩個模型在訓練過程中,能力越來越強最終達到穩態。

● 1*1的卷積作用

參考回答:

實現跨通道的交互和信息整合,實現卷積核通道數的降維和升維,可以實現多個feature map的線性組合,而且可是實現與全連接層的等價效果。

● 怎么提升網絡的泛化能力

參考回答:

從數據上提升性能:收集更多的數據,對數據做縮放和變換,特征組合和重新定義問題。

從算法調優上提升性能:用可靠的模型診斷工具對模型進行診斷,權重的初始化,用小的隨機數初始化權重。對學習率進行調節,嘗試選擇合適的激活函數,調整網絡的拓撲結構,調節batch和epoch的大小,添加正則化的方法,嘗試使用其它的優化方法,使用early stopping。

● 什么是seq2seq model

參考回答:

Seq2seq屬於encoder-decoder結構的一種,利用兩個RNN,一個作為encoder一個作為decoder。Encoder負責將輸入序列壓縮成指定長度的向量,這個向量可以看作這段序列的語義,而decoder負責根據語義向量生成指定的序列。

● 激活函數的作用

參考回答:

激活函數是用來加入非線性因素的,提高神經網絡對模型的表達能力,解決線性模型所不能解決的問題。

● 為什么用relu就不用sigmoid了

參考回答:

Sigmoid的導數只有在0的附近時有比較好的激活性,在正負飽和區域的梯度都接近0,會導致梯度彌散。而relu函數在大於0的部分梯度為常數,不會產生梯度彌散現象。Relu函數在負半區導數為0,也就是說這個神經元不會經歷訓練,就是所謂稀疏性。而且relu函數的導數計算的更快。

● 講一下基於WFST的靜態解碼網絡的語音識別流程?

參考回答:

從語音特征開始講起,我講了MFCC和LPC的原理以及提取過程,這一部分講的很細,然后講了viterbi解碼過程,最后概述了一下HCLG.fst構建流程

● 目標檢測了解嗎,Faster RCNN跟RCNN有什么區別

參考回答:

目標檢測,也叫目標提取,是一種基於目標幾何和統計特征的圖像分割,它將目標的分割和識別合二為一,其准確性和實時性是整個系統的一項重要能力。尤其是在復雜場景中,需要對多個目標進行實時處理時,目標自動提取和識別就顯得特別重要。

隨着計算機技術的發展和計算機視覺原理的廣泛應用,利用計算機圖像處理技術對目標進行實時跟蹤研究越來越熱門,對目標進行動態實時跟蹤定位在智能化交通系統、智能監控系統、軍事目標檢測及醫學導航手術中手術器械定位等方面具有廣泛的應用價值。

 

使用方法

缺點

改進

R-CNN

 

1、SS提取RP;

2、CNN提取特征;

3、SVM分類;

4、BB盒回歸。

1、 訓練步驟繁瑣(微調網絡+訓練SVM+訓練bbox);

2、 訓練、測試均速度慢 ;

3、 訓練占空間

1、 從DPM HSC的34.3%直接提升到了66%(mAP);

2、 引入RP+CNN

Faster R-CNN

 

1、RPN提取RP;

2、CNN提取特征;

3、softmax分類;

4、多任務損失函數邊框回歸。

1、 還是無法達到實時檢測目標;

2、 獲取region proposal,再對每個proposal分類計算量還是比較大。

1、 提高了檢測精度和速度;

2、  真正實現端到端的目標檢測框架;

3、  生成建議框僅需約10ms。

● SPP,YOLO了解嗎?

參考回答:

SPP-Net簡介:

SPP-Net主要改進有下面兩個:

1).共享卷積計算、2).空間金字塔池化

在SPP-Net中同樣由這幾個部分組成:

ss算法、CNN網絡、SVM分類器、bounding box

ss算法的區域建議框同樣在原圖上生成,但是卻在Conv5上提取,當然由於尺寸的變化,在Conv5層上提取時要經過尺度變換,這是它R-CNN最大的不同,也是SPP-Net能夠大幅縮短時長的原因。因為它充分利用了卷積計算,也就是每張圖片只卷積一次,但是這種改進帶來了一個新的問題,由於ss算法生成的推薦框尺度是不一致的,所以在cov5上提取到的特征尺度也是不一致的,這樣是沒有辦法做全尺寸卷積的(Alexnet)。

所以SPP-Net需要一種算法,這種算法能夠把不一致的輸入產生統一的輸出,這就SPP,即空間金字塔池化,由它替換R-CNN中的pooling層,除此之外,它和R-CNN就一樣了。

YOLO詳解:

YOLO的名字You only look once正是自身特點的高度概括。YOLO的核心思想在於將目標檢測作為回歸問題解決 ,YOLO首先將圖片划分成SxS個區域,注意這個區域的概念不同於上文提及將圖片划分成N個區域扔進detector這里的區域不同。上文提及的區域是真的將圖片進行剪裁,或者說把圖片的某個局部的像素扔進detector,而這里的划分區域,只的是邏輯上的划分。

● 梯度消失梯度爆炸怎么解決

參考回答:

1)、使用 ReLU、LReLU、ELU、maxout 等激活函數

sigmoid函數的梯度隨着x的增大或減小和消失,而ReLU不會。

2)、使用批規范化

通過規范化操作將輸出信號x規范化到均值為0,方差為1保證網絡的穩定性。從上述分析分可以看到,反向傳播式子中有w的存在,所以w的大小影響了梯度的消失和爆炸,Batch Normalization 就是通過對每一層的輸出規范為均值和方差一致的方法,消除了w帶來的放大縮小的影響,進而解決梯度消失和爆炸的問題。

● RNN容易梯度消失,怎么解決?

參考回答:

1)、梯度裁剪(Clipping Gradient)

既然在BP過程中會產生梯度消失(就是偏導無限接近0,導致長時記憶無法更新),那么最簡單粗暴的方法,設定閾值,當梯度小於閾值時,更新的梯度為閾值。

優點:簡單粗暴

缺點:很難找到滿意的閾值

2)、LSTM(Long Short-Term Memory)

一定程度上模仿了長時記憶,相比於梯度裁剪,最大的優點就是,自動學習在什么時候可以將error反向傳播,自動控制哪些是需要作為記憶存儲在LSTM cell中。一般長時記憶模型包括寫入,讀取,和忘記三個過程對應到LSTM中就變成了input_gate,output_gate,

forget_gate,三個門,范圍在0到1之間,相當於對輸入輸出進行加權的學習,利用大量數據來自動學習加權的參數(即學習了哪些錯誤可以用BP更新參數)。具體的公式表達:

優點:模型自動學習更新參數

● LSTM跟RNN有啥區別

參考回答:

LSTM與RNN的比較

RNN在處理long term memory的時候存在缺陷,因此LSTM應運而生。LSTM是一種變種的RNN,它的精髓在於引入了細胞狀態這樣一個概念,不同於RNN只考慮最近的狀態,LSTM的細胞狀態會決定哪些狀態應該被留下來,哪些狀態應該被遺忘。

下面來看一些RNN和LSTM內部結構的不同:

RNN

LSTM

由上面兩幅圖可以觀察到,LSTM結構更為復雜,在RNN中,將過去的輸出和當前的輸入concatenate到一起,通過tanh來控制兩者的輸出,它只考慮最近時刻的狀態。在RNN中有兩個輸入和一個輸出。

而LSTM為了能記住長期的狀態,在RNN的基礎上增加了一路輸入和一路輸出,增加的這一路就是細胞狀態,也就是途中最上面的一條通路。事實上整個LSTM分成了三個部分:

1)哪些細胞狀態應該被遺忘

2)哪些新的狀態應該被加入

3)根據當前的狀態和現在的輸入,輸出應該是什么

下面來分別討論:

1)哪些細胞狀態應該被遺忘

這部分功能是通過sigmoid函數實現的,也就是最左邊的通路。根據輸入和上一時刻的輸出來決定當前細胞狀態是否有需要被遺忘的內容。舉個例子,如果之前細胞狀態中有主語,而輸入中又有了主語,那么原來存在的主語就應該被遺忘。concatenate的輸入和上一時刻的輸出經過sigmoid函數后,越接近於0被遺忘的越多,越接近於1被遺忘的越少。

2)哪些新的狀態應該被加入

繼續上面的例子,新進來的主語自然就是應該被加入到細胞狀態的內容,同理也是靠sigmoid函數來決定應該記住哪些內容。但是值得一提的是,需要被記住的內容並不是直接

concatenate的輸入和上一時刻的輸出,還要經過tanh,這點應該也是和RNN保持一致。並且需要注意,此處的sigmoid和前一步的sigmoid層的w和b不同,是分別訓練的層。

細胞狀態在忘記了該忘記的,記住了該記住的之后,就可以作為下一時刻的細胞狀態輸入了。

3)根據當前的狀態和現在的輸入,輸出應該是什么

這是最右側的通路,也是通過sigmoid函數做門,對第二步求得的狀態做tanh后的結果過濾,從而得到最終的預測結果。

事實上,LSTM就是在RNN的基礎上,增加了對過去狀態的過濾,從而可以選擇哪些狀態對當前更有影響,而不是簡單的選擇最近的狀態。

在這之后,研究人員們實現了各種LSTM的變種網絡。不變的是,通常都會用sigmoid函數做門,篩選狀態或者輸入。並且輸出都是要經過tanh函數。具體為什么要用這兩個函數,由於剛接觸還不能給出一定的解釋,日后理解了再補充。

● 卷積層和池化層有什么區別

參考回答:

 

卷積層

池化層

功能

提取特征

壓縮特征圖,提取主要特征

操作

可惜是二維的,對於三維數據比如RGB圖像(3通道),卷積核的深度必須同輸入的通道數,輸出的通道數等於卷積核的個數。

卷積操作會改變輸入特征圖的通道數。

池化只是在二維數據上操作的,因此不改變輸入的通道數。對於多通道的輸入,這一點和卷積區別很大。

特性

權值共享:減少了參數的數量,並利用了圖像目標的位置無關性。

稀疏連接:輸出的每個值只依賴於輸入的部分值。

 

● 防止過擬合有哪些方法

參考回答:

1)Dropout ;2)加L1/L2正則化;3)BatchNormalization ;4)網絡bagging

● dropout咋回事講講

參考回答:

Dropout的目標是在指數 級數量的神經網絡上近似這個過程。Dropout訓練與Bagging訓練不太一樣。在Bagging的情況下,所有模型是獨立的。

在Dropout的情況下,模型是共享參數的,其中每個模型繼承的父神經網絡參 數的不同子集。參數共享使得在有限可用的內存下代表指數數量的模型變得可能。 在Bagging的情況下,每一個模型在其相應訓練集上訓練到收斂。

在Dropout的情況下,通常大部分模型都沒有顯式地被訓練,通常該模型很大,以致到宇宙毀滅都不 能采樣所有可能的子網絡。取而代之的是,可能的子網絡的一小部分訓練單個步驟,參數共享導致剩余的子網絡能有好的參數設定。

● relu

參考回答:

在深度神經網絡中,通常使用一種叫修正線性單元(Rectified linear unit,ReLU)作為神經元的激活函數。ReLU起源於神經科學的研究:2001年,Dayan、Abott從生物學角度模擬出了腦神經元接受信號更精確的激活模型,如下圖:

其中橫軸是時間(ms),縱軸是神經元的放電速率(Firing Rate)。同年,Attwell等神經科學家通過研究大腦的能量消耗過程,推測神經元的工作方式具有稀疏性和分布性;2003年Lennie等神經科學家估測大腦同時被激活的神經元只有1~4%,這進一步表明了神經元的工作稀疏性。而對於ReLU函數而言,類似表現是如何體現的?其相比於其他線性函數(如purlin)和非線性函數(如sigmoid、雙曲正切)又有何優勢?下面請各位看官容我慢慢道來。

首先,我們來看一下ReLU激活函數的形式,如下圖:

從上圖不難看出,ReLU函數其實是分段線性函數,把所有的負值都變為0,而正值不變,這種操作被成為單側抑制。可別小看這個簡單的操作,正因為有了這單側抑制,才使得神經網絡中的神經元也具有了稀疏激活性。尤其體現在深度神經網絡模型(如CNN)中,當模型增加N層之后,理論上ReLU神經元的激活率將降低2的N次方倍。這里或許有童鞋會問:ReLU的函數圖像為什么一定要長這樣?反過來,或者朝下延伸行不行?其實還不一定要長這樣。只要能起到單側抑制的作用,無論是鏡面翻轉還是180度翻轉,最終神經元的輸出也只是相當於加上了一個常數項系數,並不影響模型的訓練結果。之所以這樣定,或許是為了契合生物學角度,便於我們理解吧。

那么問題來了:這種稀疏性有何作用?換句話說,我們為什么需要讓神經元稀疏?不妨舉栗子來說明。當看名偵探柯南的時候,我們可以根據故事情節進行思考和推理,這時用到的是我們的大腦左半球;而當看蒙面唱將時,我們可以跟着歌手一起哼唱,這時用到的則是我們的右半球。左半球側重理性思維,而右半球側重感性思維。也就是說,當我們在進行運算或者欣賞時,都會有一部分神經元處於激活或是抑制狀態,可以說是各司其職。再比如,生病了去醫院看病,檢查報告里面上百項指標,但跟病情相關的通常只有那么幾個。與之類似,當訓練一個深度分類模型的時候,和目標相關的特征往往也就那么幾個,因此通過ReLU實現稀疏后的模型能夠更好地挖掘相關特征,擬合訓練數據。

此外,相比於其它激活函數來說,ReLU有以下優勢:對於線性函數而言,ReLU的表達能力更強,尤其體現在深度網絡中;而對於非線性函數而言,ReLU由於非負區間的梯度為常數,因此不存在梯度消失問題(Vanishing Gradient Problem),使得模型的收斂速度維持在一個穩定狀態。這里稍微描述一下什么是梯度消失問題:當梯度小於1時,預測值與真實值之間的誤差每傳播一層會衰減一次,如果在深層模型中使用sigmoid作為激活函數,這種現象尤為明顯,將導致模型收斂停滯不前。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM