Alex Liang

一天搞懂深度學習課後心得

11/26參加台灣資料科學年會辦的”一天搞懂深度學習”,由台大李宏毅老師主講。
碩班曾接觸過機器學習,學習SVM,hMM和KNN等方法做分類和辯識,也使用matlab寫程式實作演算法。
那個時候才知道線性代數和機率如何應用在機器學習。而近年來深度學習的竄起,也讓我對這個題目感到好奇,所以報名這次的講座。

Introduction of Deep Learning

一開始先介紹machine learning,它的目的是找出一個function可以辯識聲音,影像的內容;或是指導電腦在特定情境下做出回應,如下圍棋。
做過machine learning的人都知道,最大的挑戰在於針對問題找出合適的feature,然後建構function來解決特定問題。

也就是說,今天我要分辯影像中有沒有狗,那第一步得先研究狗的影像特徵是什麼? 是形狀?顏色?或是其它空間的特徵?
有了特徵就能進一步建立數學式或是套用機器學習的模型,在餵給系統夠多的training data之後,丟給它一組testing data看結果如何

這個過程在deep learning就不太一樣了,我們一樣需要準備training data和testing data,但”訓練”的過程是調整deep learning的model和參數。

deep learning是由Neural Network建構。基本單位是neuron,是一個input * weights + bias再經過activation function的model。

Neural Network正是許多neuron所建立的網絡,將網絡決定好後也就得到一組function set。

這裡老師特別講解為何是”deep”而不是”fat”,其原因和電子電路一樣,我們可以使用簡單的邏輯閘(and,or,not)去組成複雜的電路。優點是參數的量會減少,也就是更有效率。

有了function set,便要估算它的效果。這裡會計算output和ground truth(上課是用target,在碩班時我們都習慣稱ground truth)之間的落差,也就是loss

老師用了一個非常有趣的例子說明為何找不到全域中最小的loss,在各種數學式的課程裡加進實際的例子會讓學生比較有感覺,效果也更好。

live demo使用Keras分辯手寫數字影像,在GPU和各種tuning parameter的手法下,不用一分鐘就能達到95%的正確率,心裡想如果以前有這個工具,做研究也能快上許多。

在QA時間,老師也說明遇到未知問題時,不見得要用deep learning的手法來解決,可以試著先用SVM。

Deep Learning Model

這個session介紹二種learning model: CNN和RNN
CNN將問題拆解成各種子問題,特別適合用在影像處理上。例如我們能建立第一層layer處理顏色;第二層處理紋路材質。
透過downsampling便很適合餵給CNN處理

CNN的另一種應用是套用style,網路上常有人分享使用deep learning將某種風格的畫作套用在照片上,便是使用此手法。

另一種model是RNN,擁有記憶功能,適合用在文字和語音等長度不一及前後文相關的問題上。
舉例來說,好棒和好棒棒這個二詞只差一個字但意思差很多的問題,便很適合用RNN來解決

Beyond Supervised Learning

這節是我覺得deep learning最神奇的地方。

這個手法的重點是將encoder和decoder的輸出輸入接起來,讓encoder的輸入和decoder的輸出越接近越好,由此可得到一個auto-encoder
而auto-encoder也可以拿來當neural network的pre-train
最後我們能餵給大量training data情況下自動完成分類

另一種auto-encoder,Variational Auto Encoder(VAE)可幫助RNN提升正確率,而且它能透過演化讓結果越來越好

Conclusion

今天的演講充滿各種鄉民梗,也讓本來生硬的內容活潑易懂。
最後老師也以成為武林高手的條件來勉勵大家,要內外兼修才能達到高手的境界,也就是具備運算環境和解決問題的技巧。
一整天下來有點累,但也蠻多收獲的,知道現在的技術能達到什麼程度,以及該如何使用。
至於做的好不好就要看經驗啦 XD