文章目錄
- 1.基本概念
- 1.1 為什么神經網絡中深度網絡的表現比廣度網絡表現好?
- 1.2 推導BP算法
- 1.3 什么是梯度消失和梯度爆炸?
- 1.4 常用的激活函數有哪些?
- 1.5 常用的參數更新方法有哪些?
- 1.6 解決過擬合的方法?
- 數據層面
- 模型層面
- 1.7 對卡在極小值的處理方法?
- 1.8 為何使用Batch Normalization?
- 1.9 學習的本質是什么?
- 2.卷積神經網絡
- 2.1 1*1卷積核的作用有哪些?
- 2.2 CNN的思想是什么?
- 2.3 filter尺寸的選擇
- 2. 4 輸出尺寸計算公式
- 2. 5 pooling池化的作用
- 2.6 常用的CNN模型
- 3.循環神經網絡
- 3.1 RNN的原理
- 3.2 RNN、LSTM、GRU區別?
- 3.3 LSTM防止梯度彌散和爆炸
- 3.4 word2vec思想
- 4.其他
- 4.1 簡述一下GAN網絡的原理?
- 4.2 GAN的表達式
- 4.3 GAN的實際計算方法
1.基本概念
1.1 為什么神經網絡中深度網絡的表現比廣度網絡表現好?
淺層結構算法:其局限性在于有限樣本和計算單元情況下對復雜函數的表示能力有限,針對復雜分類問題其泛化能力受到一定制約。深度學習可通過學習一種深層非線性網絡結構,實現復雜函數逼近,表征輸入數據分布式表示,并展現了強大的從少數樣本集中學習數據集本質特征的能力。(多層的好處是可以用較少的參數表示復雜的函數)
深度學習的實質,是通過構建具有很多隱層的機器學習模型和海量的訓練數據,來學習更有用的特征,從而最終提升分類或預測的準確性。
淺層神經網絡可以模擬任何函數,但數據量的代價是無法接受的。深層解決了這個問題。相比淺層神經網絡,深層神經網絡可以用更少的數據量來學到更好的擬合。深層的前提是:空間中的元素可以由迭代發展而來的。
1.2 推導BP算法
誤差反向傳播算法簡稱反向傳播算法(即BP算法)。使用反向傳播算法的多層感知器又稱為BP神經網絡。BP算法是一個迭代算法,它的基本思想為:(1)先計算每一層的狀態和激活值,直到最后一層(即信號是前向傳播的);(2)計算每一層的誤差,誤差的計算過程是從最后一層向前推進的(這就是反向傳播算法名字的由來);(3)更新參數(目標是誤差變小)。迭代前面兩個步驟,直到滿足停止準則(比如相鄰兩次迭代的誤差的差別很小)。
參考博客
1.3 什么是梯度消失和梯度爆炸?
梯度消失:這本質上是由于激活函數的選擇導致的, 最簡單的sigmoid函數為例,在函數的兩端梯度求導結果非常小(飽和區),導致后向傳播過程中由于多次用到激活函數的導數值使得整體的乘積梯度結果變得越來越小,也就出現了梯度消失的現象。
梯度爆炸:同理,出現在激活函數處在激活區,而且權重W過大的情況下。但是梯度爆炸不如梯度消失出現的機會多
1.4 常用的激活函數有哪些?
1.5 常用的參數更新方法有哪些?
參考博客
1.6 解決過擬合的方法?
數據層面
- 采集更多的數據
- 數據增強:多用于圖像方面
模型層面
dropout, regularization, batch normalizatin
- dropout只在訓練的時候用,讓一部分神經元隨機失活。
- Batch normalization是為了讓輸出都是單位高斯激活,方法是在連接和激活函數之間加入BatchNorm層,計算每個特征的均值和方差進行規則化。
1.7 對卡在極小值的處理方法?
- 1.調節步伐:調節學習速率,使每一次的更新“步伐”不同;
- 2.優化起點:合理初始化權重(weights initialization)、預訓練網絡(pre-train),使網絡獲得一個較好的“起始點”,如最右側的起始點就比最左側的起始點要好。常用方法有:高斯分布初始權重(Gaussian distribution)、均勻分布初始權重(Uniform distribution)、Glorot 初始權重、He初始權、稀疏矩陣初始權重(sparse matrix)。
1.8 為何使用Batch Normalization?
參考博客
若用多個梯度的均值來更新權重的批量梯度下降法可以用相對少的訓練次數遍歷完整個訓練集,其次可以使更新的方向更加貼合整個訓練集,避免單個噪音樣本使網絡更新到錯誤方向。然而也正是因為平均了多個樣本的梯度,許多樣本對神經網絡的貢獻就被其他樣本平均掉了,相當于在每個epoch中,訓練集的樣本數被縮小了。batch中每個樣本的差異性越大,這種弊端就越嚴重。一般的解決方法就是在每次訓練完一個epoch后,將訓練集中樣本的順序打亂再訓練另一個epoch,不斷反復。這樣重新組成的batch中的樣本梯度的平均值就會與上一個epoch的不同。而這顯然增加了訓練的時間。同時因為沒辦法保證每次更新的方向都貼合整個訓練集的大方向,只能使用較小的學習速率。這意味著訓練過程中,一部分steps對網絡最終的更新起到了促進,一部分steps對網絡最終的更新造成了干擾,這樣“磕磕碰碰”無數個epoch后才能達到較為滿意的結果。
1.9 學習的本質是什么?
將變體拆分成因素和知識(Disentangle Factors of Variation)
2.卷積神經網絡
2.1 1*1卷積核的作用有哪些?
參考博客
- 1.實現跨通道的交互和信息整合
- 2.進行卷積核通道數的降維和升維
2.2 CNN的思想是什么?
改變全連接為局部連接,這是由于圖片的特殊性造成的(圖像的一部分的統計特性與其他部分是一樣的),通過局部連接和參數共享大范圍的減少參數值。可以通過使用多個filter來提取圖片的不同特征(多卷積核)。
2.3 filter尺寸的選擇
通常尺寸多為奇數(1,3,5,7)
通常使用多個小的卷積核效果比使用少量的大的卷積核要好。
2. 4 輸出尺寸計算公式
參考博客
輸出尺寸=(N - F +padding*2)/stride + 1
步長可以自由選擇通過補零的方式來實現連接。
Valid卷積意味著不填充,same是填充方式。
總結:padding = “Valid”,N = [(W-F+2P)/S]+1,這里表示的是向下取整再加1
padding = “same”,N = [W/S],這里表示向上取整
2. 5 pooling池化的作用
雖然通過.卷積的方式可以大范圍的減少輸出尺寸(特征數),但是依然很難計算而且很容易過擬合,所以依然利用圖片的靜態特性通過池化的方式進一步減少尺寸。
可以認為卷積層是特征的生成,pooling層是特征的選擇。
2.6 常用的CNN模型
參考博客
3.循環神經網絡
3.1 RNN的原理
在普通的全連接網絡或CNN中,每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被成為前向神經網絡(Feed-forward+Neural+Networks)。而在RNN中,神經元的輸出可以在下一個時間戳直接作用到自身,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出。所以叫循環神經網絡
3.2 RNN、LSTM、GRU區別?
3.3 LSTM防止梯度彌散和爆炸
LSTM用加和的方式取代了乘積,使得很難出現梯度彌散。但是相應的更大的幾率會出現梯度爆炸,但是可以通過給梯度加門限解決這一問題。
3.4 word2vec思想
這個也就是Word Embedding,是一種高效的從原始語料中學習字詞空間向量的預測模型。分為CBOW(Continous Bag of Words)和Skip-Gram兩種形式。其中CBOW是從原始語句推測目標詞匯,而Skip-Gram相反。CBOW可以用于小語料庫,Skip-Gram用于大語料庫。具體的就不是很會了。
4.其他
4.1 簡述一下GAN網絡的原理?
GAN結合了生成模型和判別模型,相當于矛與盾的撞擊。生成模型負責生成最好的數據騙過判別模型,而判別模型負責識別出哪些是真的哪些是生成模型生成的。但是這些只是在了解了GAN之后才體會到的,但是為什么這樣會有效呢?
假設我們有分布Pdata(x),我們希望能建立一個生成模型來模擬真實的數據分布,假設生成模型為Pg(x;θθ ),我們的目的是求解θθ 的值,通常我們都是用最大似然估計。但是現在的問題是由于我們相用NN來模擬Pdata(x),但是我們很難求解似然函數,因為我們沒辦法寫出生成模型的具體表達形式,于是才有了GAN,也就是用判別模型來代替求解最大似然的過程。
在最理想的狀態下,G可以生成足以“以假亂真”的圖片G(z)。對于D來說,它難以判定G生成的圖片究竟是不是真實的,因此D(G(z)) = 0.5。這樣我們的目的就達成了:我們得到了一個生成式的模型G,它可以用來生成圖片。
4.2 GAN的表達式
通過分析GAN的表達可以看出本質上就是一個minmax問題。其中V(D, G)可以看成是生成模型和判別模型的差異,而minmaxD說的是最大的差異越小越好。這種度量差異的方式實際上叫做Jensen-Shannon divergence。
4.3 GAN的實際計算方法
因為我們不可能有Pdata(x)的分布,所以我們實際中都是用采樣的方式來計算差異(也就是積分變求和)。具體實現過程如下:
有幾個關鍵點:判別方程訓練K次,而生成模型只需要每次迭代訓練一次,先最大化(梯度上升)再最小化(梯度下降)。
但是實際計算時V的后面一項在D(x)很小的情況下由于log函數的原因會導致更新很慢,所以實際中通常將后一項的log(1-D(x))變為-logD(x)。
實際計算的時候還發現不論生成器設計的多好,判別器總是能判斷出真假,也就是loss幾乎都是0,這可能是因為抽樣造成的,生成數據與真實數據的交集過小,無論生成模型多好,判別模型也能分辨出來。解決方法有兩個:1、用WGAN 2、引入隨時間減少的噪聲