iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0
AI & Data

跟著Google學ML系列 第 20

[Day 20] Training神經網路

Ref.: Training Neural Networks

影片中講到Backpropagation,它是一種利用chain rule連鎖率這個數學法則,達成有效率的梯度計算方法,跟之前講到的SGD角色不太一樣。

差異可以看這裡:What is the difference between SGD and back propagation?
實際視覺化的執行可以邊看邊往下滑:Backpropagation algorithm
TensorFlow已經在內部做好backpropagation,我們倒是不用太傷腦筋。

今天這邊要講的是一些Neural Network的一些best practices,並會講一些backpropagation的failure cases。

Failure cases

Vanishing Gradients

Lower layer(靠近input的layer)它的Gradients會變得很小,用它們計算時會產生很小的term,讓train變得非常慢。
而ReLU activation function可以防止這個問題發生

這篇文章可以看到詳細解釋:The vanishing gradient problem

Exploding Gradients

跟上面相反,太大的Gradient也會造成問題,讓model很難converge。Batch normalization可以避免這個問題,同時降低learning rate。

這裡有解釋:Batch Normalization

Dead ReLU Units

使用ReLU時,只要它加權總合的input小於0,它就很難再加到大於0,也就不會再對這個Neural Network有貢獻。降低learning rate可以防止ReLU dying。

Dropout Regularization

Dropout是對Neural Network有用的一種Regularization,是透過隨機捨去一些unit達成的。可以定義一個0到1的捨去比例:

  • 0.0 = 不執行Dropout Regularization
  • 1.0 = 通通丟掉,model學不到任何東西
  • 在0~1之間會比較有用

實際概念可以看這裡:Dropout in (Deep) Machine learning

今天的文章有點少,但今天的程式練習很重要。

Programming exercise

這次的練習用了很多normalize input的方法:

  • linear_scale: 把value正規化到-1 ~ 1之間
def linear_scale(series):
  min_val = series.min()
  max_val = series.max()
  scale = (max_val - min_val) / 2.0
  return series.apply(lambda x:((x - min_val) / scale) - 1.0)
  • log_normalize: 對數值取對數
def log_normalize(series):
  return series.apply(lambda x:math.log(x+1.0))
  • clip: 超過最大的用最大取代,超過最小的用最小取代。
def clip(series, clip_to_min, clip_to_max):
  return series.apply(lambda x:(
    min(max(x, clip_to_min), clip_to_max)))
  • z_score_normalize: 數值標準化
def z_score_normalize(series):
  mean = series.mean()
  std_dv = series.std()
  return series.apply(lambda x:(x - mean) / std_dv)
  • binary_threshold: 數值二分化
def binary_threshold(series, threshold):
  return series.apply(lambda x:(1 if x > threshold else 0))

還多用了兩個Optimizer: AdagradOptimizer, AdamOptimizer,跟我們之前用的GradientDescentOptimizer, FtrlOptimizer一樣都是優化函數,詳細比較可以看下面兩篇:


上一篇
[Day 19] 神經網路Neural Networks介紹
下一篇
[Day 21] Multi-Class Neural Networks
系列文
跟著Google學ML30

尚未有邦友留言

立即登入留言