訓練神經網路是一個複雜的過程,稍微調整一個參數,訓練出來的結果與過程中的效率就不會不一樣,所以我們在訓練前需要仔細思考各種因素,確保可以成功地建立和訓練一個有效的模型。那有哪些是值得我們注意的地方呢?
定義問題和目標:
先知道要解決什麼問題,並且設定目標去達成,最好還要有預期結果,才能與架設出來的神經網路做比較。
隱藏層的設定:
雖然我們知道增加一層隱藏層學習能力就可以變強,但也不是說可以無上限的增加就會變成超級世界無敵厲害。有時候添加過的的隱層藏會使得反向傳播的效率變差,導致學習素速度下降。神經網路的隱藏層會根據問題和數據來決定,並沒有一個通用的標準答案(少於1000個樣本,通常從2層隱藏層開始架設。1000-10000個樣本,可以考慮使用2到4個隱藏層)。有一些考慮因素可以給大家點建議:
問題複雜度:較複雜的問題可能需要更深的網路來擷取和學習特徵。
數據量:如果您擁有大量的數據,通常可以考慮使用較多隱藏層來處理。
資源:越多的隱藏層就需要越厲害的計算資源(例如GPU)和更長的訓練時間。
維度和特徵:數據的維度和特徵也會影響架設隱藏層的層數。對於高維數據,就可能需要更多的隱藏層來處理。
第一隱藏層的神經元數量:通常設計第一個隱藏層,神經元數量大概可以設定成輸入特徵數量的1到2倍。這樣可以幫助模型擷取輸入特徵的一些基本模式。
後續隱藏層的神經元數量:隨著神經網路的深度增加,一般來說,可以逐漸減少隱藏層的神經元數量。我們可以將神經元的數量以2倍的數量來增減。例如:神經元數量從32個增加到64個後,模型準確率有明顯改善,那就增加。反之如果模型準確率不會因為從64降為32就降低,那就減少。
若輸入的特徵不明顯,後面幾層的神經元設多一點較好,這樣可以幫助模型捕捉特徵。
超參數調整:
調整學習率(learning rate)、批量大小(每次餵給模型跑的資料量)、隱藏層、各神經元的數量......等,以優化模型的性能。
損失函數和優化器:
選擇適當的損失函數:均方誤差、交叉熵損失(我們之前在損失什麼?損失函數有講到)來衡量模型的性能,並選擇適當的優化器:隨機梯度下降(梯度下降是一次投餵所有資料,隨機梯度下降(SGD)概念相同只是將訓練資料切分成小份然後批次處理)來更新模型參數。
介紹那麼多,明天我們就來寫改良後的神經網路吧!!