日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

计算机视觉与深度学习-全连接神经网络

發布時間:2023/12/20 pytorch 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机视觉与深度学习-全连接神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容是自己學習北京郵電大學魯鵬副教授計算機視覺與深度學習課程(A02)的一些筆記,
筆者能力有限,如有錯誤還望各位大佬在評論區批評指正 。

先貼一下課程官網:CV-XUEBA

篇3地址:計算機視覺與深度學習-線性分類器

目錄

全連接神經網絡

1、線性分類器的權值

2、全連接神經網絡與線性不可分

3、全連接神經網絡繪制與命名

4、激活函數

5、神經網絡結構設計

6、 SOFTMAX

7、交叉熵損失

8、計算圖

?9、再看激活函數

10、梯度算法改進

?11、權值初始化

12、 批歸一化

13、欠擬合、過擬合與Dropout

14、超參數


全連接神經網絡

還是從按照框圖走,第一步是圖像表示,本課程的圖像表示都是直接利用原始像素作為特征,展開為列向量。

全連接神經網絡通過級聯多個變換來實現輸入到輸出的映射。

兩層全連接神經網絡可以表示為:。通過兩次線性變換級聯來得到最后的結果。其中max函數是一個激活函數,它將第一次變換的結果處理再送給后面的層,在級聯系統中比較重要,后面會詳細介紹。以此類推,對于三層的全連接神經網絡可以表示為:。全連接神經網絡的核心是線性分類器,其中的非線性操作(max函數)是不可去的。

1、線性分類器的權值

在線性分類器中,W可以看作是模板,在全連接神經網絡網絡中,也可以看作是模板,但是模板的個數可以人為指定,而行數必須與類別個數一致。指定的作用是:豐富模板,讓神經網絡學習的更好。融合多個模板的匹配結果來實現最終類別打分。

2、全連接神經網絡與線性不可分

對于線性可分的情況,至少存在一個線性分界面能把樣本沒有錯誤的分開。

而實際中我們采集的樣本通常是線性不可分的,因此我們需要通過非線性的操作將樣本分開。?

這就是線性分類器與全連接神經網絡的區別,線性分類器只能解決線性可分的問題,而對于線性不可分的問題線性分類器并不能很好的解決,就可以通過全連接神經網絡來解決。全連接神經網絡可以通過非線性操作級聯一些簡單的線性分類器來實現,但是要注意激活函數的重要性。

3、全連接神經網絡繪制與命名

每個隱層神經元都要與前層的神經元連接所以我們把它叫做全連接神經網絡。每條連接上都有一條邊,每條邊上都有一個權值,因此對于第一個模板而言有多少個神經元就有多少個權值,所有權值組合起來就是,以此類推。通過,就能將x映射出來。

它的命名規則是除了輸入層以外這個神經網絡有幾層就叫幾層神經網絡。

4、激活函數

如果網絡中缺少了激活函數,全連接神經網絡將變成一個線性分類器,因此對于全連接伸進網絡我們不能把激活函數去掉。

?常用的激活函數有以下幾種。

Sigmoid函數能把輸入的值輸出為范圍在0--1之間的值,太大的值輸出1,太小的值輸出0,中間的隨輸入的值的大小變化,同時它輸出的值都是大于0而且不是中心對稱。

tanh函數能把輸入的值輸出為范圍在-1--1之間的值,從圖像上可以知道當輸入值小于-2.5或大于2.5時,輸出一直是-1或1。同時輸出的值是中心對稱的,在數據處理時由于有正負的數據因此它比Sigmoid函數更好。

ReLU函數也就是我們前面一直提到的max函數,輸入的值大于0則直接輸出這個值,如果輸入的值小于0則輸出0。

Leaky?ReLU函數將輸入小于0的值乘上0.1后在輸出。對于小于0的輸入值不那么絕對的輸出0。

激活函數是對前一層輸出的每一個維度分別進行處理。

5、神經網絡結構設計

?對于神經網絡的結構設計并沒有統一的答案。神經網絡結構設計有三個要素,分別是深度設計(多少個隱層)、寬度設計(每個隱層多少個神經元)、激活函數。

就寬度設計而言, 神經元個數越多,分界面就可以越復雜,在集合上的分類能力就越強。但是也可能會出現過擬合的問題。

在設計神經網絡結構時,我們要依據分類任務的難易程度來調整神經網絡模型的復雜程度。分類任務越難,我們設計的神經網絡結構就應該越深、越寬。但是,需要注意的是對訓練集分類精度最高的全連接神經網絡模型,在真實場景下識別性能未必是最好的(過擬合)。

6、 SOFTMAX

在通常情況下,神經網絡輸出的是類別得分,經過Softmax操作后,我們可以得到樣本是這個類別的概率,可以更加直觀的反應結果。具體的過程就是將得到的分數取e的指數次方再歸一化后就得到類別的概率。

通常我們會把標答表示成one-hot向量,即只有正確的類別為一,其余都為零的一維向量。

7、交叉熵損失

得到概率后對于后面模型的訓練有很大的幫助,在神經網絡訓練的過程中,我們需要將預測值與真實值進行比較,從而度量當前分類器的性能。而多類支撐向量機只能在預測值中比較,并不能度量分類器輸出與預測值之間的距離。由此我們引入交叉熵損失。

在介紹交叉熵損失前,我們先了解一下熵的概念,熵可以體現信息的不確定性。相對熵也叫KL散度,用來度量兩個分布之間的不相似性。注意這里是散度,不是距離,距離的話pq之間的距離與qp之間的距離相等,而散度pq與qp是不一樣的,。

那么為什么我們不用相對熵呢?因為在標答是one-hot向量時,交叉熵就是相對熵。

注意的結果就是KL散度,當且僅當真實分布是one-hot時才可以用交叉熵度量不相似程度。

在訓練的時候,運用交叉熵我們會碰到損失變化不大,但是分類器的性能卻在提高的情況,這是交叉熵特殊的地方。

8、計算圖

計算圖是一種有向圖,它用來表達輸入、輸出以及中間變量之間的計算關系,圖中的每個節點對應著一種數學運算。

下面以一個例子講解一下:

計算圖就是通過圖像對一個式子進行表達。

計算圖從前向就是從輸入得到輸出,不論函數多復雜每次只運算局部環節最后就可以得到輸出。反向就可以得到輸出對于輸入的導數,就得到了每級運算的梯度。

需要注意的是,由于鏈式法則,每一級都在相乘,因此當梯度小于1時,相乘的結果是梯度在下降,可能在后面出現梯度為0的情況,這種現象叫做梯度下降。有時可以通過整體的函數來替換很長的鏈式(門),例如sigmoid函數,提高了計算效率,這就是計算顆粒度,門函數越多計算速率越快,計算顆粒度小,通過特定或者已知的函數替代門函數提高了計算速率,同時顆粒度變大,但是中間的函數需要自己定義。

對于梯度圖來說,正向計算可以通過輸入找到輸出,反向計算可以找到中間任意門單元的梯度。

一些常見的門單元,加法門,正向就是相加,反向是上游梯度直接傳過去;乘法門,正向相乘,反向相互交換后與上游梯度相乘;拷貝門,正向直接拷貝,反向則將上游的梯度都回傳后相加;max,門正向將更大的數往后傳,反向將上游梯度傳給更大數的那一段,其余為零。

?9、再看激活函數

之前介紹了梯度消失,是由于鏈式法則的乘法特性導致的一種情況,還有另一種情況就是梯度爆炸,在斷崖處的梯度乘以學習率后會是一個非常大的值,從而飛出了合理區域,最終導致算法不收斂。解決方案就是把沿梯度方向前進的步長限制在某個值內,這叫做梯度裁剪。這些情況并不適合網絡中信息流的傳遞,于是在網絡中的激活函數并不會選擇sigmoid函數,與此類似的還有tanh函數。而ReLU函數則比較合適,不過由于在小于0的部分過于絕對,因此在全連接神經網絡中一般使用Leakly?ReLU函數。

10、梯度算法改進

10.1 梯度算法存在的問題

損失函數的特性:一個方向上變化迅速而在另一個方向上變化緩慢。我們的目標是從起點走到笑臉位置,在計算梯度的時候,很多的下降算法都存在示意圖中在山壁間震蕩,而在谷底前進緩慢的情況。表現出來就是,網絡在訓練過程中時間長,損失下降慢。而簡單的增大步長可能只是加大了震蕩。因此引入動量的方法。

10.2 動量法?

動量法采用累加的方法求解梯度,在震蕩的地方左右搖擺累加求均值,在谷底累加可以加快速度。

在更新速度時,將梯度g與衰減系數和歷史速度的乘積相加。在更新權值時,小批量梯度下降算法使用的是梯度值,而動量法使用的是累加后的值,因此該算法可以減少震蕩,同時加速谷底速度。對于來說,如果衰減系數取值是1,則即使梯度g為0,速度的更新也不會停止,始終有一個值,因此算法會一直運行,如果衰減系數是0.9則算法迭代幾次速度也將趨于0。

?損失函數通常還會具有不太友好的局部最小值或鞍點(高維空間非常常見)---局部梯度為0的點但是并不是最小值。傳統的下降算法在這種情況下算法將停下,而動量法由于速度的存在,算法可以通過局部最小值或鞍點。

10.3 自適應梯度法

自適應梯度法可以在震蕩方向減小步長,在平坦方向增大步長。梯度幅度的平方較大的方向是震蕩方向,梯度幅度的平方較小的方向是平坦方向。但處于震蕩位置時,由于累積的平方梯度r的值是很大,因此前一學習率(步長)與的比值就比較小,從而在下次迭代時學習率(步長)就變小,平坦方向則相反,由此自適應的調節了步長。當累積平方梯度r相對于學習率(步長)過大后,將失去對學習率(步長)的調節作用,因此加入衰減速率,調節方法與動量法中的動量系數(衰減系數)類似。

?10.4 ADAM

Adam同時使用了動量與自適應梯度的思想,由于衰減系數,動量系數取值的問題,初始時系統運行將很緩慢,因此引入第五步進行修正偏差。

?11、權值初始化

全零初始化:網絡中不同的神經元有相同的輸出,進行同樣的參數更新;因此,這些神經元學到的參數都一樣,等價于一個神經元。

有效的初始化方法應該是使網絡各層的激活值和局部梯度的方差在傳播過程中盡量保持一致;以保持網絡中正向和反向數據流動。

好的初始化方法可以防止前向傳播過程中的信息消失,也可以解決反向傳播過程中的梯度消失。

Xavier初始化:

式中,當變量w與z獨立且均值都為0是,則平方項結果都為零,因此式子最后結果如圖,這樣使得每層神經元激活值和局部梯度的方差在傳播過程中盡量保持一致。也就是說權值采樣自的高斯分布---(均值為0,方差設為1/N時采樣),N為輸入神經元個數,符合我們的目標,即最后一個隱層的所有神經元的值還是符合正態分布。

當Xavier初始化采用ReLU激活函數時,不符合我們的目標。而HE初始化(MSRA)可以使用ReLU激活函數,將權值采樣改成

12、 批歸一化

在每一層神經元輸出后進行批歸一化,使輸出值符合0均值1方差,也能解決前向傳遞過程中的信號消失問題和梯度消失問題。

13、欠擬合、過擬合與Dropout

過擬合:模型在訓練集的準確率很高,實際使用場景識別率很低(已經n次提到),原因可能只是記住了訓練集數據,而不是學習了規律。

欠擬合:模型描述能力太弱,不能很好學習到數據中的規律,原因可能是模型過于簡單。

機器學習的根本問題就是優化(調節模型參數,讓模型在數據上得到最佳性能)和泛化(訓練好的模型在前所未見的數據上的性能好壞)的問題。

應對過擬合最優的方法:學習更多的數據;次優的方法:調節模型允許存儲的信息量或者對模型允許存儲的信息加以約束,該類方法也稱為正則化,添加正則項可以使權值分散,使系統學習更多的特征。還有調節模型大小,隨機失活的方法。

隨機失活(Dropout):讓隱層的神經元以一定的概率不被激活。實現方式:訓練過程中,對某一層使用Dropout,就是隨機將該層的一些輸出舍棄(輸出值設置為0),這些被舍棄的神經元就好像被網絡刪除了一樣。

隨機失活比率(Dropout ratio):是被設為0的特征所占的比例,通常在0.2~0.5范圍內。

那么隨機失活為什么可以防止過擬合呢?

解釋1:隨機失活減少了計算網絡的參數,降低了模型容量,從而防止了擬合。

解釋2:隨機失活使得權重分散,相當于正則化的作用,從而防止了擬合。

解釋3:Dropout可以看作模型集成(即可能是未關閉的神經元輸出一個值,下次可能是上次關閉的神經元這次未關閉輸出,而上次未關閉的神經元這次關閉),從而防止了擬合。

實際應用中通常要對測試結果乘一個系數p,使測試和訓練輸出一致。

下面以三層神經網絡為例:

p = 0.5 # 神經元保持激活狀態的概率,改值越高失活的單元越少def train(X):H1 = np.maximum(0, np.dot(W1, X) + b1)U1 = np.random.rand(*H1.shape) < p # 第一層的maskH1 *= U1 # 第一層dropout操作H2 = np.maximum(0, np.dot(W2, X) + b2)U2 = np.random.rand(*H2.shape) < p # 第二層的maskH2 *= U2 # 第二層dropout操作out = np.dot(W3, H2) + b3def predict(X):H1 = np.maximum(0, np.dot(W1, X) + b1) * pH2 = np.maximum(0, np.dot(W2, X) + b2) * pout = np.dot(W3, H2) + b3

上述方法在測試階段也引入了隨機失活,而測試階段所有的神經元必須打開,改進方法:

p = 0.5 # 神經元保持激活狀態的概率,改值越高失活的單元越少def train_new(X):H1 = np.maximum(0, np.dot(W1, X) + b1)U1 = (np.random.rand(*H1.shape) < p) / p # 第一層的maskH1 *= U1 # 第一層dropout操作H2 = np.maximum(0, np.dot(W2, X) + b2)U2 = (np.random.rand(*H2.shape) < p) / p # 第二層的maskH2 *= U2 # 第二層dropout操作out = np.dot(W3, H2) + b3def predict_new(X):H1 = np.maximum(0, np.dot(W1, X) + b1)H2 = np.maximum(0, np.dot(W2, X) + b2)out = np.dot(W3, H2) + b3

14、超參數

對于網絡結構來說:隱層神經元個數,網絡層數,非線性單元選擇等

對于優化相關來說:學習率、dropout比率、正則項強度等

14.1 學習率設置

學習率過大,訓練過程無法收斂。

學習率偏大,在最小值附近震蕩,達不到最優。

學習率太小,收斂時間較長。

學習率適中,收斂快、結果好。

14.2 超參數優化方法

網格搜索法:

1、每個超參數分別取幾個值,組合這些超參數值,形成多組超參數;

2、在驗證集上評估每組超參數的模型性能;

3、選擇性能最優的模型所采用的那組值作為最終的超參數的值。

隨機搜索法:

1、參數空間內隨機取點,每個點對應一組超參數;

2、在驗證集上評估每組超參數的模型性能;?

3、選擇性能最優的模型所采用的那組值作為最終的超參數的值。

超參數的搜索策略有粗搜索,即利用隨機法在較大范圍里采用超參數,訓練一個周期,依據驗證集正確率縮小超參數范圍。還有精搜索,即利用隨機法在較大范圍里采用超參數,訓練五到十個周期,選擇驗證集上精度最高的那組超參數。一般采用精搜索。

在超參數的標尺空間上建議在對數空間上進行隨機采樣。

*再次申明這只是筆者自學課程的一些筆記,想著學了留下點東西,限于筆者能力有限,
如有錯誤還望大神指正。如果覺得筆者水平太低大可當作飯后消遣。希望我們在視覺學習的道路上勇往直前!

總結

以上是生活随笔為你收集整理的计算机视觉与深度学习-全连接神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。