DeepLearning深度學習總結

2021-03-03 21:16:56 字數 4563 閱讀 6706

一、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 ***work

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

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

deep learning本身算是machine learning的乙個分支,簡單可以理解為neural ***work的發展。大約二三十年前,neural ***work曾經是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 ***work(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過程。

四、deep learning的常用模型或者方法

4.1、autoencoder自動編碼器

deep learning最簡單的一種方法是利用人工神經網路的特點,人工神經網路(ann)本身就是具有層次結構的系統,如果給定乙個神經網路,我們假設其輸出與輸入是相同的,然後訓練調整其引數,得到每一層中的權重。自然地,我們就得到了輸入i的幾種不同表示(每一層代表一種表示),這些表示就是特徵。自動編碼器就是一種盡可能復現輸入訊號的神經網路。

為了實現這種復現,自動編碼器就必須捕捉可以代表輸入資料的最重要的因素,就像pca那樣,找到可以代表原資訊的主要成分。

具體過程簡單的說明如下:

1)給定無標籤資料,用非監督學習學習特徵:

在我們之前的神經網路中,如第乙個圖,我們輸入的樣本是有標籤的,即(input, target),這樣我們根據當前輸出和target(label)之間的差去改變前面各層的引數,直到收斂。但現在我們只有無標籤資料,也就是右邊的圖。那麼這個誤差怎麼得到呢?

如上圖,我們將input輸入乙個encoder編碼器,就會得到乙個code,這個code也就是輸入的乙個表示,那麼我們怎麼知道這個code表示的就是input呢?我們加乙個decoder解碼器,這時候decoder就會輸出乙個資訊,那麼如果輸出的這個資訊和一開始的輸入訊號input是很像的(理想情況下就是一樣的),那很明顯,我們就有理由相信這個code是靠譜的。所以,我們就通過調整encoder和decoder的引數,使得重構誤差最小,這時候我們就得到了輸入input訊號的第乙個表示了,也就是編碼code了。

因為是無標籤資料,所以誤差的**就是直接重構後與原輸入相比得到。

2)通過編碼器產生特徵,然後訓練下一層。這樣逐層訓練:

那上面我們就得到第一層的code,我們的重構誤差最小讓我們相信這個code就是原輸入訊號的良好表達了,或者牽強點說,它和原訊號是一模一樣的(表達不一樣,反映的是乙個東西)。那第二層和第一層的訓練方式就沒有差別了,我們將第一層輸出的code當成第二層的輸入訊號,同樣最小化重構誤差,就會得到第二層的引數,並且得到第二層輸入的code,也就是原輸入資訊的第二個表達了。其他層就同樣的方法炮製就行了(訓練這一層,前面層的引數都是固定的,並且他們的decoder已經沒用了,都不需要了)。

設計深度規範

重慶市建築裝飾設計深度規範 框架草稿 1.總則 主要適用於家庭裝修之外的公共裝飾,家裝參照 2 術語 3.一般規定 4 圖例 圖序 5 圖樣畫法 平面圖立面圖 剖面圖節點大樣圖 其他規定 尺寸標註 6 方案設計 方案設計階段,裝修設計檔案應包括如下內容 6.1 封面 寫明專案名稱 編制單位 暗標例外...

總圖深度要求

1 技術經濟指標和配套建築一覽表是否與規劃要求一致。2 基地的外圍尺寸,周圍道路的名稱 紅線寬度 場地標高是否標註 指北針是 否表示,大小是否符合比例 直徑24mm 並以漢字 北 表示,不得以其他 文字表示。3 是否標識場地界線 道路紅線 建築退線 建築控制線 綠線等,是否以引 出線加文字或圖例標識...

汽車深度養護

積碳對進氣量的影響 破壞進氣支管內的光滑度,阻礙氣體的流動性,降低氣體的流動速度,降低進入燃燒室的空氣數量,導致發動機功率下降。積碳對爆燃及火花塞的影響 積碳提高了實際壓縮比,容易引起爆燃,造成發動機過熱,汽缸蓋,冷卻水,潤滑油溫度上公升 積碳使火花塞發出的電火花比較微弱。積碳對三元催化的影響 使三...