Notes on CS231n: Convolutional Neural Networks for Visual Recognition Part II

然而,損失函數的意義是評估模型表現的好壞。每當我們使用訓練的樣本去訓練模型時,會希望損失函數是低的,但更重要的是這個模型可以應用在測試的資料上(未經訓練的資料)。

藍色圓圈為訓練資料,綠色方塊則為測試資料。在訓練時,模型為了達到低的損失值,就會越擬合訓練資料的分布,但很有可能無法很好地推論到測試的資料上(如右圖)

若一味的追求損失函數在訓練集上的表現,很有可能會出現過擬合的傾向,也就是過度擬合訓練資料。然而,不可避免的是訓練資料可能帶有雜訊干擾模型,因此在擬合這些資料時,就會對往後測試資料的判斷造成影響。

不用很複雜的模型去擬合,反而用簡單模型會有更好的抗雜訊能力,使得泛化性(generalization)更好

為了降低模型的複雜度,可以利用 正規化 ( Regularization)的方法限制了決定模型複雜度的參數 W。R(W) 加入損失函數 L,即可視為懲罰項,若 R(W) 很大(複雜度高)則會讓損失值上升。因此整個損失函數則可同時判別 精準度 以及 複雜度 ,其中的比例以 lambda 去做平衡。

最常見的正規化方法有 L1, L2 以及 Elastic net(L1+L2)

透過正規化的限制,W_i 的值會被限縮,因此無法透過大範圍的調整達到好的分數(精準度),但複雜度會因而降低。

除了正規化的方式可以降低模型複雜度,還有一個常見的方法是 Dropout,會在後面的章節詳細介紹。

Optimization

在了解如何評估模型結果的好壞之後,模型就可以依據這個評估標準來做模型的更新,也就是優化器(Optimizer)的部分。我們可以想像損失函數在高維空間中表示的是一個超曲面,若簡單以三維空間來說的話,他會如以下圖所示

優化器的目標就是會了找到曲面的最低點位置,表示損失函數最低的地方

為了走到最低點的地方,有一些策略可以思考:

  1. 隨機搜尋(Random search)何處最低,但此方法的可信度會相當依賴取樣的個數。
  2. 根據斜率去尋找走的方向,尋找當下位置切線向下的方向,一點一點地前進。

因此要計算斜率,會依據以下公式去求得

從損失函數的平面去找 gradient,而損失函數的變數即是 W

最常見的 Optimization 方法是梯度下降(Gradient Descent),他的想法便是最直覺地利用梯度(gradient)去更新 W 的值,所以,新的 W 位置就會依照下面的方法去做更新

step_size 的意義是為了調整 gradient 方向上的更新距離
為了往低處走,不論是 gradient 是正是負,新的 W 位置都會是 W — step_size * W_gradient

Gradient Descent 的方法會依照所有訓練資料計算出來的損失值去做一次模型的更新,但是當訓練資料的總數很大時,這通常會讓模型更新速度上變得緩慢。然而,有另一個方法提出的解決辦法是取一個較小的訓練樣本數去逼近原本的平均損失,進而快速的更新模型,而此方法稱為 Stochastic Gradient Descent(SGD)。

除了直接利用影像上每個像素的值作為特徵去辨識外,我們可以看到很多過去為了影像的演算法利用一

影片位址: https://www.youtube.com/watch?v=h7iBpEHGVNc

Lecture 4: Backpropagation and Neural Networks

在上一課內容談及除了要評估模型好壞以外,也要依據此評估指標來做模型上的更新,也就是透過 Gradient 的方向去尋找損失相較低的方向前進。而這個 Gradient 是針對模型內的每個參數去做計算的。然而對於一個深層的網路或複雜的網路,應該如何得到呢?因此以下會由一個簡單的例子示意,觀察計算各參數的 Gradient 有何規律。

A simple example: f( X, Y, Z ) = ( X+ Y) Z

分別將 X=-2, Y=5, Z=-4 代入f(X, Y, Z) = ( X + Y ) Z

對於簡單的四則預算,如何從最終的結果,也就是函數的輸出來往回推導各個參數的 Gradient 呢?也就是要分別計算出 f 對 X, Y, Z 的 Gradient 值

目標得到各個參數的 Gradient 值

若令 X + Y = q,則 f = q Z。因此利用計算偏導數的規則分別可得到

分別計算每個參數的偏導數

依照鏈法則(Chain Rule)的規則,因此

從計算圖上觀察

對於每個計算元皆有兩輸入一輸出,則從後向前傳遞,前者的 Gradeint 皆會與後者有關

我們再來細看每一個運算元前後的關係何?

每個節點對於最終 Loss 的偏導數為 Local gradient 與 Upstream gradient 的乘積

因此每個節點都可以運用 Local gradient 與 Upstream gradient 的乘積來計算 Gradient,值到傳播到最一開始輸入的節點,由後向前傳遞 Gradient 的概念也稱為反向傳播(Backpropagatation)

除了基本的四則運算外,若經過更複雜的計算是否也還能依據此法得到相對應的 Gradient 值,以下將由另一個例子示意。

此函數運算包含倒數以及指數等,是否能用相同的規則去計算各節點的 Gradient?

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章