iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 19
0
自我挑戰組

深度學習所需入門知識--一位初學者的認知系列 第 19

調整超參數 Batch_size, Learning Rate, Epoch

一個很小的線性迴歸,採用機器學習除了前幾篇的細節需要斟酌外。因為是線性迴歸問題只有少數幾個『超參數 Hyper-Parameter』的數值要由模型訓練師決定,我建議先在簡單的模型練習調整超參數,感受一下,等到複雜的模型比較容易有方向感。而複雜的模型例如 CNN 就會有諸如模型要多少層(多深?),要用多少神經單元,要用什麼Activation function(激勵函數)等等。不過不急,光是這裡要講的幾個超參數就夠傷腦筋的。

  1. https://chart.googleapis.com/chart?cht=tx&chl=%7C%5Cmathcal%7BB%7D%7C 是miniBatch 的個數
  2. https://chart.googleapis.com/chart?cht=tx&chl=%5Ceta 稱之為學習率 (Learning Rate)。當找到方向後,還要決定一次走多遠,這個由此數值決定
  3. 另外就是要決定訓練要跑幾回合 epoch,一個 epoch 籠統講就是全部的訓練數據都被掃過一遍。

Moore 問 Fields 他在其他看到 Iteration,不是 UP 的 Iteration,與 epoch 關係為何?Fields 簡單用這個公式表達:

一個epoch 要跑 (訓練樣本數/Batch_Size)個 Iterations

因為一個 Iteration 是指一次用Batch_Size 個樣本做整個網路的導數計算來更新參數的。每個 epoch 要跑多少 iteration 是用上面公式換算來,所以基本上這個數字不需要調整。

batch_size = 10 #設 miniBatch 每個iteration以10筆做計算
lr = 0.03  #學習率 (Learning Rate) 
num_epochs = 3 #總共要用全部的訓練樣本重複跑幾回合

大家看程式裡面關於這幾個超參數的設定值,Pete 馬上請教學習率為何設 0.03,這立即成為大家討論的重點,因為大家說不上一個所以然的道理。只能說大多數的模型被創造出來,其伴隨的就是也會找到一個建議值,Molly 特別講到這個算是很重要的課題,他請大家連到 Google 提供的 Machine Learning Crash Course 關於 Learning Rate 的實驗,是針對更簡單的線性迴歸 https://chart.googleapis.com/chart?cht=tx&chl=y%20%3D%20wx%20%2B%20b 做訓練,儘管如此簡單的模型,學習率的超參數設定也是一番折騰。

佳麗在Learning Rate 的實驗 玩了好一會兒,越玩越是感慨:這個尋找合適的學習率,根本就是金髮姑娘原則。而且她也馬上觀察到如果是這樣的過程,理論上應該會有人發明 Learning Rate 要隨著訓練做調整,看來必須越來越小。

Molly 驚奇佳麗的敏感度:”的確是有的,我最近看 Adagrad ,就會在訓練過程中調整學習率,逐步變小”
另外 Cash 也觀察到要多少個 Epoch 也跟 Learning Rate 的設定是有關的,這個大家討論了一下,看來也只能觀察訓練的結果,看損失函數是否已經穩定不怎麼變化。不過又想到一個問題…如果聽聞很多問題是要訓練好幾天的,總不能一直盯著畫面看數字來決定要不要停止訓練。這個 Moore 使用 Tensorflow 看到有 Tensorboard 可以把訓練過程以曲線圖呈現,以後有機會看如何使用。

最後只剩下 Batch_Size,他們做了實驗,調整了 Batch_Size 10, 40, 100 大約得到幾個觀察:

  1. Batch_Size 設越大則跑完 一個 Epoch 的時間大約成比例縮小。這個在預期內,因為要跑的 Iteration就比例減少。
  2. 但設的太大,就必須放大 Epoch 數。這是因為Batch_Size大,一個 Epoch 可以跑得 Iteration 數就成比例變少,就沒有足夠的梯度下降讓損失函數到平穩的低點。所以必須加大 Epoch 數,這樣訓練時間又變長了,取捨之間也是必須用觀察的。
  3. Moore嘗試在 GPU 上跑,發現Batch_Size越大,所需的 GPU 的VRAM 就越大。所以實際做訓練時,這個超參數的大小是被硬體VRAM制約

備註:

專案緣起記錄在 【UP, Scrum 與 AI專案】


上一篇
由線性迴歸看機器學習的一些技術細節, 資料集數據 & 梯度計算
下一篇
梯度下降 與 Batch Size; 以 Gluon 實作
系列文
深度學習所需入門知識--一位初學者的認知31

尚未有邦友留言

立即登入留言