1. 程式人生 > >面試整理--神經網路篇

面試整理--神經網路篇

線性模型和神經網路的最大區別,在於神經網路的非線性導致大多數我們感興趣的代價函式都變得非凸。因此對於前饋神經網路,將所有權重值初始化為小隨機數是重要的。
訓練一個前饋網路至少需要做和線性模型一樣的多的設計決策:選擇一個優化模型、代價函式以及輸出單元的形式。

模型

神經網路不把線性模型作用與x本身,而是作用在一個變換後的輸入ϕ(x)\phi(x)上,這裡ϕ(x)\phi(x)是一個非線性變換。深度學習的策略是去學習ϕ(x)\phi(x)

代價函式

神經網路的訓練與訓練其他任何模型沒有太大區別,仍基於梯度。

交叉熵損失函式

在大多數情況下,引數模型定義了一個分佈p(yx

;θ)p(y|x;\theta)並且簡單地使用最大似然原理,這意味著我們使用訓練資料和模型預測間的交叉熵作為代價函式。
代價函式是負的最大似然,與訓練模型和模型分佈間的交叉熵等價。這個代價函式表示為:J(θ)=EX,Yp^datalogpmodel(yx)J(\theta)=-\mathbb{E}_{X,Y\sim \hat p_{data}}\log{p_{\rm model}(y|x)}.
選擇負對數似然來匯出代價函式的一個優勢是,它減輕了為每個模型設計代價函式的負擔,明確一個模型則自動確定了一個代價函式;另外,貫穿神經網路設計的一個主題是代價函式的梯度必須足夠大和具有足夠的預測性,來為學習演算法提供好的指引。飽和(變得非常平)的函式破壞了這一目標,因為它們把梯度變得特別小。許多輸出單元都會包含一個指示函式,這在它的變數取非常大的負值時會造成飽和,負對數似然中的對數函式消除了某些輸出單元中的指數效果。

輸出單元

當使用交叉熵作為代價函式的時候,代價函式的選擇與輸出單元p(yx)p(y|x)的選擇緊密相關。基於使用sigmoid輸出單元和最大似然估計來保證較大的梯度。
1)高斯輸出分佈的線性單元,此時的最大化對數似然等價於最小化均方誤差;
2)用於Bernoulli輸出分佈的sigmoid單元,此時可以得到很好的性質。僅在預測正確時飽和,預測錯誤時梯度較大;
3)用於Multinoulli輸出分佈的softmax單元,此時對數似然的推測與二分類相似,負對數似然總是強烈地懲罰最活躍的不正確預測。
具體來說,那些不使用對數來抵消softmax中的指數的目標函式,當指數函式的變數取非常小的負值時會造成梯度消失。

隱藏單元的選擇

解決過擬合

1.資料集增強,獲取更多的資料,建立更多的資料;
2.使用合適的模型:網路結構簡單化,引數懲罰(L1,L2);引數約束;增加噪聲;提前終止
3.結合多種模型:dropout,bagging,boosting

正則化

神經網路中的正則化的方法很多,比較典型的代表有L2正則和dropout正則
L2正則依賴於一個假設:即簡單的可解釋的模型優於複雜的模型,因此,L2正則通過在原始的損失函式上加上了正則項(1mλ2W2\frac{1}{m}\frac{\lambda}{2}W^2),而使得引數趨於一個較小的值,也就是加大的對引數的懲罰,這就使得整個模型較為簡單,當輸入變化時輸出變化比較緩慢。
dropout正則:在每一次迭代訓練中隨機的隱藏一定概率的隱藏單元,因此每一次迭代的模型都是不同的,每一個神經元都不能多度依賴於另一個神經元,因此增強了模型的魯棒性。
詳細地:https://blog.csdn.net/zhouhong0284/article/details/79723593
1.L2正則公式?
2.為什麼drop-out可以正則化?
3.dropout正則的幾個注意點。
4.其他的正則化方法?

引數初始化

對w,b來說,選擇一個好的初始引數有以下兩個優點:
1.加快梯度下降的速度,使其快速收斂;
2.增加梯度下降到全域性最優解的機率。
那麼如何選擇這個引數呢,首先引數不能全部初始化為0。當初始化引數均為0時,隱藏層中的各個單元呈對稱性,在計算梯度下降時,各層的各個單元也呈對稱性,那麼多個隱藏單元都在做同樣的事情,因為多個隱藏單元沒有意義。因此,要對w引數做隨機初始化,打破對稱性;初始化引數為較大的值也不好,因為這樣會使得activations接近0或者1,導致梯度消失或者梯度爆炸問題, 因此我們應該使用He initialization,用隨機值乘2nl1\sqrt{\frac{2}{n^{l-1}}},在使用啟用函式為Relu函式時尤其注意。另外Xavier initialization是用隨機值乘1nl1\sqrt{\frac{1}{n^{l-1}}}

為訓練策略尋找一個演算法,以往我們使用的都是梯度下降演算法,實際上我們可以使用其優化演算法對模型進行更快速的訓練。

優化演算法

學習速率需要訓練的:
SGD(mini-batch gredient descent):兩步,打亂和劃分,注意選擇劃分的尺寸
Momentum
學習速率自學習的:
adegrad
RMSprop
Adam
詳見:https://blog.csdn.net/qq_28031525/article/details/79535942
各自的公式?優缺點?

Batch Norm

  1. BN怎麼做?
    先做一個歸一化處理:
    x^(k)=x(k)E[x(k)]Var[x(k)]\hat x^{(k)}=\frac{x^{(k)}-E[x^{(k)}]}{\sqrt {\rm Var[x^{(k)}]}}
    這樣資料滿足N(0,1)分佈,但這樣資料在上一層網路中學習到的特徵被破壞了,因此使用變換重構,引入可學習引數γ,β\gamma,\beta:
    y(k)=γ(k)x^(k)+β(k)y^{(k)}=\gamma^{(k)}\hat x^{(k)}+\beta^{(k)}
    這樣,當γ(k)=Var[x(k)],β(k)=E[x(k)]\gamma^{(k)}=\sqrt{\rm Var[x^{(k)}]},\beta^{(k)}=E[x^{(k)}]時可以恢復出原始某一層學到的特徵。
  2. BN放在哪裡?
    放在網路啟用函式層的前面。在沒有采用BN的時候,啟用函式層是這樣的:
    z=g(Wx+b)z=g(Wx+b)
    使用BN的函式之後:
    z=g(BN(Wx+b))z=g({\rm BN} (Wx+b))
    因為偏置引數b經過BN層之後其實是沒有用的,因為它最後被歸一化掉了,因此b這個引數不需要。最後的BN+啟用函式層為:
    z=g(BN(Wx))z=g({\rm BN} (Wx))
  3. 這樣做有什麼好處?
    1)加快收斂速度‘
    2)減輕了梯度消失和梯度爆炸的問題。

CNN

RNN

  1. 為什麼LSTM漸漸取代RNN?
    因為RNN只能建立比較短期的資訊依賴關係,如果當前資訊與所依賴資訊的gap較長的時候,RNN沒有能力去充分學習所依賴的資訊(這裡可以解釋為上一輪的資訊都是用W連乘的,當W小於1時,資訊會逐漸消失),而LSTM則沒有這個問題。