1. 程式人生 > >#Deep Learning回顧#之2006年的Science Paper

#Deep Learning回顧#之2006年的Science Paper

大家都清楚神經網路在上個世紀七八十年代是著實火過一回的,尤其是後向傳播BP演算法出來之後,但90年代後被SVM之類搶了風頭,再後來大家更熟悉的是SVM、AdaBoost、隨機森林、GBDT、LR、FTRL這些概念。究其原因,主要是神經網路很難解決訓練的問題,比如梯度消失。當時的神經網路研究進入一個低潮期,不過Hinton老人家堅持下來了。

功夫不負有心人,2006年Hinton和學生髮表了利用RBM編碼的深層神經網路的Science Paper:Reducing the Dimensionality of Data with Neural Networks,不過回頭來看,這篇paper在當今的實用性並不強,它的更大作用是把神經網路又推回到大家視線中,利用單層的RBM自編碼預訓練使得深層的神經網路訓練變得可能,但那時候Deep learning依然爭議很多,最終真正爆發是2012年的ImageNet的奪冠,這是後話。

flow

如圖中所示,這篇paper的主要思想是使用受限RBM先分層訓練,受限的意思是不包含層內的相互連線邊(比如vi*vj或hi*hj)。每一層RBM訓練時的目標是使得能量最小:

rbm

能量最小其實就是P(v, h)聯合概率最大,而其他v’相關的p(v’, h)較小,後面這個是歸一化因子相關。這塊如果理解有問題的,需要補一下RBM相關知識,目前網上資料不少了。

大致的過程為,從輸入層開始,不斷進行降維,比如左圖中的2000維降到1000維, 降維時保證能量最小,也就是輸出h和輸入v比較一致,而和其他輸入v’不一致,換句話說,輸出儘量保證輸入的資訊量。降維從目標上比較類似於PCA,但Hinton在文章說這種方法比PCA效果會好很多,尤其是經過多層壓縮的時候(比如784個畫素壓縮到6個實數),從原理應該也是這樣的,RBM每一層都儘量保留了輸入的資訊。

預訓練結束後,就會展開得到中間的解碼器,這是一個疊加的過程,也就是下一層RBM的輸出作為上一層RBM的輸入。

最後再利用真實資料進行引數細調,目標是輸入圖片經過編碼解碼後儘量保持原圖資訊,用的Loss函式是負Log Likelihood:
likelihood

這篇在今天看來實用性不太大,難度也不大,但在當時這篇文章看起來還是晦澀的,很多原理沒有細講。為何能中Science?個人認為,畢竟Hinton是神經網路的泰斗,換個人名不見經傳的人估計中不了,另外這篇文章也確實使得以前不可能的深層神經網路變得可能了,在今天依然有很多可以借鑑的地方,細心的同學會發現上百或上千層的ResNet的思想在一定程度上和這篇論文是神似的。ResNet也是意識到深層(152層)不好直接訓練,那就在單層上想辦法,將原來直接優化H(x)改為優化殘差F(x) = H(x)-x,其中H(X)是某一層原始的的期望對映輸出,x是輸入,相當於輸入x有個直通車到達該層輸出,從而使得單層的訓練更加容易。

參考資料:

本文只是簡單回顧,疏漏之處敬請諒解,感興趣的可以加QQ群一起學習:252085834