關於深度學習

2021-06-20 21:38:57 字數 3690 閱讀 5475

一、deep learning的基本思想

假設我們有乙個系統s,它有n層(s1,…sn),它的輸入是i,輸出是o,形象地表示為: i =>s1=>s2=>…..=>sn => o,如果輸出o等於輸入i,即輸入i經過這個系統變化之後沒有任何的資訊損失(呵呵,大牛說,這是不可能的。資訊理論中有個「資訊逐層丟失」的說法(資訊處理不等式),設處理a資訊得到b,再對b處理得到c,那麼可以證明:a和c的互資訊不會超過a和b的互資訊。這表明資訊處理不會增加資訊,大部分處理會丟失資訊。當然了,如果丟掉的是沒用的資訊那多好啊),保持了不變,這意味著輸入i經過每一層si都沒有任何的資訊損失,即在任何一層si,它都是原有資訊(即輸入i)的另外一種表示。現在回到我們的主題deep learning,我們需要自動地學習特徵,假設我們有一堆輸入i(如一堆影象或者文字),假設我們設計了乙個系統s(有n層),我們通過調整系統中引數,使得它的輸出仍然是輸入i,那麼我們就可以自動地獲取得到輸入i的一系列層次特徵,即s1,…, sn。

對於深度學習來說,其思想就是對堆疊多個層,也就是說這一層的輸出作為下一層的輸入。通過這種方式,就可以實現對輸入資訊進行分級表達了。

另外,前面是假設輸出嚴格地等於輸入,這個限制太嚴格,我們可以略微地放鬆這個限制,例如我們只要使得輸入與輸出的差別盡可能地小即可,這個放鬆會導致另外一類不同的deep learning方法。上述就是deep learning的基本思想。

二、deep learning與neural network

深度學習是機器學習研究中的乙個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網路,它模仿人腦的機制來解釋資料,例如影象,聲音和文字。深度學習是無監督學習的一種。

深度學習的概念源於人工神經網路的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現資料的分布式特徵表示。

deep learning本身算是machine learning的乙個分支,簡單可以理解為neural network的發展。大約二三十年前,neural network曾經是ml領域特別火熱的乙個方向,但是後來確慢慢淡出了,原因包括以下幾個方面:

1)比較容易過擬合,引數比較難tune,而且需要不少trick;

2)訓練速度比較慢,在層次比較少(小於等於3)的情況下效果並不比其它方法更優;

所以中間有大約20多年的時間,神經網路被關注很少,這段時間基本上是svm和boosting演算法的天下。但是,乙個痴心的老先生hinton,他堅持了下來,並最終(和其它人一起bengio、yann.lecun等)提成了乙個實際可行的deep learning框架。

deep learning與傳統的神經網路之間有相同的地方也有很多不同。

二者的相同在於deep learning採用了神經網路相似的分層結構,系統由包括輸入層、隱層(多層)、輸出層組成的多層網路,只有相鄰層節點之間有連線,同一層以及跨層節點之間相互無連線,每一層可以看作是乙個logistic regression模型;這種分層結構,是比較接近人類大腦的結構的。

而為了克服神經網路訓練中的問題,dl採用了與神經網路很不同的訓練機制。傳統神經網路中,採用的是back propagation的方式進行,簡單來講就是採用迭代的演算法來訓練整個網路,隨機設定初值,計算當前網路的輸出,然後根據當前輸出和label之間的差去改變前面各層的引數,直到收斂(整體是乙個梯度下降法)。而deep learning整體上是乙個layer-wise的訓練機制。這樣做的原因是因為,如果採用back propagation的機制,對於乙個deep network(7層以上),殘差傳播到最前面的層已經變得太小,出現所謂的gradient diffusion(梯度擴散)。這個問題我們接下來討論。

三、deep learning訓練過程

3.1、傳統神經網路的訓練方法為什麼不能用在深度神經網路

bp演算法作為傳統訓練多層網路的典型演算法,實際上對僅含幾層網路,該訓練方法就已經很不理想。深度結構(涉及多個非線性處理單元層)非凸目標代價函式中普遍存在的區域性最小是訓練困難的主要**。

bp演算法存在的問題:

(1)梯度越來越稀疏:從頂層越往下,誤差校正訊號越來越小;

(2)收斂到區域性最小值:尤其是從遠離最優區域開始的時候(隨機值初始化會導致這種情況的發生);

(3)一般,我們只能用有標籤的資料來訓練:但大部分的資料是沒標籤的,而大腦可以從沒有標籤的的資料中學習;

3.2、deep learning訓練過程

如果對所有層同時訓練,時間複雜度會太高;如果每次訓練一層,偏差就會逐層傳遞。這會面臨跟上面監督學習中相反的問題,會嚴重欠擬合(因為深度網路的神經元和引數太多了)。

2023年,hinton提出了在非監督資料上建立多層神經網路的乙個有效方法,簡單的說,分為兩步,一是每次訓練一層網路,二是調優,使原始表示x向上生成的高階表示r和該高階表示r向下生成的x'盡可能一致。方法是:

1)首先逐層構建單層神經元,這樣每次都是訓練乙個單層網路。

2)當所有層訓練完後,hinton使用wake-sleep演算法進行調優。

將除最頂層的其它層間的權重變為雙向的,這樣最頂層仍然是乙個單層神經網路,而其它層則變為了圖模型。向上的權重用於「認知」,向下的權重用於「生成」。然後使用wake-sleep演算法調整所有的權重。讓認知和生成達成一致,也就是保證生成的最頂層表示能夠盡可能正確的復原底層的結點。比如頂層的乙個結點表示人臉,那麼所有人臉的影象應該啟用這個結點,並且這個結果向下生成的影象應該能夠表現為乙個大概的人臉影象。wake-sleep演算法分為醒(wake)和睡(sleep)兩個部分。

1)wake階段:認知過程,通過外界的特徵和向上的權重(認知權重)產生每一層的抽象表示(結點狀態),並且使用梯度下降修改層間的下行權重(生成權重)。也就是「如果現實跟我想象的不一樣,改變我的權重使得我想象的東西就是這樣的」。

2)sleep階段:生成過程,通過頂層表示(醒時學得的概念)和向下權重,生成底層的狀態,同時修改層間向上的權重。也就是「如果夢中的景象不是我腦中的相應概念,改變我的認知權重使得這種景象在我看來就是這個概念」。

deep learning訓練過程具體如下:

1)使用自下上公升非監督學習(就是從底層開始,一層一層的往頂層訓練):

採用無標定資料(有標定資料也可)分層訓練各層引數,這一步可以看作是乙個無監督訓練過程,是和傳統神經網路區別最大的部分(這個過程可以看作是feature learning過程):

具體的,先用無標定資料訓練第一層,訓練時先學習第一層的引數(這一層可以看作是得到乙個使得輸出和輸入差別最小的三層神經網路的隱層),由於模型capacity的限制以及稀疏性約束,使得得到的模型能夠學習到資料本身的結構,從而得到比輸入更具有表示能力的特徵;在學習得到第n-1層後,將n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的引數;

2)自頂向下的監督學習(就是通過帶標籤的資料去訓練,誤差自頂向下傳輸,對網路進行微調):

基於第一步得到的各層引數進一步fine-tune整個多層模型的引數,這一步是乙個有監督訓練過程;第一步類似神經網路的隨機初始化初值過程,由於dl的第一步不是隨機初始化,而是通過學習輸入資料的結構得到的,因而這個初值更接近全域性最優,從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功於第一步的feature learning過程。

關於深度學習

寫這篇文章其實是個意外,在一本圖形教材裡看到了神經網路,感覺好像以前在機器學習裡見過,就稍微了解了一下。dl的浪潮好像影響很大,之前在知乎上看到很多中小型公司,能組起雲平台的都在做大資料。在這裡我只是想說一下,人工智慧,機器學習,深度學習的區別。詳細資料 我覺得深藍的總結比較準確 機器學習 一種實現...

關於深度學習初步認識

對於某類任務 task,簡稱t 和某項效能評價準則 performance,簡稱p 如果乙個電腦程式在t上,以p作為效能的度量,隨著很多經驗 experience,簡稱e 不斷自我完善,那麼我們稱這個電腦程式在從經驗e中學習了 1 感知機部分 可以看到,乙個感知器有如下組成部分 1 輸入權值 乙個感...

關於深度學習的幾個問題

機器學習 監督學習 有資料有標籤的 非監督學習 只有資料,沒有標籤。半監督學習 用少量有標籤樣本和大量沒標籤樣本 強化學習 從經驗中總結提公升 遺傳演算法 適者生存,不適者淘汰。神經網路 卷積神經網路nn 迴圈神經網路rnn,lstm 長短期記憶,最流行的rnn技術之一。自編碼autoencodin...