Datawhale X 李宏毅蘋果書AI夏令營 Task3打卡

youth518發表於2024-09-03

3.7 批次歸一化

批次歸一化的核心思想在於把誤差函式影像的“山剷平”,在某些誤差表面上不同引數方向的變化率可能差別很大,此時在損失函式上找到臨界點會比較困難

比如對一個簡單的線性函式 \(y=\sigma(w_1\times x_1+w_2\times x_2 + b)\) 來說,我們考慮對於引數 \(w_1,w_2\) 來說,如果 \(x_1\) 的可取值非常小,那麼引數 \(w_1\) 的變化對 \(y\) 的影響就會非常小,反應在損失函式影像上來說就是引數 \(w_1\) 對於損失函式的梯度變化很慢。因此為了解決這個問題,有一類方法被統稱為 特徵歸一化

一種常見的特徵歸一化方法是Z值歸一化,也稱為標準化。記所有訓練資料的特徵向量 \(x_1,\cdots x_n\)\(x_j^i\) 表示第 \(i\) 個特徵向量的第 \(j\) 維的值。 我們處理得到新的特徵向量為 \(\bar{x_i}^r\leftarrow \frac{x_i^r-m_i}{\sigma_i}\) 其中 \(m_i,\sigma_i\) 分別表示第 \(i\) 維的平均值和標準差。經過這種處理後每個維度上的平均值都是0,方差都是1

3.7.1 深度學習

對於神經網路而言,即使輸入 \(x\) 已經進行歸一化處理了,但是透過 \(W\) 之後得到的輸出結果 \(z\) 的數值分佈差異還是很大,所以對於這些輸出 \(z_1\cdots z_n\) 也要進行歸一化處理,再透過啟用函式得到該層的最終輸出結果 \(a\)。一般來說我們特徵歸一化要放在輸出函式之前,不過放在之後也可以

歸一化的方式和Z值歸一化類似 \(\bar{z}^i\leftarrow \frac{z^i-\mu}{\sigma}\) ,其中 \(\mu,\sigma\) 分別表示平均值和標準差,值得注意的是在訓練中我們一般是分批次匯入資料,所以計算的平均值和標準差也是某個批次內所有資料的,可以近似為對整個資料集做了特徵歸一化。

在實際的訓練中,除了上面的歸一化之外,我們還會另外新增一步。\(\hat{z}^i=\gamma \bar{z}^i+\beta\) ,這樣做是因為有的時候某個維度上資料的平均值是0可能會對訓練產生一些影響,所以我們會對資料分佈做一些小的調整。

3.7.2 測試是的批次歸一化

在測試(也叫推斷 inference)過程中,資料並不一定是以批次的形式載入的,我們沒法直接得到一個Z值歸一化形式中的平均值和標準差。

為了解決這個問題,Pytorch中內建了移動平均的方式,如果在訓練的時候我們使用了批次歸一化的方法,那麼Pytorch在訓練的時候也會記錄一個移動平均值 \(\bar{\mu}\) ,其更新方式為 \(\bar{\mu}\leftarrow p\bar{\mu}+(1-p)\mu_{new}\) 其中 p 是一個可以調節的超引數,其預設值是 0.1。對於標準差的處理方式類似。

3.7.3 內部協變數偏移

內部協變數偏移的概念是在原始的批次歸一化論文中作者提出的一個概念。例如在某個神經網路中,經過連續兩層得到的輸出結果為 \(a,b\),在更新時我們將 \(A,B\) 更新為 \(A^`,B^`\) ,但是我們更新 B 的時候,前一層此時的引數是 A,也就是我們在考慮前一層輸出是 \(a\) 的情況下來更新下一層的輸出 \(b\) ,可是更新完 \(b\) 之後我們又讓 \(a\) 變成了 \(a^`\)。也就是說更新 \(b\) 時的情景條件不成立了。這種情況稱為內部協變數偏移

但是作者在實踐中發現,更新時不論是對於 \(a\) 還是 \(a^`\) 計算得到的梯度是非常近似的,對於訓練的影響很小。

4 卷積神經網路

4.1 觀察1:檢測模式不需要整張影像

識別的核心是對於影像中某些重要表徵的識別

4.2 簡化1:感受野

每個神經元直觀性自己的 receptive field 內部的影像資訊。一般來說特徵都會存在於不同的通道中,所以對於感受野而言,一個感受野就只負責一個特定的通道上的一部分。另外感受野不一定要相連,感受野可以設計成任意的形狀,不過一般而言相鄰區域的資訊是有關聯的,所以我們習慣於將感受野設定為矩形的形式,大小也是可以自己調節的。

另外我們控制步幅來調整感受野的分佈,一般來說我們希望感受野是重疊的,因為某個表徵可能出現在兩個感受野的邊界上,如果不重疊的話,這個表徵可能就沒法被很好的提取到。自然引出的一個問題就是,移動感受野的時候,可能會超出邊界範圍,此時我們需要對超出的部分進填充一般來說填充的值都是0,當然也可以填充平均值等其他資料。

4.3 觀察2:同樣的表徵可能會出現在影像的不同區域

同一個表徵可能會出現在一個圖片的不同位置,如果對於每一個位置都要設定一個神經元來判斷相同的特徵會顯得很冗餘

4.4 簡化2:共享引數

每個感受野都有一組神經元負責守備和運算,我們希望對於不同的感受野能透過共享引數的方式來簡化。具體來說我們對於每個感受野設定一組引數,稱為濾波器,不同的感受野可以共享相同的引數。

4.5 總結

全連線層的靈活性最強,彈性最大,可以透過引數設定來決定是要看整張影像,還是某些部分。在引入感受野之後,每一個神經元能控制的範圍就變小了,網路的靈活性和彈性自然也下降了。同時引數共享又進一步限制了網路的靈活性。

感受野加上引數共享就是卷積層,而使用卷積層的網路就叫做卷積神經網路。

相關文章