當前位置:
首頁 > 知識 > 深度學習面試要點總結

深度學習面試要點總結

作者:劉浪

著作權歸作者所有。AI開發者獲得授權轉載,禁止二次轉載

https://zhuanlan.zhihu.com/p/62935978

Softmax函數與交叉熵

在Logistic regression二分類問題中,我們可以使用sigmoid函數將輸入Wx b映射到(0,1)區間中,從而得到屬於某個類別的概率。將這個問題進行泛化,推廣到多分類問題中,我們可以使用softmax函數,對輸出的值歸一化為概率值

這裡假設在進入函數之前,已經有模型輸出C值,其中C是要預測的類別數,模型可以是全連接網路的輸出aa,其輸出個數為C,即輸出為:

所以對每個樣本,它屬於類別i的概率為:

通過上式可以保證

,即屬於各個類別的概率和為1

對函數進行求導,即求:,第i項的輸出對第j項輸入的偏導。代入函數表達式,可以得到:

求導規則:對於,導數為:

所以在我們這個例子中,

上面兩個式子只是代表直接進行替換,而非真的等式。,(即g(x)=

進行求導),要分情況討論:

如果i=j,則求導結果為

如果i≠j,則求導結果為0

再來看對求導,結果為

所以,當i=j時:(其中,為了方便,令

)

當i≠j時:

標紅下,這倆公式很重要:

Loss function

對數似然函數

機器學習裡面,對模型的訓練都是對Loss function進行優化,在分類問題中,我們一般使用最大似然估計(Maximum likelihood estimation)來構造損失函數。對於輸入的x,其對應的類標籤為t,我們的目標是找到這樣的θ使得p(t|x)最大。在二分類的問題中,我們有:

其中,y=f(x)y=f(x)是模型預測的概率值,t是樣本對應的類標籤,將問題泛化為更一般的情況,多分類問題,此時t是one-hot編碼,例如[0,0,0,1,0,0],此時中間那個1對應真正的標籤:

由於連乘可能導致最終結果接近0的問題,一般對似然函數取對數的負數,變成最小化對數似然函數。

交叉熵

說交叉熵之前先介紹相對熵,相對熵又稱為KL散度(Kullback-Leibler Divergence),用來衡量兩個分布之間的距離,記為

這裡H(p)是p的熵。假設有兩個分布p和q,它們在給定樣本集上的相對熵定義為:

從這裡可以看出,交叉熵和相對熵相差了H(p),而當p已知的時候,H(p)是個常數,所以交叉熵和相對熵在這裡是等價的,反映了分布p和q之間的相似程度。關於熵與交叉熵等概念

回到我們多分類的問題上,真實的類標籤可以看作是分布,對某個樣本屬於哪個類別可以用One-hot的編碼方式,是一個維度為C的向量,比如在5個類別的分類中,[0, 1, 0, 0, 0]表示該樣本屬於第二個類,其概率值為1。我們把真實的類標籤分布記為p,該分布中,ti=1當i屬於它的真實類別c。同時,分類模型經過softmax函數之後,也是一個概率分布,因為

所以我們把模型的輸出的分布記為q,它也是一個維度為CC的向量,如[0.1, 0.8, 0.05, 0.05, 0]。

對一個樣本來說,真實類標籤分布與模型預測的類標籤分布可以用交叉熵來表示:

最終,對所有的樣本n,我們有以下loss function:

其中是樣本k屬於類別i的概率,是模型對樣本k預測為屬於類別i的概率。

當i=j時:

當i≠j時:

所以,將求導結果代入上式:

參考:Softmax函數與交叉熵

https://blog.csdn.net/behamcheung/article/details/71911133

神經網路訓練中的梯度消失與梯度爆炸

層數比較多的神經網路模型在訓練時也是會出現一些問題的,其中就包括梯度消失問題(gradient vanishing problem)和梯度爆炸問題(gradient exploding problem)。梯度消失問題和梯度爆炸問題一般隨著網路層數的增加會變得越來越明顯。

例如,對於下圖所示的含有3個隱藏層的神經網路,梯度消失問題發生時,接近於輸出層的hidden layer 3等的權值更新相對正常,但前面的hidden layer 1的權值更新會變得很慢,導致前面的層權值幾乎不變,仍接近於初始化的權值,這就導致hidden layer 1相當於只是一個映射層,對所有的輸入做了一個同一映射,這是此深層網路的學習就等價於只有後幾層的淺層網路的學習了。

而這種問題為何會產生呢?以下圖的反向傳播為例(假設每一層只有一個神經元且對於每一層,其中為sigmoid函數)

可以推導出

而sigmoid的導數如下圖

可見,的最大值為,而我們初始化的網路權值通常都小於1,因此,因此對於上面的鏈式求導,層數越多,求導結果越小,因而導致梯度消失的情況出現。這樣,梯度爆炸問題的出現原因就顯而易見了,即,也就是比較大的情況。但對於使用sigmoid激活函數來說,這種情況比較少。因為的大小也與有關(),除非該層的輸入值一直在一個比較小的範圍內。

其實梯度爆炸和梯度消失問題都是因為網路太深,網路權值更新不穩定造成的,本質上是因為梯度反向傳播中的連乘效應。對於更普遍的梯度消失問題,可以考慮用ReLU激活函數取代sigmoid激活函數。另外,LSTM的結構設計也可以改善RNN中的梯度消失問題。

參考:神經網路訓練中的梯度消失與梯度爆炸

https://zhuanlan.zhihu.com/p/25631496

Batchnorm原理

Batchnorm是歸一化的一種手段,極限來說,這種方式會減小圖像之間的絕對差異,突出相對差異,加快訓練速度,如果我們每一個batch輸入的數據都具有不同的分布,顯然會給網路的訓練帶來困難。另一方面,數據經過一層層網路計算後,其數據分布也在發生著變化,會給下一層的網路學習帶來困難。batchnorm就是為了解決這個分布變化問題。

BatchNorm就是對神經網路的每一層進行歸一化,假設將每一層輸出後的數據都歸一化到0均值,1方差,滿足正太分布,但是,此時有一個問題,每一層的數據分布都是標準正太分布,導致其完全學習不到輸入數據的特徵,因為,費勁心思學習到的特徵分布被歸一化了,因此,直接對每一層做歸一化顯然是不合理的。但是如果稍作修改,加入可訓練的參數做歸一化,那就是BatchNorm實現的了

演算法流程:

輸入:一個batch的樣本:,和超參數

輸出:

之所以稱之為batchnorm是因為所norm的數據是一個batch的,假設輸入數據是,輸出是,batchnorm的步驟如下:

先求出此次批量數據x的均值:

求出此次batch的方差:

接下來就是對x做歸一化,得到:

最重要的一步,引入縮放和平移變數,計算歸一化後的值

之前也說過如果直接做歸一化不做其他處理,神經網路是學不到任何東西的,但是加入這兩個參數後,事情就不一樣了,先考慮特殊情況下,如果γ和β分別等於此batch的標準差和均值,那麼不就還原到歸一化前的x了嗎,也即是縮放平移到了歸一化前的分布,相當於batchnorm沒有起作用,β和γ分別稱之為 平移參數和縮放參數。這樣就保證了每一次數據經過歸一化後還保留的有學習來的特徵,同時又能完成歸一化這個操作,加速訓練。

batchnorm是在輸入值和激活函數之間進行的,每次訓練給一個批量,然後計算批量的均值方差,但是在測試的時候可不是這樣,測試的時候每次只輸入一張圖片,這怎麼計算批量的均值和方差,於是,在訓練的時候實現計算好mean var測試的時候直接拿來用就可以了,不用計算均值和方差。

推薦崗位1:騰訊-機器學習方向(可內推,深圳、北京、上海、廣州)

推薦崗位2:搜狗-語音增強實習(可內推)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

關於深度學習你必須知道的幾個信息理論概念
簡易版物體識別

TAG:AI研習社 |