● 深度學習了解多少,有看過底層代碼嗎?caffe,tf?
● 除了GMM-HMM,你了解深度學習在語音識別中的應用嗎?
參考回答:
● 用過哪些移動端深度學習框架?
參考回答:
● Caffe:整體架構說一下,新加一個層需要哪些步驟,卷積是怎么實現的,多卡機制,數據並行還是模型並行?
參考回答:
總體來說,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層的作用,為什么要在后面加伽馬和貝塔,不加可以嗎
參考回答:
● 梯度消失,梯度爆炸的問題,
參考回答:
● Adam
參考回答:
● attention機制
參考回答:



● RNN梯度消失問題,為什么LSTM和GRU可以解決此問題
參考回答:
● GAN網絡的思想
參考回答:
● 1*1的卷積作用
參考回答:
● 怎么提升網絡的泛化能力
參考回答:
從算法調優上提升性能:用可靠的模型診斷工具對模型進行診斷,權重的初始化,用小的隨機數初始化權重。對學習率進行調節,嘗試選擇合適的激活函數,調整網絡的拓撲結構,調節batch和epoch的大小,添加正則化的方法,嘗試使用其它的優化方法,使用early stopping。
● 什么是seq2seq model
參考回答:
● 激活函數的作用
參考回答:
● 為什么用relu就不用sigmoid了
參考回答:
● 講一下基於WFST的靜態解碼網絡的語音識別流程?
參考回答:
● 目標檢測了解嗎,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主要改進有下面兩個:
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,而這里的划分區域,只的是邏輯上的划分。
● 梯度消失梯度爆炸怎么解決
參考回答:
sigmoid函數的梯度隨着x的增大或減小和消失,而ReLU不會。
2)、使用批規范化
通過規范化操作將輸出信號x規范化到均值為0,方差為1保證網絡的穩定性。從上述分析分可以看到,反向傳播式子中有w的存在,所以w的大小影響了梯度的消失和爆炸,Batch Normalization 就是通過對每一層的輸出規范為均值和方差一致的方法,消除了w帶來的放大縮小的影響,進而解決梯度消失和爆炸的問題。
● RNN容易梯度消失,怎么解決?
參考回答:
既然在BP過程中會產生梯度消失(就是偏導無限接近0,導致長時記憶無法更新),那么最簡單粗暴的方法,設定閾值,當梯度小於閾值時,更新的梯度為閾值。
優點:簡單粗暴
缺點:很難找到滿意的閾值
2)、LSTM(Long Short-Term Memory)
一定程度上模仿了長時記憶,相比於梯度裁剪,最大的優點就是,自動學習在什么時候可以將error反向傳播,自動控制哪些是需要作為記憶存儲在LSTM cell中。一般長時記憶模型包括寫入,讀取,和忘記三個過程對應到LSTM中就變成了input_gate,output_gate,
forget_gate,三個門,范圍在0到1之間,相當於對輸入輸出進行加權的學習,利用大量數據來自動學習加權的參數(即學習了哪些錯誤可以用BP更新參數)。具體的公式表達:
優點:模型自動學習更新參數
● 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通道),卷積核的深度必須同輸入的通道數,輸出的通道數等於卷積核的個數。 卷積操作會改變輸入特征圖的通道數。 |
池化只是在二維數據上操作的,因此不改變輸入的通道數。對於多通道的輸入,這一點和卷積區別很大。 |
| 特性 |
權值共享:減少了參數的數量,並利用了圖像目標的位置無關性。 稀疏連接:輸出的每個值只依賴於輸入的部分值。 |
● 防止過擬合有哪些方法
參考回答:
● dropout咋回事講講
參考回答:
在Dropout的情況下,模型是共享參數的,其中每個模型繼承的父神經網絡參 數的不同子集。參數共享使得在有限可用的內存下代表指數數量的模型變得可能。 在Bagging的情況下,每一個模型在其相應訓練集上訓練到收斂。
在Dropout的情況下,通常大部分模型都沒有顯式地被訓練,通常該模型很大,以致到宇宙毀滅都不 能采樣所有可能的子網絡。取而代之的是,可能的子網絡的一小部分訓練單個步驟,參數共享導致剩余的子網絡能有好的參數設定。
● relu
參考回答:

其中橫軸是時間(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作為激活函數,這種現象尤為明顯,將導致模型收斂停滯不前。
