前往
大廳
主題

神經網路與機器學習的幾個心得

Absinthe | 2021-02-28 16:10:08 | 巴幣 4 | 人氣 475

(這裡純粹記錄一些不易分類的個人心得,關於 AI 的細節筆記是放在 Hackmd)
  • 過去就有利用多層網路來建造 Powerful 預測函數的想法,但是有礙於過去 CPU 運算能力不夠快,使得這個想法未能實踐。
  • 後來分散式運算技術成熟、使用 GPU 加速整個運算過程,使得機器學習重新火熱起來。
  • 神經網路就是一個複雜、擁有一堆 Weights and Biases 的 Function,其輸入為當前資訊,其輸出為未來的預測結果 (多種類別的某一類) 或生成新的資訊。
  • 一個 AI Model (人工智慧模型),包含訓練階段 (機器學習階段) 與 測試階段。
  • 訓練階段就是讓機器「學習」,學習的方法就是不斷調整神經網路的 Weights and Biases 直到神經網路的 Output 與實際解答 (標籤 Label) 之間的落差值 (Cost Function) 達到最小。由於希望神經網路能將許多相似的東西、情況預測至另一個類別,因此訓練資料量不一個而是有非常龐大且多樣的訓練資料,最終目標是求得所有訓練資料的平均 Cost 最小值。當平均 Cost 為最小值時,其 Weights and Biases 所構成的神經網路就是最佳的預測 Function。
  • 想要找到 Cost Function 的最小值,需要先知道每層、每個 Weight or Bias 對於 「Cost 值的變化」有多麼靈敏?也就是當某個 Weight or Bias 有一點點改變時,對 Cost 值的影響力有多大?這也就是機器學習中「微分」的直覺想法。
  • 假設 W 代表 Weight,C(W) 代表 Cost Function,則計算 W 對 Cost Function 的微分,df(x)/dW 的意思就是當 W 有一點點改變時,Cost Function 的變化量。
  • 一個神經元會有三個輸入值,(1) 上一層神經元的 Activation Function Value,假設代號為 a、(2) 上層神經元連至本神經元的 Weight,假設代號為 w、(3) 本神經元的 Bias,假設代號為 b。寫成數學表達式為 a' = w * a + b,其中 a' 表示位在下一層的神經元。
  • 我們想解 δC_0 / δw^(L),則可利用連鎖律能將這個多層函數拆開。
    • δC_0 可拆解如下:
      1. C_0 = [a^(L) - y]^2
      2. a^(L) = Activation( z^(L) )
      3. z^(L) = w^(L) * a^(L-1) + b
    • 所以 C_0 可視為由三層函數包覆而成的函數,利用連鎖律逐步拆解得到 δC_0 / δw^(L) = δz^(L) / δw^(L) * δa^(L) / δz^(L) * δC_0 / δa^(L)
    • 由此可知,δa^(L) 對 δC_0 的影響最直接,δz^(L) 對 δC_0 的影響為間接 (影響力為第二名)、δw^(L) 對 δC_0 的影響為間接 (影響力為第三名,最弱)
    • 同樣道理能套用在 bias 的微分計算上,把 w 換成 b 即可
    • 同樣道理套用在 a^(L-1),所以展開其連鎖律為 δC_0 / δa^(L-1) = [δz^(L) / δa^(L-1)] * [δa^(L) / δz^(L)] * [δC_0 / δa^(L)],有趣的地方是其中的 [δC_0 / δa^(L)] 在解 δC_0 / δw^(L) (從最後一層隱藏層開始算) 的時候就已經算過了!所以直接回 Call 剛剛算好的值即可,以最後一層隱藏層來說該值為 2 * (a^(L) - y)
    • 然後用相同的演算法算完最後一層 Hidden Layer 所有神經元的參數的微分之後,再遞迴計算倒數第二層神經元的參數的微分即可,遞迴函式要傳遞的參數就是 δC_0 / δa^(L-1),令上一層遞迴式的 δC_0 / δa^(L-1) 等於 下一層的 δC_0 / δa^(L),完美。
  • 大金 ML 影片 -- Gradient Descent 單元中,稱 δz^(L) / δw^(L) 為 Forward Pass;稱 δa^(L) / δz^(L) * δC_0 / δa^(L) 為 Backward Pass。
    • 算一下 δz^(L) / δw^(L) 就會知道這個值剛剛好就是 a^(L-1),所以 Forward Pass 的演算法超簡單,直接複製上一層所相連的神經元的 Activation Function Value 即可。
  • 在神經元總數相似的情況下,多層架構會比單層架構更 Powerful 的原因是多層架構的神經元之間會有共享的參數。
  • Model:中文為模型,就是包含未知參數的神經網路函式
  • Model Bias:如果原先設計的函式結構 (模型) 太弱,無法 fit (符合、反映) 訓練資料 或 測試資料的狀況,永遠會存在誤差,這種狀況稱為之。例如:使用單層的線性函數 Model,但是訓練資料的分布狀況如同有曲線的二次函數,那這個 Model 是不可能完全 fit 訓練資料的,永遠都存在 Loss。
#AI

創作回應

更多創作