乾貨!深度學習面試題目合集

● BatchNormalization的作用

參考回答:神經網絡在訓練的時候隨著網絡層數的加深,激活函數的輸入值的整體分佈逐漸往激活函數的取值區間上下限靠近,從而導致在反向傳播時低層的神經網絡的梯度消失。而BatchNormalization的作用是通過規範化的手段,將越來越偏的分佈拉回到標準化的分佈,使得激活函數的輸入值落在激活函數對輸入比較敏感的區域,從而使梯度變大,加快學習收斂速度,避免梯度消失的問題。

● 梯度消失

參考回答:在神經網絡中,當前面隱藏層的學習速率低於後面隱藏層的學習速率,即隨著隱藏層數目的增加,分類準確率反而下降了。這種現象叫做消失的梯度問題。

● 循環神經網絡,為什麼好?

參考回答:循環神經網絡模型(RNN)是一種節點定向連接成環的人工神經網絡,是一種反饋神經網絡,RNN利用內部的記憶來處理任意時序的輸入序列,並且在其處理單元之間既有內部的反饋連接又有前饋連接,這使得RNN可以更加容易處理不分段的文本等。

● 什麼是Group Convolution

參考回答:若卷積神將網絡的上一層有N個卷積核,則對應的通道數也為N。設群數目為M,在進行卷積操作的時候,將通道分成M份,每個group對應N/M個通道,然後每個group卷積完成後輸出疊在一起,作為當前層的輸出通道。

● 什麼是RNN

參考回答:一個序列當前的輸出與前面的輸出也有關,在RNN網絡結構中中,隱藏層的輸入不僅包括輸入層的輸出還包含上一時刻隱藏層的輸出,網絡會對之前的信息進行記憶並應用於當前的輸入計算中。

● 訓練過程中,若一個模型不收斂,那麼是否說明這個模型無效?導致模型不收斂的原因有哪些?

參考回答:並不能說明這個模型無效,導致模型不收斂的原因可能有數據分類的標註不準確,樣本的信息量太大導致模型不足以fit整個樣本空間。學習率設置的太大容易產生震盪,太小會導致不收斂。可能複雜的分類任務用了簡單的模型。數據沒有進行歸一化的操作。

● 圖像處理中銳化和平滑的操作

參考回答:銳化就是通過增強高頻分量來減少圖像中的模糊,在增強圖像邊緣的同時也增加了圖像的噪聲。平滑與銳化相反,過濾掉高頻分量,減少圖像的噪聲是圖片變得模糊。

● VGG使用3*3卷積核的優勢是什麼?

參考回答:2個33的卷積核串聯和55的卷積核有相同的感知野,前者擁有更少的參數。多個3*3的卷積核比一個較大尺寸的卷積核有更多層的非線性函數,增加了非線性表達,使判決函數更具有判決性。

● Relu比Sigmoid的效果好在哪裡?

參考回答:Sigmoid的導數只有在0的附近時有較好的激活性,而在正負飽和區域的梯度趨向於0,從而產生梯度彌散的現象,而relu在大於0的部分梯度為常數,所以不會有梯度彌散現象。Relu的導數計算的更快。Relu在負半區的導數為0,所以神經元激活值為負時,梯度為0,此神經元不參與訓練,具有稀疏性。

● 問題:神經網絡中權重共享的是?

參考回答:卷積神經網絡、循環神經網絡解析:通過網絡結構直接解釋

● 問題:神經網絡激活函數?

參考回答:sigmod、tanh、relu解析:需要掌握函數圖像,特點,互相比較,優缺點以及改進方法

● 問題:在深度學習中,通常會finetuning已有的成熟模型,再基於新數據,修改最後幾層神經網絡權值,為什麼?

參考回答:實踐中的數據集質量參差不齊,可以使用訓練好的網絡來進行提取特徵。把訓練好的網絡當做特徵提取器。

● 問題:畫GRU結構圖

參考回答:

乾貨!深度學習面試題目合集

GRU有兩個門:更新門,輸出門解析:如果不會畫GRU,可以畫LSTM或者RNN。再或者可以講解GRU與其他兩個網絡的聯繫和區別。不要直接就說不會。

● Attention機制的作用

參考回答:減少處理高維輸入數據的計算負擔,結構化的選取輸入的子集,從而降低數據的維度。讓系統更加容易的找到輸入的數據中與當前輸出信息相關的有用信息,從而提高輸出的質量。幫助類似於decoder這樣的模型框架更好的學到多種內容模態之間的相互關係。

● Lstm和Gru的原理

參考回答:Lstm由輸入門,遺忘門,輸出門和一個cell組成。第一步是決定從cell狀態中丟棄什麼信息,然後在決定有多少新的信息進入到cell狀態中,最終基於目前的cell狀態決定輸出什麼樣的信息。Gru由重置門和更新門組成,其輸入為前一時刻隱藏層的輸出和當前的輸入,輸出為下一時刻隱藏層的信息。重置門用來計算候選隱藏層的輸出,其作用是控制保留多少前一時刻的隱藏層。跟新門的作用是控制加入多少候選隱藏層的輸出信息,從而得到當前隱藏層的輸出。

● 什麼是dropout

參考回答:在神經網絡的訓練過程中,對於神經單元按一定的概率將其隨機從網絡中丟棄,從而達到對於每個mini-batch都是在訓練不同網絡的效果,防止過擬合。

● LSTM每個門的計算公式

參考回答:

遺忘門:

乾貨!深度學習面試題目合集

輸入門:

乾貨!深度學習面試題目合集

輸出門:

乾貨!深度學習面試題目合集


● DropConnect的原理

參考回答:防止過擬合方法的一種,與dropout不同的是,它不是按概率將隱藏層的節點輸出清0,而是對每個節點與之相連的輸入權值以一定的概率清0。

● 深度學習瞭解多少,有看過底層代碼嗎?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,則滑動窗口矩陣每行大小為WH,一共KK行.

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

最後將核矩陣和滑動窗口矩陣相乘,每一行就是一個特徵圖,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有什麼區別

參考回答:目標檢測,也叫目標提取,是一種基於目標幾何和統計特徵的圖像分割,它將目標的分割和識別合二為一,其準確性和實時性是整個系統的一項重要能力。尤其是在複雜場景中,需要對多個目標進行實時處理時,目標自動提取和識別就顯得特別重要。隨著計算機技術的發展和計算機視覺原理的廣泛應用,利用計算機圖像處理技術對目標進行實時跟蹤研究越來越熱門,對目標進行動態實時跟蹤定位在智能化交通系統、智能監控系統、軍事目標檢測及醫學導航手術中手術器械定位等方面具有廣泛的應用價值。

● SPP,YOLO瞭解嗎?

參考回答:SPP-Net簡介:SPP-Net主要改進有下面兩個:1).共享卷積計算、2).空間金字塔池化在SPP-Net中同樣由這幾個部分組成:ss算法、CNN網絡、SVM分類器、bounding boxss算法的區域建議框同樣在原圖上生成,但是卻在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中就變成了inputgate,outputgate,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函數。具體為什麼要用這兩個函數,由於剛接觸還不能給出一定的解釋,日後理解了再補充。

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

● 防止過擬合有哪些方法

參考回答: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作為激活函數,這種現象尤為明顯,將導致模型收斂停滯不前。

● 神經網絡為啥用交叉熵。參考回答:通過神經網絡解決多分類問題時,最常用的一種方式就是在最後一層設置n個輸出節點,無論在淺層神經網絡還是在CNN中都是如此,比如,在AlexNet中最後的輸出層有1000個節點,而即便是ResNet取消了全連接層,也會在最後有一個1000個節點的輸出層。一般情況下,最後一個輸出層的節點個數與分類任務的目標數相等。假設最後的節點數為N,那麼對於每一個樣例,神經網絡可以得到一個N維的數組作為輸出結果,數組中每一個維度會對應一個類別。在最理想的情況下,如果一個樣本屬於k,那麼這個類別所對應的的輸出節點的輸出值應該為1,而其他節點的輸出都為0,即[0,0,1,0,….0,0],這個數組也就是樣本的Label,是神經網絡最期望的輸出結果,交叉熵就是用來判定實際的輸出與期望的輸出的接近程度。

● 注意力公式參考回答:Soft attention、global attention、動態attentionHard attention靜態attention“半軟半硬”的attention (local attention)強制前向attention

● 論文flow情況參考回答:談談自己投稿的論文,論文投稿級別,論文內容,用到的方法,對比方法等

● Flappy.Bird開發者,怎麼利用DNQ方法強化學習你的遊戲AI參考回答:強化學習是機器學習裡面的一個分支。它強調如何基於環境而行動,以取得最大化的預期收益。其靈感來源於心理學中的行為主義理論,既有機體如何在環境給予的獎勵或者懲罰的刺激下,逐步形成對刺激的預期,產生能夠最大利益的習慣性行為。結構簡圖如下:

乾貨!深度學習面試題目合集

因為強化學習考慮到了自主個體、環境、獎勵等因素,所以很多人包括強化學習的研究者Richard Sutton 都認為它是人工智能中最高層的模型,其它深度學習、機器學習模型都是它的子系統。在圍棋界先後打敗世界冠軍的李世乭和柯潔額alphaGo就使用了強化學習模型,也正是這兩次比賽,把人工智能這個概念傳遞給了大眾。使用的是卷積神經網絡結構。

● LeNet-5結構

參考回答:輸入層:32∗3232∗32的圖片,也就是相當於10241024個神經元

C1層:選取66個特徵卷積核,大小為5∗55∗5(不包含偏置),得到66個特徵圖,每個特徵圖的大小為32−5+1=2832−5+1=28,也就是神經元的個數由10241024減小到了28∗28=78428∗28=784。輸入層與C1層之間的參數:6∗(5∗5+1)6∗(5∗5+1),對於卷積層C1,每個像素都與前一層的5∗55∗5個像素和11個bias有連接,有6∗(5∗5+1)∗(28∗28)6∗(5∗5+1)∗(28∗28)個連接

S2層:池化,是一個下采樣層(為什麼是下采樣?利用圖像局部相關性的原理,對圖像進行子抽樣,可以減少數據處理量同時保留有用信息),有66個14∗1414∗14的特徵圖,特徵圖中的每個單元與C1中相對應特徵圖的2∗22∗2鄰域相連接。S2S2層每個單元對應C1C1中44個求和,乘以一個可訓練參數,再加上一個可訓練偏置。

C1與S2之間的參數:每一個2∗22∗2求和,然後乘以一個參數,加上一個偏置,共計2∗6=122∗6=12個參數。S2S2中的每個像素都與C1C1中的2∗22∗2個像素和11個偏置相連接,所以有6∗5∗14∗14=58806∗5∗14∗14=5880個連接

C3層:選取卷積核大小為5∗55∗5,得到新的圖片大小為10∗1010∗10我們知道S2包含:6張14∗146張14∗14大小的圖片,我們希望這一層得到的結果是:16張10∗1016張10∗10的圖片。這1616張圖片的每一張,是通過S2S2的66張圖片進行加權組合得到的,具體是怎麼組合的呢?

S2與C3之間的組合

前66個feature map與S2S2層相連的33個feature map相連接,後面66個feature map與S2層相連的4個S2層相連的4個feature map相連接,後面33個feature map與S2S2層部分不相連的44個feature map相連接,最後一個與S2S2層的所有feature map相連。卷積核大小依然為5∗55∗5,總共有6∗(3∗5∗5+1)6∗(3∗5∗5+1)+6∗(4∗5∗5+1)6∗(4∗5∗5+1)+3∗(4∗5∗5+1)3∗(4∗5∗5+1)+1∗(6∗5∗5+1)=15161∗(6∗5∗5+1)=1516個參數。而圖像大小為10∗1010∗10,所以共有151600151600個連接。

乾貨!深度學習面試題目合集

S4層池化,窗口大小為2∗22∗2,有1616個特徵圖,總共有3232個參數C3與S4之間的參數16∗(25∗4+25)=200016∗(25∗4+25)=2000個連接

C5層總共120120個feature map,每個feature map與S4S4層所有的feature map相連接,卷積核大小是5∗55∗5,而S4S4層的feature map的大小也是5∗55∗5,所以C5C5的feature map就變成了1個點,共計有120(25∗16+1)=48120120(25∗16+1)=48120個參數。

F6層全連接F6F6相當於MLP中的隱含層,有8484個節點,所以有84∗(120+1)=1016484∗(120+1)=10164個參數。F6F6層採用了正切函數。

輸出層採用了RBF函數,即徑向歐式距離函數

● 推導LSTM正向傳播和單向傳播過程參考回答:前向推導過程:

乾貨!深度學習面試題目合集

反向推導過程:

乾貨!深度學習面試題目合集

● LSTM原理,與GRU區別

參考回答:LSTM算法全稱為Long short-term memory,是一種特定形式的RNN(Recurrent neural network,循環神經網絡),而RNN是一系列能夠處理序列數據的神經網絡的總稱。RNN在處理長期依賴(時間序列上距離較遠的節點)時會遇到巨大的困難,因為計算距離較遠的節點之間的聯繫時會涉及雅可比矩陣的多次相乘,這會帶來梯度消失(經常發生)或者梯度膨脹(較少發生)的問題,這樣的現象被許多學者觀察到並獨立研究。為了解決該問題,研究人員提出LSTM。

LSTM是門限RNN,其單一節點的結構如下圖1所示。LSTM的巧妙之處在於通過增加輸入門限,遺忘門限和輸出門限,使得自循環的權重是變化的,這樣一來在模型參數固定的情況下,不同時刻的積分尺度可以動態改變,從而避免了梯度消失或者梯度膨脹的問題。

乾貨!深度學習面試題目合集

圖1 LSTM的CELL示意圖

根據LSTM網絡的結構,每個LSTM單元的計算公式如下圖2所示,其中Ft表示遺忘門限,It表示輸入門限,Ct表示前一時刻cell狀態、Ct表示cell狀態(這裡就是循環發生的地方),Ot表示輸出門限,Ht表示當前單元的輸出,Ht-1表示前一時刻單元的輸出。

乾貨!深度學習面試題目合集

圖2 LSTM計算公式

與GRU區別:1)GRU和LSTM的性能在很多任務上不分伯仲。2)GRU 參數更少因此更容易收斂,但是數據集很大的情況下,LSTM表達性能更好。3)從結構上來說,GRU只有兩個門(update和reset),LSTM有三個門(forget,input,output),GRU直接將hidden state 傳給下一個單元,而LSTM則用memory cell 把hidden state 包裝起來。

● LSTM和Naive RNN的區別

參考回答: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的基礎上,增加了對過去狀態的過濾,從而可以選擇哪些狀態對當前更有影響,而不是簡單的選擇最近的狀態。

● 神經網絡為啥用交叉熵

參考回答:通過神經網絡解決多分類問題時,最常用的一種方式就是在最後一層設置n個輸出節點,無論在淺層神經網絡還是在CNN中都是如此,比如,在AlexNet中最後的輸出層有1000個節點,而即便是ResNet取消了全連接層,也會在最後有一個1000個節點的輸出層。一般情況下,最後一個輸出層的節點個數與分類任務的目標數相等。假設最後的節點數為N,那麼對於每一個樣例,神經網絡可以得到一個N維的數組作為輸出結果,數組中每一個維度會對應一個類別。在最理想的情況下,如果一個樣本屬於k,那麼這個類別所對應的的輸出節點的輸出值應該為1,而其他節點的輸出都為0,即[0,0,1,0,….0,0],這個數組也就是樣本的Label,是神經網絡最期望的輸出結果,交叉熵就是用來判定實際的輸出與期望的輸出的接近程度。

● 注意力公式

參考回答:Soft attention、global attention、動態attentionHard attention

“半軟半硬”的attention (local attention)

靜態attention

強制前向attention

乾貨!深度學習面試題目合集

● Inception Score 評價指標介紹

參考回答:定義:

乾貨!深度學習面試題目合集

推導出上式的意義:

乾貨!深度學習面試題目合集

故要使得生成圖像的inception score高,就需要

1.最大化H(y);也就是對於輸入的樣本,通過inception_v3模型後的類別要均衡,衡量模式坍塌。

2.最小化H(y|x);說明對於輸入的樣本,通過inception_v3模型後預測某類別的置信度要高,衡量圖片生成的質量。

● 使用的 CNN 模型權重之間有關聯嗎?

參考回答:權重之間有關聯。CNN是權重共享,減少了參數的數量。簡單來說就是用一個卷積核來和一個圖像來進行卷積,記住是同一個卷積核,不改變卷積核的值。這樣可以減少權值參數。共享就是一個圖片對卷積核是共同享有的。對於一個100100像素的圖像,如果我們用一個神經元來對圖像進行操作,這個神經元大小就是100100=10000,單如果我們使用1010的卷積核,我們雖然需要計算多次,但我們需要的參數只有1010=100個,加上一個偏向b,一共只需要101個參數。我們取得圖像大小還是100100。如果我們取得圖像比較大,它的參數將會更加多。我們通過1010的卷積核對圖像進行特徵提取,這樣我們就得到一個Feature Map。

一個卷積核只能提取一個特徵,所以我們需要多幾個卷積核,假設我們有6個卷積核,我們就會得到6個Feature Map,將這6個Feature Map組成一起就是一個神經元。這6個Feature Map我們需要101*6=606個參數。這個值和10000比還是比較小的。如果像之前的神經網絡, 兩兩相連, 需要 28x28 = 784 輸入層, 加上第一個隱藏層30個神經元, 則需要784x30再加上30個b, 總共23,550個參數! 多了40倍的參數。

5、百度實習:1)模型壓縮方法;2)CPM 模型壓縮用了哪些方法;3)壓縮效果(體積、指標、部署);4)Kaggle 比賽,比賽背景,怎麼進行數據清洗,類別平衡,相近類別重分類,最終成績是多少,覺得跟前幾名差距在哪,有沒有嘗試過集成的方法;5)人臉項目,大概流程,GPU 加速的地方,兩個網絡的訓練過程,級聯網絡的 inference 過程,能同時檢測多個人臉嗎?多尺度縮放怎麼處理,resize 自己寫?只是檢測嗎,有沒有識別?或者其他

● CycleGAN 原理介紹一下

參考回答:CycleGAN其實就是一個A→B單向GAN加上一個B→A單向GAN。兩個GAN共享兩個生成器,然後各自帶一個判別器,所以加起來總共有兩個判別器和兩個生成器。一個單向GAN有兩個loss,而CycleGAN加起來總共有四個loss。CycleGAN論文的原版原理圖和公式如下,其實理解了單向GAN那麼CycleGAN已經很好理解。

乾貨!深度學習面試題目合集

乾貨!深度學習面試題目合集

下面放一張網友們自制的CycleGAN示意圖,比論文原版的更加直觀,出處見水印。

乾貨!深度學習面試題目合集

● 訓練 GAN 的時候有沒有遇到什麼問題

參考回答:遇到GAN訓練不穩定問題。通過Wasserstein GAN來解決這個問題。WGAN前作分析了Ian Goodfellow提出的原始GAN兩種形式各自的問題,第一種形式等價在最優判別器下等價於最小化生成分佈與真實分佈之間的JS散度,由於隨機生成分佈很難與真實分佈有不可忽略的重疊以及JS散度的突變特性,使得生成器面臨梯度消失的問題;第二種形式在最優判別器下等價於既要最小化生成分佈與真實分佈直接的KL散度,又要最大化其JS散度,相互矛盾,導致梯度不穩定,而且KL散度的不對稱性使得生成器寧可喪失多樣性也不願喪失準確性,導致collapse mode現象。WGAN前作針對分佈重疊問題提出了一個過渡解決方案,通過對生成樣本和真實樣本加噪聲使得兩個分佈產生重疊,理論上可以解決訓練不穩定的問題,可以放心訓練判別器到接近最優,但是未能提供一個指示訓練進程的可靠指標,也未做實驗驗證。

WGAN本作引入了Wasserstein距離,由於它相對KL散度與JS散度具有優越的平滑特性,理論上可以解決梯度消失問題。接著通過數學變換將Wasserstein距離寫成可求解的形式,利用一個參數數值範圍受限的判別器神經網絡來最大化這個形式,就可以近似Wasserstein距離。在此近似最優判別器下優化生成器使得Wasserstein距離縮小,就能有效拉近生成分佈與真實分佈。WGAN既解決了訓練不穩定的問題,也提供了一個可靠的訓練進程指標,而且該指標確實與生成樣本的質量高度相關。

● CPM 模型壓縮怎麼做的?有壓過 OpenPose 嗎?

參考回答:預測和圖像特徵計算模塊可以被深度網絡架構來取代,其中圖像和組織特徵的表達可以從數據中直接學習。卷積架構讓全局可導,因此可以CPM所有階段聯合訓練。CPM可以描述為在PM隱含空間模型框架下的卷積架構。1)用局部圖線索來進行關鍵定位

第一階段只用局部圖線索來預測部件信任度。figure 2c展示用本地圖信息的部件檢測的深度網絡。先序哦是局部的因為第一階段感知野只是輸出像素附近的一小塊。我們用5層卷機網絡組成的結構(尾部是量個1x`1卷積層的全卷積架構)。實踐中,為了得到一定精度,我們把圖片標準化為368x368,感受野是160x160.網絡可以看成讓深度網絡在圖像上滑動,並將160x160中局部圖像線索迴歸至代表了各個部件在各個位置的score的P+1大小輸出向量。

2)基於空間環境信息的級聯預測

對於性狀穩定的頭和肩膀,檢測效果很好,然而人體骨架的連接處準確率就很低,因為形狀差異很大。部件周圍的信任映射,雖然有噪聲,但是很有價值。figure 3中,當檢測右手肘時,右肩膀的信任映射達到高峰,可以成為一個很強的線索。後續階段的預測器(gt)可以用圖位置z附近含有噪聲的信任映射裡的空間組織信息(fai),並且利用“部件的幾何設定都是恆定的”這一事實來提高改善預測。

第二個階段,分類器g2接收特徵x2和前一階段fai的輸入。前一階段不同部件的位置z附近的空間區域產生信任映射,特徵方程是把信任映射出的特點編碼。CPM不用顯式方程來計算環境特徵,而是定義含有前一階段信任度的fai作為預測機的感受野。

這個網絡的設計為了在第二階段輸出層得到一個足夠大的感知野,可以學習複雜和長距離的部件關係。通過應用遷移階段的輸出層特徵(而不是用圖模型的顯式方程),後續卷積層自由結合最有預測力的特徵,來形成環境信息。第一階段的信任映射來自用小感知野來檢驗局部圖像的網絡。第二階段,我們設計了一個極大擴充的等價感知野。大感知野可以用兩種方法實現:犧牲準確度的池化,增加參數為代價的加大卷積核大小,或者冒著可能讓反傳消失風險增加網絡層數。我們選擇增加捲積層,在8x降維熱力圖上達到大感知野,讓我們儘可能減少參數數量。8步網絡更容易獲得大感知野,它和4步網絡表現一樣好(在高精確度區域也是)。我們也在PM之後圖像特徵上映射上重複了類似架構,讓空間組織依賴圖像而且允許錯誤關聯。

我們發現,感受野變大,準確性也變大。通過一系列實驗,figure 4的準確度隨著感受野的變化曲線,改變感受野只通過改變結構而不是增加參數。準確度隨著感受野變大而變大,在250像素飽和,這也大概是歸一化物體的大小。這說明,網絡確實讓遠距離物體關係編碼,並且這是有益的。我們最好的數據集中,我們把圖像歸一化為368x368,基於第一級信任映射的第二級感知野輸出是31x31,這和原始圖片的400x400像素等價,其半徑可以覆蓋任何部件。當階段增多,有效感知野就會變大。我們有6個階段。

3)用CPM學習

這個深度架構可以有許多層。訓練這個網可能讓梯度消失,就是反向傳播在中間層會減弱。pm級聯預測框架有一個自然的解決這個問題的方法。我們不斷激勵這個網絡,通過在每個階段t的輸出定義一個損失函數,讓預測的和實際信任映射的距離最小化。部件p理想的信任映射是bp,通過把p部件的最可能點設定在ground truth位置。

壓縮過OpenPose,效果還可以。

● 用過哪些 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往往能取得更好的效果。

● 圖像基礎:傳統圖像處理方法知道哪些,圖像對比度增強說一下

參考回答:數字圖像處理常用方法:1)圖像變換:由於圖像陣列很大,直接在空間域中進行處理,涉及計算量很大。因此,往往採用各種圖像變換的方法,如傅立葉變換、沃爾什變換、離散餘弦變換等間接處理技術,將空間域的處理轉換為變換域處理,不僅可減少計算量,而且可獲得更有效的處理(如傅立葉變換可在頻域中進行數字濾波處理)。目前新興研究的小波變換在時域和頻域中都具有良好的局部化特性,它在圖像處理中也有著廣泛而有效的應用。

2)圖像編碼壓縮:圖像編碼壓縮技術可減少描述圖像的數據量(即比特數),以便節省圖像傳輸、處理時間和減少所佔用的存儲器容量。壓縮可以在不失真的前提下獲得,也可以在允許的失真條件下進行。編碼是壓縮技術中最重要的方法,它在圖像處理技術中是發展最早且比較成熟的技術。

3)圖像增強和復原:圖像增強和復原的目的是為了提高圖像的質量,如去除噪聲,提高圖像的清晰度等。圖像增強不考慮圖像降質的原因,突出圖像中所感興趣的部分。如強化圖像高頻分量,可使圖像中物體輪廓清晰,細節明顯;如強化低頻分量可減少圖像中噪聲影響。圖像復原要求對圖像降質的原因有一定的瞭解,一般講應根據降質過程建立“降質模型”,再採用某種濾波方法,恢復或重建原來的圖像。

4)圖像分割:圖像分割是數字圖像處理中的關鍵技術之一。圖像分割是將圖像中有意義的特徵部分提取出來,其有意義的特徵有圖像中的邊緣、區域等,這是進一步進行圖像識別、分析和理解的基礎。雖然目前已研究出不少邊緣提取、區域分割的方法,但還沒有一種普遍適用於各種圖像的有效方法。因此,對圖像分割的研究還在不斷深入之中,是目前圖像處理中研究的熱點之一。

5)圖像描述:圖像描述是圖像識別和理解的必要前提。作為最簡單的二值圖像可採用其幾何特性描述物體的特性,一般圖像的描述方法採用二維形狀描述,它有邊界描述和區域描述兩類方法。對於特殊的紋理圖像可採用二維紋理特徵描述。隨著圖像處理研究的深入發展,已經開始進行三維物體描述的研究,提出了體積描述、表面描述、廣義圓柱體描述等方法。

6)圖像分類(識別):圖像分類(識別)屬於模式識別的範疇,其主要內容是圖像經過某些預處理(增強、復原、壓縮)後,進行圖像分割和特徵提取,從而進行判決分類。圖像分類常採用經典的模式識別方法,有統計模式分類和句法(結構)模式分類,近年來新發展起來的模糊模式識別和人工神經網絡模式分類在圖像識別中也越來越受到重視。

全局對比度增強

  1. 直方圖均衡化 Histogram Equalization

算法:

1)根據圖像灰度計算灰度概率密度函數PDF

2)計算累積概率分佈函數CDF

3)將CDF歸一化到原圖灰度取值範圍,如[0,255]。

4)之後CDF四捨五入取整,得到灰度轉換函數sk=T(rk)

5)將CDF作為轉換函數,將灰度為rk的點轉換為sk灰度

  1. 直方圖匹配 Histogram Matching

算法:

1)根據圖像計算概率密度分佈pr(r);

2)根據pr(r)計算累計分佈函數sk=T(rk);

3)根據給定的目標分佈pz(z)計算累計分佈函數G(zq);

4)對於每一個k,找到一個q,使得G(zq)約等於sk;

5)將原圖中灰度為k的點變為灰度q;

局部對比度增強

  1. 鄰域直方圖均衡:將全局直方圖均衡的思想應用於鄰域直方圖處理中。
  2. 鄰域直方圖匹配:將全局直方圖匹配的思想應用於鄰域直方圖處理中。
  3. 鄰域統計方法

算法

1)初始化:增強常數E,灰度下閾值k0,標準差下閾值k1,標準差上閾值k2,窗口半寬s;

2)計算圖像灰度均值MG和灰度標準差σG;

3)對於每一個像素,計算鄰域(大小為2∗step+1的方塊)內灰度均值ML和標準差σL;

4)如果ML<=k0∗MGML<=k0∗MG並且k1∗σG<=σL<=k2∗σG,將像素灰度乘以E。

● 介紹一下圖像的高頻、低頻部分,知道哪些圖像補全的方法

參考回答:圖像的頻率:灰度值變化劇烈程度的指標,是灰度在平面空間上的梯度。(1)什麼是低頻?

低頻就是顏色緩慢地變化,也就是灰度緩慢地變化,就代表著那是連續漸變的一塊區域,這部分就是低頻. 對於一幅圖像來說,除去高頻的就是低頻了,也就是邊緣以內的內容為低頻,而邊緣內的內容就是圖像的大部分信息,即圖像的大致概貌和輪廓,是圖像的近似信息。

(2)什麼是高頻?

反過來, 高頻就是頻率變化快.圖像中什麼時候灰度變化快?就是相鄰區域之間灰度相差很大,這就是變化得快.圖像中,一個影像與背景的邊緣部位,通常會有明顯的差別,也就是說變化那條邊線那裡,灰度變化很快,也即是變化頻率高的部位.因此,圖像邊緣的灰度值變化快,就對應著頻率高,即高頻顯示圖像邊緣。圖像的細節處也是屬於灰度值急劇變化的區域,正是因為灰度值的急劇變化,才會出現細節。

另外噪聲(即噪點)也是這樣,在一個像素所在的位置,之所以是噪點,就是因為它與正常的點顏色不一樣了,也就是說該像素點灰度值明顯不一樣了,,也就是灰度有快速地變化了,所以是高頻部分,因此有噪聲在高頻這麼一說。

圖像補全的方法:

Region Filling and Object Removal by Exemplar-Based Image Inpainting

算法的流程大致如下:

1)對待補全區域邊界的像素依次計算補全的優先度(priority),這個優先度主要考慮2個因素。一個是周圍像素可信度高的位置要優先補,另一個是位於圖像梯度變化劇烈的位置要優先補。綜合二者得到所有優先度之後,挑選優先度最高的像素來補

2)對於上一步找到的待補全像素,考慮它周圍的一個小patch(比如3*3)。在圖像已知部分搜索所有的patch,找到最相似的patch

3)用找到的best match來補全未知部分,並更新相關數值

但是我們也不難發現這個方法存在的問題:如果圖像已知部分找不到相似的patch,那算法將無法進行;這個方法只適用於補全背景以低頻信息和重複性紋理為主的圖像;搜索相似的patch計算複雜度非常高,算法運行效率低。

Scene Completion Using Millions of Photographs

算法的大致流程如下:

1)從Flickr上下載兩百萬圖片構建數據庫,以”landscape””city””park”等關鍵詞搜索戶外場景的圖片。

2)對於一張待補全圖像,從數據庫中挑選200個場景最相似的圖片,這裡使用gist scene descriptor和圖像下采樣到4*4作為匹配的特徵向量。

3)將補全區域邊界外80個pixel的區域作為context。對於每一張匹配的圖像,搜索所有的平移空間和3個尺度的scale空間,根據context部分的匹配誤差,選擇最佳的補全位置;之後利用graph-cut算法求解最佳的融合邊界。

4)利用標準的泊松融合處理融合邊界。

5)將前幾步的匹配cost和graph-cut的cost加起來,返回cost最小的20的結果供用戶挑選。

Context Encoders: Feature Learning by Inpainting

文章提出的網絡結構如下,包括3個部分:Encoder, Channel-wise fully-connected layer, Decoder。Encoder的結構直接借鑑了AlexNet前5層的卷積層結構,具體結構如下。輸入的crop尺寸是227Í227,卷積之後得到的feature map結構是256層6 Í 6。所有的weight都隨機初始化。

Channel-wise fully-connected layer是對普通fc層的一種改進。之所以加入fc層是為了使feature map每一層的信息可以在內部交流。但傳統的fc層參數太多,因此作者提出可以在fc中去掉feature map層間的信息交流,從而減少參數規模。在fc之後會接一個stride為1的卷積層,來實現層間的信息交流。

Decoder的目的是將壓縮的feature map一步步放大,恢復到原始圖片的尺寸。文章提出採用5個up-convolutional層,每層後接一個RELU。上採樣的結構如下。

● 百度實習:模型壓縮的大方向。CPM 模型怎麼壓縮的,做了哪些工作?

參考回答:

預測和圖像特徵計算模塊可以被深度網絡架構來取代,其中圖像和組織特徵的表達可以從數據中直接學習。卷積架構讓全局可導,因此可以CPM所有階段聯合訓練。CPM可以描述為在PM隱含空間模型框架下的卷積架構。1)用局部圖線索來進行關鍵定位

第一階段只用局部圖線索來預測部件信任度。figure 2c展示用本地圖信息的部件檢測的深度網絡。先序哦是局部的因為第一階段感知野只是輸出像素附近的一小塊。我們用5層卷機網絡組成的結構(尾部是量個1x`1卷積層的全卷積架構)。實踐中,為了得到一定精度,我們把圖片標準化為368x368,感受野是160x160.網絡可以看成讓深度網絡在圖像上滑動,並將160x160中局部圖像線索迴歸至代表了各個部件在各個位置的score的P+1大小輸出向量。

2)基於空間環境信息的級聯預測

對於性狀穩定的頭和肩膀,檢測效果很好,然而人體骨架的連接處準確率就很低,因為形狀差異很大。部件周圍的信任映射,雖然有噪聲,但是很有價值。figure 3中,當檢測右手肘時,右肩膀的信任映射達到高峰,可以成為一個很強的線索。後續階段的預測器(gt)可以用圖位置z附近含有噪聲的信任映射裡的空間組織信息(fai),並且利用“部件的幾何設定都是恆定的”這一事實來提高改善預測。

第二個階段,分類器g2接收特徵x2和前一階段fai的輸入。前一階段不同部件的位置z附近的空間區域產生信任映射,特徵方程是把信任映射出的特點編碼。CPM不用顯式方程來計算環境特徵,而是定義含有前一階段信任度的fai作為預測機的感受野。

這個網絡的設計為了在第二階段輸出層得到一個足夠大的感知野,可以學習複雜和長距離的部件關係。通過應用遷移階段的輸出層特徵(而不是用圖模型的顯式方程),後續卷積層自由結合最有預測力的特徵,來形成環境信息。第一階段的信任映射來自用小感知野來檢驗局部圖像的網絡。第二階段,我們設計了一個極大擴充的等價感知野。大感知野可以用兩種方法實現:犧牲準確度的池化,增加參數為代價的加大卷積核大小,或者冒著可能讓反傳消失風險增加網絡層數。我們選擇增加捲積層,在8x降維熱力圖上達到大感知野,讓我們儘可能減少參數數量。8步網絡更容易獲得大感知野,它和4步網絡表現一樣好(在高精確度區域也是)。我們也在PM之後圖像特徵上映射上重複了類似架構,讓空間組織依賴圖像而且允許錯誤關聯。

我們發現,感受野變大,準確性也變大。通過一系列實驗,figure 4的準確度隨著感受野的變化曲線,改變感受野只通過改變結構而不是增加參數。準確度隨著感受野變大而變大,在250像素飽和,這也大概是歸一化物體的大小。這說明,網絡確實讓遠距離物體關係編碼,並且這是有益的。我們最好的數據集中,我們把圖像歸一化為368x368,基於第一級信任映射的第二級感知野輸出是31x31,這和原始圖片的400x400像素等價,其半徑可以覆蓋任何部件。當階段增多,有效感知野就會變大。我們有6個階段。

3)用CPM學習這個深度架構可以有許多層。訓練這個網可能讓梯度消失,就是反向傳播在中間層會減弱。pm級聯預測框架有一個自然的解決這個問題的方法。我們不斷激勵這個網絡,通過在每個階段t的輸出定義一個損失函數,讓預測的和實際信任映射的距離最小化。部件p理想的信任映射是bp,通過把p部件的最可能點設定在ground truth位置。

● Depthwise 卷積實際速度與理論速度差距較大,解釋原因。

參考回答:首先,caffe原先的gpu實現group convolution很糟糕,用for循環每次算一個卷積,速度極慢。第二,cudnn7.0及之後直接支持group convolution,但本人實測,速度比github上幾個直接寫cuda kernel計算的dw convolution速度慢。例如對於n=128, c=512, h=32, w=32, group=512的卷積跑100次,cudnn 7.0裡的group convolution需要4秒多,而DepthwiseConvolution大概只需要1秒。分析了一下dw convolution與普通convolution的理論計算複雜度,舉例如下:

卷積1:普通卷積,輸入為6464256,輸出為6464256,卷積核大小為33。參數為33256256=590K,計算量為646425633256=2.42G,計算過程的工作集內存總量(輸入輸出數據+參數)為64642562 + 33256*256 = 2.69M。

卷積2:dw卷積,輸入為6464256,輸出為6464256,卷積核大小為33。參數為33256=2.3K個,計算量為646425633=9.44M,計算過程的工作集內存總量為64642562 + 33256=2.10M。

卷積3:普通卷積,輸入為646416,輸出為646416,卷積核大小為33。參數為331616=2.3K個,計算量為6464163316=9.44M,計算過程的工作集內存總量為6464162 + 3316*16=133K。

可以看到卷積2肯定比卷積1快,因為計算量下降到1/256了,但卷積2實際上無法達到卷積1的256倍速度(我記得我測得結果大概是快10倍左右),因為工作集內存大小並沒有顯著降低。卷積2也無法達到卷積3的速度,因為雖然FLOPS相同,但工作集內存大小相差了很多倍,因此單位數據的計算密度小很多,很難充分利用GPU上的計算單元。

● RetinaNet 的大致結構畫一下

參考回答:

乾貨!深度學習面試題目合集

● RetinaNet為什麼比SSD效果好

參考回答:SSD 在訓練期間重新採樣目標類和背景類的比率,這樣它就不會被圖像背景淹沒。RetinaNet採用另一種方法來減少訓練良好的類的損失。因此,只要該模型能夠很好地檢測背景,就可以減少其損失並重新增強對目標類的訓練。所以RetinaNet比SSD 效果好。

原文來自:鴻鈞老祖

原文鏈接:

(1)https://www.cnblogs.com/zhangyang520/p/10969960.html

(2)https://www.cnblogs.com/zhangyang520/p/10969966.html

(3)https://www.cnblogs.com/zhangyang520/p/10969968.html



分享到:


相關文章: