1. 程式人生 > >深度學習面試100題(第31-35題)

深度學習面試100題(第31-35題)

31.梯度爆炸會引發什麼問題?

解析:

在深度多層感知機網路中,梯度爆炸會引起網路不穩定,最好的結果是無法從訓練資料中學習,而最壞的結果是出現無法再更新的 NaN 權重值。

梯度爆炸導致學習過程不穩定。—《深度學習》,2016。

在迴圈神經網路中,梯度爆炸會導致網路不穩定,無法利用訓練資料學習,最好的結果是網路無法學習長的輸入序列資料。

32.如何確定是否出現梯度爆炸?

解析:

訓練過程中出現梯度爆炸會伴隨一些細微的訊號,如:

模型無法從訓練資料中獲得更新(如低損失)。

模型不穩定,導致更新過程中的損失出現顯著變化。

訓練過程中,模型損失變成 NaN。

如果你發現這些問題,那麼你需要仔細檢視是否出現梯度爆炸問題。

以下是一些稍微明顯一點的訊號,有助於確認是否出現梯度爆炸問題。

訓練過程中模型梯度快速變大。

訓練過程中模型權重變成 NaN 值。

訓練過程中,每個節點和層的誤差梯度值持續超過 1.0。

33.如何修復梯度爆炸問題?

解析:

有很多方法可以解決梯度爆炸問題,本節列舉了一些最佳實驗方法。

(1) 重新設計網路模型

在深度神經網路中,梯度爆炸可以通過重新設計層數更少的網路來解決。

使用更小的批尺寸對網路訓練也有好處。

在迴圈神經網路中,訓練過程中在更少的先前時間步上進行更新(沿時間的截斷反向傳播,truncated Backpropagation through time)可以緩解梯度爆炸問題。

(2)使用 ReLU 啟用函式

在深度多層感知機神經網路中,梯度爆炸的發生可能是因為啟用函式,如之前很流行的 Sigmoid 和 Tanh 函式。

使用 ReLU 啟用函式可以減少梯度爆炸。採用 ReLU 啟用函式是最適合隱藏層的新實踐。

(3)使用長短期記憶網路

在迴圈神經網路中,梯度爆炸的發生可能是因為某種網路的訓練本身就存在不穩定性,如隨時間的反向傳播本質上將迴圈網路轉換成深度多層感知機神經網路。

使用長短期記憶(LSTM)單元和相關的門型別神經元結構可以減少梯度爆炸問題。

採用 LSTM 單元是適合迴圈神經網路的序列預測的最新最好實踐。

(4)使用梯度截斷(Gradient Clipping)

在非常深且批尺寸較大的多層感知機網路和輸入序列較長的 LSTM 中,仍然有可能出現梯度爆炸。如果梯度爆炸仍然出現,你可以在訓練過程中檢查和限制梯度的大小。這就是梯度截斷。

處理梯度爆炸有一個簡單有效的解決方案:如果梯度超過閾值,就截斷它們。

 ——《Neural Network Methods in Natural Language Processing》,2017.

具體來說,檢查誤差梯度的值是否超過閾值,如果超過,則截斷梯度,將梯度設定為閾值。

梯度截斷可以一定程度上緩解梯度爆炸問題(梯度截斷,即在執行梯度下降步驟之前將梯度設定為閾值)。

     ——《深度學習》,2016.

在 Keras 深度學習庫中,你可以在訓練之前設定優化器上的 clipnorm 或 clipvalue 引數,來使用梯度截斷。

預設值為 clipnorm=1.0 、clipvalue=0.5。詳見:https://keras.io/optimizers/。

(5)使用權重正則化(Weight Regularization)

如果梯度爆炸仍然存在,可以嘗試另一種方法,即檢查網路權重的大小,並懲罰產生較大權重值的損失函式。該過程被稱為權重正則化,通常使用的是 L1 懲罰項(權重絕對值)或 L2 懲罰項(權重平方)。

對迴圈權重使用 L1 或 L2 懲罰項有助於緩解梯度爆炸。

——On the difficulty of training recurrent neural networks,2013.

在 Keras 深度學習庫中,你可以通過在層上設定 kernel_regularizer 引數和使用 L1 或 L2 正則化項進行權重正則化。

34.LSTM神經網路輸入輸出究竟是怎樣的?

解析:

第一要明確的是神經網路所處理的單位全部都是:向量

下面就解釋為什麼你會看到訓練資料會是矩陣和張量

常規feedforward 輸入和輸出:矩陣

        輸入矩陣形狀:(n_samples, dim_input)

        輸出矩陣形狀:(n_samples, dim_output)

注:真正測試/訓練的時候,網路的輸入和輸出就是向量而已。加入n_samples這個維度是為了可以實現一次訓練多個樣本,求出平均梯度來更新權重,這個叫做Mini-batch gradient descent。 如果n_samples等於1,那麼這種更新方式叫做Stochastic Gradient Descent (SGD)。

Feedforward 的輸入輸出的本質都是單個向量。

常規Recurrent (RNN/LSTM/GRU) 輸入和輸出:張量

        輸入張量形狀:(time_steps, n_samples,  dim_input)

        輸出張量形狀:(time_steps, n_samples,  dim_output)

注:同樣是保留了Mini-batch gradient descent的訓練方式,但不同之處在於多了time step這個維度。 

Recurrent 的任意時刻的輸入的本質還是單個向量,只不過是將不同時刻的向量按順序輸入網路。所以你可能更願意理解為一串向量 a sequence of vectors,或者是矩陣。

python程式碼表示預測的話:

import numpy as np

#當前所累積的hidden_state,若是最初的vector,則hidden_state全為0

hidden_state=np.zeros((n_samples, dim_input))

#print(inputs.shape): (time_steps, n_samples,  dim_input)

outputs = np.zeros((time_steps, n_samples, dim_output))

for i in range(time_steps):

    #輸出當前時刻的output,同時更新當前已累積的hidden_state

    outputs[i],hidden_state = RNN.predict(inputs[i],hidden_state)

#print(outputs.shape): (time_steps, n_samples, dim_output)

但需要注意的是,Recurrent nets的輸出也可以是矩陣,而非三維張量,取決於你如何設計。

(1)若想用一串序列去預測另一串序列,那麼輸入輸出都是張量 (例如語音識別 或機器翻譯 一箇中文句子翻譯成英文句子(一個單詞算作一個向量),機器翻譯還是個特例,因為兩個序列的長短可能不同,要用到seq2seq;

(2)若想用一串序列去預測一個值,那麼輸入是張量,輸出是矩陣 (例如,情感分析就是用一串單片語成的句子去預測說話人的心情)

Feedforward 能做的是向量對向量的one-to-one mapping,

Recurrent 將其擴充套件到了序列對序列 sequence-to-sequence mapping.

但單個向量也可以視為長度為1的序列。所以有下圖幾種型別:

640?wx_fmt=png

除了最左側的one to one是feedforward 能做的,右側都是Recurrent所擴充套件的

若還想知道更多

(1)可以將Recurrent的橫向操作視為累積已發生的事情,並且LSTM的memory cell機制會選擇記憶或者忘記所累積的資訊來預測某個時刻的輸出。

(2)以概率的視角理解的話:就是不斷的conditioning on已發生的事情,以此不斷縮小sample space

(3)RNN的思想是: current output不僅僅取決於current input,還取決於previous state;可以理解成current output是由current input和previous hidden state兩個輸入計算而出的。並且每次計算後都會有資訊殘留於previous hidden state中供下一次計算。

35.什麼是RNN?

解析:

RNNs的目的使用來處理序列資料。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連線的,每層之間的節點是無連線的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。

RNNs之所以稱為迴圈神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的資訊進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連線而是有連線的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。

理論上,RNNs能夠對任何長度的序列資料進行處理。但是在實踐中,為了降低複雜性往往假設當前的狀態只與前面的幾個狀態相關,下圖便是一個典型的RNNs: 

640?wx_fmt=jpeg

RNNs包含輸入單元(Input units),輸入集標記為{x0,x1,...,xt,xt+1,...},而輸出單元(Output units)的輸出集則被標記為{y0,y1,...,yt,yt+1.,..}。RNNs還包含隱藏單元(Hidden units),我們將其輸出集標記為{s0,s1,...,st,st+1,...},這些隱藏單元完成了最為主要的工作。你會發現,在圖中:有一條單向流動的資訊流是從輸入單元到達隱藏單元的,與此同時另一條單向流動的資訊流從隱藏單元到達輸出單元。在某些情況下,RNNs會打破後者的限制,引導資訊從輸出單元返回隱藏單元,這些被稱為“Back Projections”,並且隱藏層的輸入還包括上一隱藏層的狀態,即隱藏層內的節點可以自連也可以互連。

640?wx_fmt=png

上圖將迴圈神經網路進行展開成一個全神經網路。例如,對一個包含5個單詞的語句,那麼展開的網路便是一個五層的神經網路,每一層代表一個單詞。對於該網路的計算過程如下:

(1)xt表示第t,t=1,2,3...步(step)的輸入。比如,x1為第二個詞的one-hot向量(根據上圖,x0為第一個詞); 

(2) st為隱藏層的第t步的狀態,它是網路的記憶單元。 st根據當前輸入層的輸出與上一步隱藏層的狀態進行計算。st=f(Uxt+Wst−1),其中f一般是非線性的啟用函式,如tanh或ReLU,在計算s0時,即第一個單詞的隱藏層狀態,需要用到s−1,但是其並不存在,在實現中一般置為0向量;

(3)ot是第t步的輸出,如下個單詞的向量表示,ot=softmax(Vst). 

參考資料:

1. YJango,

https://www.zhihu.com/question/41949741

2. 一隻鳥的天空,

http://blog.csdn.net/heyongluoyao8/article/details/48636251

題目來源:

七月線上官網(https://www.julyedu.com/)——面試題庫——面試大題——深度學習 第26-30題。

640?wx_fmt=gif

為了幫助大家更好的學習和理解深度學習,我們特意推出了“深度學習第四期”課程,7月31日開課,每週二週四晚上8~10點直播上課,每次課至少2小時,共10次課;本課程提供以下服務:直播答疑、課後回放、佈置作業且解答、畢業考試且批改、面試輔導。課程詳情可點選文末“閱讀原文”進行檢視,或者加微信客服:julyedukefu_02 進行諮詢。

掃碼加客服微信

640?wx_fmt=jpeg

640?wx_fmt=jpeg

相關推薦

深度學習面試10031-35

31.梯度爆炸會引發什麼問題?解析:在深度多層感知機網路中,梯度爆炸會引起網路不穩定,最好的結果

深度學習面試10036-40

36、簡單說下sigmoid啟用函式解析:常用的非線性啟用函式有sigmoid、tanh、rel

深度學習面試10051-55

點選藍字關注我們,小七等你好久嘍51、初始化如何影響訓練? 解析:方法:我們生成兩個 12 維高

深度學習面試10016-20

1、為什麼引入非線性激勵函式?解析:第一,對於神經網路來說,網路的每一層相當於f(wx+b)=f

機器學習面試問題集2018-3-13更新

1 基礎概念 1.1 熵、聯合熵、條件熵、交叉熵與相對熵的意義? 1.2 歸一化方法? 1、線性函式歸一化(Min-Max scaling) 線性函式將原始資料線性化的方法轉換到[0 1]的範圍,歸一化公式如下: 2、0均值標準

深度學習平臺搭建筆記我的TANTI-XP

深度學習平臺搭建安裝順序:(注意相關版本相容問題參考官網)ubuntu14.04  ssh(Xshell 5, WinSCP,Xmanager)  Nvidia  CUDA8.0(cudnn5.1) (caffe, tensorflow, keras) 1.       py

杭電ACM2005幾天?------C語言

第幾天? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 127309    Accepted Submissi

BAT機器學習面試1000系列76~149

正文共43140個字,124張圖,預計閱讀時間:108分鐘。76、看你是搞視覺的,熟悉哪些CV框

BAT機器學習面試1000系列150~279

長文~可先收藏再看喲~150、在感知機中(Perceptron)的任務順序是什麼?深度學習 DL

BAT機器學習面試1000系列1~305

1 請簡要介紹下SVM,機器學習 ML模型 易SVM,全稱是support vector machine,中文名叫支援向量機。SVM是一個面向資料的分類演算法,它的目標是為確定一個分類超平面,從而將不同的資料分隔開。 擴充套件:這裡有篇文章詳盡介紹了SVM的原理、推導,《支援

BAT庫 | 機器學習面試1000系列246~250

246.對於神經網路的說法, 下面正確的是 :  1. 增加神經網路層數, 可能會增加測試資料集的分類錯誤率 2. 減少神經網路層數, 總是能減小測試資料集的分類錯誤率 3. 增加神經網路層數,

BAT機器學習面試1000系列1~60

@寒小陽、龍心塵 1 抽象成數學問題 明確問題是進行機器學習的第一步。機器學習的訓練過程通常都是一件非常耗時的事情,胡亂嘗試時間成本是非常高的。 這裡的抽象成數學問題,指的我們明確我們可以獲得什麼樣的資料,目標是一個分類還是迴歸或者是聚類的問題,如果都不是的話,如果劃歸為其中的某類問題。 2 獲取

BAT機器學習面試1000系列1~305

引言在今年的神經網路頂級會議NIPS2016上,深度學習三大牛之一的Yann Lecun教授給出了一個關於機器學習中的有監督學習、無監督學習和增強學習的一個有趣的比喻,他說:如果把智慧(Intelligence)比作一個蛋糕,那麼無監督學習就是蛋糕本體,增強學習是蛋糕上的櫻桃,那麼監督學習,僅僅能算作蛋糕上的

神經網路與深度學習課程筆記三、四周

接著學習吳恩達老師第三、四周的課程。(圖片均來自吳恩達老師課件)   第三週 1. 普通的淺層網路                        

整理III 微軟等資料結構+演算法面試100 最新61-80

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

深度學習機器學習面試問題準備必會

第一部分:深度學習 1、神經網路基礎問題 (1)Backpropagation(要能推倒)    後向傳播是在求解損失函式L對引數w求導時候用到的方法,目的是通過鏈式法則對引數進行一層一層的求導。這裡重點強調:要將引數進行隨機初始化而不是全部置0,否則所有隱層的數值都會與輸入

面試筆試整理3:深度學習機器學習面試問題準備必會

第一部分:深度學習 1、神經網路基礎問題 (1)Backpropagation(要能推倒)   後向傳播是在求解損失函式L對引數w求導時候用到的方法,目的是通過鏈式法則對引數進行一層一層的求導。這裡重點強調:要將引數進行隨機初始化而不是全部置0,否則所

深度學習面試題解1-5

開篇 今天面試了一下阿里高德,面試問題記錄一波,面試的時候問得還是超級細的,深度學習演算法和傳統的學習演算法都有問到,視訊面的時候我也是一塌糊塗,不過居然莫名其妙的過了。 1、梯度爆炸和梯度消失的問題,這裡面還順帶問了一下sigmoid函式梯度的最大值(0.25

BAT機器學習面試1000系列 1 305

14 L1和L2正則先驗分別服從什麼分佈。機器學習 ML基礎 易@齊同學:面試中遇到的,L1和L2正則先驗分別服從什麼分佈,L1是拉普拉斯分佈,L2是高斯分佈。@AntZ: 先驗就是優化的起跑線, 有先驗的好處就是可以在較小的資料集中有良好的泛化效能,當然這是在先驗分佈是接近真實分佈的情況下得到的了,從資訊理