https://uknowiknow.com/courses/1a319e3ac7865c57
透過視覺化Neuron來觀察和學習 Deep Learning 的運作
http://playground.tensorflow.org/每一個Neuron都是在做輸入x 輸出 y
y = g(wx + b) (y 跟 b 是純量,w 跟 x 是向量,g 是 Activation Function)
除了 Input Layer 和 Output Layer ,中間的 Layer 都叫作 Hidden Layer
給預期的Output,用 Gradient Descent 演算法去更新每一個 Neuron 的 w 跟 b ,目標是使得 Loss 最小。
Loss = (預期的Output - Output Layer)^2
Loss = (預期的Output - Output Layer)^2
Mini Batch 是每次計算 Loss 時不使用全部的Training Data,而是只使用部分的 Training Data
使用 Mini Batch 可以避免掉入一些 Local Minimum
Back Propagation 是更快的微分技術
Case Study:手寫數字辨識
題目描述:給一張手寫數字(一位數)的點陣圖,輸出對應的數字
網路結構:在 Network 上的 Input Layer 是所有 pixel (w*h個 Neuron ),輸出是10個 Neuron ,分別代表手寫數字為0~9的機率,當輸出向量代表 0 的 Neuron 輸出值最大時,代表辨識結果為0。
圍棋:
給盤勢(19*19),輸出下一步下子位置(19*19)
利用多個是非題( Neuron )可以實作出選擇題
Network 結構目前沒有辦法靠學習來自動生成
Network 結構目前沒有辦法靠學習來自動生成
Universality Theorem
Deep 比較好還是 Fat 比較好?
Fat +Short v.s. Thin + Tall
答案是 Thin + Tall 勝出
Deep network 隱含模組化( Modularization )的概念
一個選擇題被拆解成幾個是非題( Hidden Layer )之後再合成
Deep 之後需要的 Training Data 變少
有哪些調整方法可以讓 Training Data 的 Loss 降低:
Adagrad:調整 Learning Rate,讓每一個參數(w,b)有自己的Learning Rate
Momentum:加入移動的慣性到參數的update上
Corss Entropy:換掉兩個向量的距離估計函數,建議搭配 Softmax 使用
ReLU(Rectified Linear Unit):線型的 Activation Function 才不會在多層次的時候造成計算微分時因為多層次的關係被遞減。
Maxout(自動生成 Activation Function),用多個 Neuron 取最大的輸出去組成一個 Neuron
Residual Network:跳過2個 Layer,直接連接到後面的 Layer
Highway Network:跳過N個 Layer
有哪些調整方法可以讓 Testing Data 的 Loss 降低(對抗Overfitting):
更多的 Data
生成更多的 Data (把原圖做一些旋轉)
生成更多的 Data (加入雜訊)
生成更多的 Data (把原圖做一些旋轉)
生成更多的 Data (加入雜訊)
Early Stopping:把手上的 Training Data 拿一些做驗證,當驗證 Data 的表現沒有再進步時,就停止
Weight Decay:使得 Weight 的大小越小越好
L2 Regularization:一種 Weight Decay 方法,把 Weight 的長度加入 Loss Function
L2 Regularization:一種 Weight Decay 方法,把 Weight 的長度加入 Loss Function
Ensemble:嘗試各種Network Structure,再把結果合起來。
Dropout:在每一次遞迴的時候都把 Network 上的 Neuron丟掉一部份,等同於Ensemble的終極版。
Recurrent Neural Network (RNN):有記憶的NN
每一個 Neuron 對上一個輸入資料的輸出被保留在 Hidden Layer 上。或者說 Neuron 都跟上一次的自己建立連線。
Bidirectional RNN:時間逆序+時間順序
LSTM:在 Neuron 跟自己建立關聯之前加上3個Gate:Input Gate,Output Gate,Forget Gate
BPTT:RNN的計算方法
CASE :
Slot Filling:輸入一個 word,輸出這個 word 是屬於哪一個 Slot?
Slot:dest(目的地),time(時間),other
input : arrive Taipei on November 2nd
理想中的output : other dest other time time
word 怎麼表示成向量?
1-of-N Encoding:{apple,bag,cat,dog,elephant}
apple = [1 0 0 0 0]
bag = [0 1 0 0 0]
cat = [0 0 1 0 0]
dog = [0 0 0 1 0]
elephant = [0 0 0 0 1]
word embedding:
為了不要讓word的向量太多維度,作降維的方法是把所有的word放到一個n-D空間上,語意上越接近的字就放在一起。
skip-gram text model:
Windows - Microsoft + Google = Android
Attention-based Model:讓機器可以回答問題
用DNN/RNN去選擇該讀取哪些資料,作為一個新的input,直到他找到答案。
Deep Reinforcement Learning
更難的問題
參考資料:
線上觀察deep learning的運作
http://playground.tensorflow.org/Tensorflow 是一個用C++跟Python實作的deep learning library
用起來跟numpy有90%像
SyntaxNet
OpenAI
Parallel Game Engine
電腦視覺