[deep learning] backlog: in practice
Activation Function:
- RNN常用tanh,CNN常用relu。
- 在Generative Model或者Regression Model時要特別注意,tanh會讓值域限縮在-1~1之間,relu會讓<0值的gradient整個歸0(如果有後續應用要非常小心可能造成inf或者nan)且值域限縮在0~inf之間(基本上input有作normalization就不應該沒有負的輸出)。
- 2017年後出現Selu,可以有效的讓輸出控制在一個好的分布內 -> N(0,1),且有正有負,也有飽和特性,還有大於1的斜率。
WGAN:
- 可以放一個supervised objective term在generator,可以有機會引導它學得更好。
- 可以定期的多train幾次Critic,確保它保持在optimal。
- Critic出來的分數有機會和真實度正相關。
- Critic必須滿足EM distance上的限制。
CNN:
- 如果網路全部由convolution組成,input的長度可變,只是output的feature map也會跟著變。RNN與其相比主要是有memory這個差別。inference速度和training時間會比RNN快很多。
Normalization:
- 基本data的正規化。
- 採用batch normalization來避免internal covariate shift問題。(不適用small batch)
- 通常放在activation function前。
Gradient:
- 對根號x取gradient要非常小心,x不可為0,否則產生inf或者nan。
Tensorflow:
- name_scope和variable_scope差別:
- name_scope用來將code和graph統整,會影響Operation的name。
- variable_scope會同時影響Variable和Operation的name,要小心使用因為會牽涉到是否正確的reuse variable。
- 建置graph的時候要特別留意重要的變數名稱,以及儘可能讓IO長度可變動。
日後restore graph會方便很多。
Tensorflow中的兩大類RNN API:
- static
- 如果給定每筆資料的真實長度(data padding/zeroing 成同樣長度)gradient就會自動忽略超過的部份,不會去更新
- dynamic
- 只會unroll每個batch中最長的長度數量的LSTM Cell,可以更有效率的計算
No comments:
Post a Comment