前言
大概一個月前開始在Kaggle上接觸有關影像辨識的競賽,一開始我是玩數數海獅有幾隻的這項競賽。
雖然這是一個物體識別(Object recognition)的競賽,但我當時還未接觸到以深度學習的方式來進行物體識別,僅僅是靠著RGB分群+XGBoost迴歸、以及簡單的Ensemble技巧,勉勉強強爬到了一個只差三名就能拿下生涯第一座銅牌的名次。雖然事後有些懊惱,但這也成為了我接下來參加亞馬遜叢林辨識,以及研究Keras這個Python深度學習套件的因緣。
深度學習
在開始介紹Keras之前,我們先來了解一下什麼是深度學習,這裡我先截一段維基百科上的定義:
深度學習(英語:deep learning)是機器學習拉出的分支,它試圖使用包含複雜結構或由多重非線性變換構成的多個處理層對資料進行高層抽象的演算法。
深度學習是機器學習中一種基於對資料進行表征學習的方法。觀測值(例如一幅圖像)可以使用多種方式來表示,如每個像素強度值的向量,或者更抽象地表示成一系列邊、特定形狀的區域等。而使用某些特定的表示方法更容易從例項中學習任務(例如,人臉識別或面部表情識別)。深度學習的好處是用非監督式或半監督式的特徵學習和分層特徵提取高效演算法來替代手工取得特徵。
好吧,上面這段話如果是沒接觸過神經網路的人,基本上就跟我以前一樣,連看都看不懂…根本覺得他是文字天書。同時就算已經有接觸過了(像我),但是對深度學習裡面很多東西還是會一知半解。
不過我也只是簡單介紹(如有錯誤請不吝指教),拜萬用的谷哥所賜,我很快地找到了一張好用的圖來簡單解釋所謂的神經網路:
我知道光看這張圖片會覺得很厲害,但是卻也不知道他到底可以幹嘛…簡單來說就是每個圓圈是在模擬人類的腦神經元,它裡面會有一個權重。這些圓圈彼此連接起來形成神經網路,在不同的刺激下會有不同的反應(也就是輸出)。
我承認我自己也不知道在講什麼,總之就是想像成這樣:
所謂的學習就是透過不斷的餵訓練資料給神經網路,訓練神經網路去逼近最佳的答案,在這過程中就會將可能是數百、數千萬甚至是數十億的神經元權重給更新,然後就能見證奇蹟的時刻!
(要快速的理解神經網路在幹嘛,最快的方式就是自己做一個識別數字的神經網路出來,詳細參考可以點這裡。)
而深度學習就是搭建一個非常深、層數非常多的神經網路,然後來完成不可能的任務。