此文基于周莫煩大神@莫煩的視頻毒涧,文章以及各種論文以及自己的一些心得。
1.2.1 卷積神經(jīng)網(wǎng)絡(luò) CNN
卷積和神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)是近些年逐步興起的一種人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu), 因?yàn)槔镁矸e神經(jīng)網(wǎng)絡(luò)在圖像和語(yǔ)音識(shí)別方面能夠給出更優(yōu)預(yù)測(cè)結(jié)果, 這一種技術(shù)也被廣泛的傳播可應(yīng)用. 卷積神經(jīng)網(wǎng)絡(luò)最常被應(yīng)用的方面是計(jì)算機(jī)的圖像識(shí)別, 不過(guò)因?yàn)椴粩嗟貏?chuàng)新, 它也被應(yīng)用在視頻分析, 自然語(yǔ)言處理, 藥物發(fā)現(xiàn), 等等. 近期最火的 Alpha Go, 讓計(jì)算機(jī)看懂圍棋, 同樣也是有運(yùn)用到這門技術(shù).
我們來(lái)具體說(shuō)說(shuō)卷積神經(jīng)網(wǎng)絡(luò)是如何運(yùn)作的吧, 舉一個(gè)識(shí)別圖片的例子, 我們知道神經(jīng)網(wǎng)絡(luò)是由一連串的神經(jīng)層組成,每一層神經(jīng)層里面有存在有很多的神經(jīng)元. 這些神經(jīng)元就是神經(jīng)網(wǎng)絡(luò)識(shí)別事物的關(guān)鍵. 每一種神經(jīng)網(wǎng)絡(luò)都會(huì)有輸入輸出值, 當(dāng)輸入值是圖片的時(shí)候, 實(shí)際上輸入神經(jīng)網(wǎng)絡(luò)的并不是那些色彩繽紛的圖案,而是一堆堆的數(shù)字. 就比如說(shuō)這個(gè). 當(dāng)神經(jīng)網(wǎng)絡(luò)需要處理這么多輸入信息的時(shí)候, 也就是卷積神經(jīng)網(wǎng)絡(luò)就可以發(fā)揮它的優(yōu)勢(shì)的時(shí)候了. 那什么是卷積神經(jīng)網(wǎng)絡(luò)呢?
我們先把卷積神經(jīng)網(wǎng)絡(luò)這個(gè)詞拆開來(lái)看. “卷積” 和 “神經(jīng)網(wǎng)絡(luò)”. 卷積也就是說(shuō)神經(jīng)網(wǎng)絡(luò)不再是對(duì)每個(gè)像素的輸入信息做處理了,而是圖片上每一小塊像素區(qū)域進(jìn)行處理, 這種做法加強(qiáng)了圖片信息的連續(xù)性. 使得神經(jīng)網(wǎng)絡(luò)能看到圖形, 而非一個(gè)點(diǎn). 這種做法同時(shí)也加深了神經(jīng)網(wǎng)絡(luò)對(duì)圖片的理解. 具體來(lái)說(shuō), 卷積神經(jīng)網(wǎng)絡(luò)有一個(gè)批量過(guò)濾器, 持續(xù)不斷的在圖片上滾動(dòng)收集圖片里的信息,每一次收集的時(shí)候都只是收集一小塊像素區(qū)域, 然后把收集來(lái)的信息進(jìn)行整理, 這時(shí)候整理出來(lái)的信息有了一些實(shí)際上的呈現(xiàn), 比如這時(shí)的神經(jīng)網(wǎng)絡(luò)能看到一些邊緣的圖片信息, 然后在以同樣的步驟, 用類似的批量過(guò)濾器掃過(guò)產(chǎn)生的這些邊緣信息, 神經(jīng)網(wǎng)絡(luò)從這些邊緣信息里面總結(jié)出更高層的信息結(jié)構(gòu),比如說(shuō)總結(jié)的邊緣能夠畫出眼睛,鼻子等等. 再經(jīng)過(guò)一次過(guò)濾, 臉部的信息也從這些眼睛鼻子的信息中被總結(jié)出來(lái). 最后我們?cè)侔堰@些信息套入幾層普通的全連接神經(jīng)層進(jìn)行分類, 這樣就能得到輸入的圖片能被分為哪一類的結(jié)果了.
我們截取一段 google 介紹卷積神經(jīng)網(wǎng)絡(luò)的視頻, 具體說(shuō)說(shuō)圖片是如何被卷積的. 下面是一張貓的圖片, 圖片有長(zhǎng), 寬, 高 三個(gè)參數(shù). 對(duì)! 圖片是有高度的! 這里的高指的是計(jì)算機(jī)用于產(chǎn)生顏色使用的信息. 如果是黑白照片的話, 高的單位就只有1, 如果是彩色照片, 就可能有紅綠藍(lán)三種顏色的信息, 這時(shí)的高度為3. 我們以彩色照片為例子. 過(guò)濾器就是影像中不斷移動(dòng)的東西, 他不斷在圖片收集小批小批的像素塊, 收集完所有信息后, 輸出的值, 我們可以理解成是一個(gè)高度更高,長(zhǎng)和寬更小的”圖片”. 這個(gè)圖片里就能包含一些邊緣信息. 然后以同樣的步驟再進(jìn)行多次卷積, 將圖片的長(zhǎng)寬再壓縮, 高度再增加, 就有了對(duì)輸入圖片更深的理解. 將壓縮,增高的信息嵌套在普通的分類神經(jīng)層上,我們就能對(duì)這種圖片進(jìn)行分類了.
池化
研究發(fā)現(xiàn), 在每一次卷積的時(shí)候, 神經(jīng)層可能會(huì)無(wú)意地丟失一些信息. 這時(shí), 池化 (pooling) 就可以很好地解決這一問題. 也就是說(shuō)在卷集的時(shí)候, 我們不壓縮長(zhǎng)寬, 盡量地保留更多信息, 壓縮的工作就交給池化了,這樣的一項(xiàng)附加工作能夠很有效的提高準(zhǔn)確性. 有了這些技術(shù),我們就可以搭建一個(gè)屬于我們自己的卷積神經(jīng)網(wǎng)絡(luò)啦.
流行的CNN結(jié)構(gòu)
比較流行的一種搭建結(jié)構(gòu)是這樣, 從下到上的順序, 首先是輸入的圖片(image), 經(jīng)過(guò)一層卷積層 (convolution), 然后在用池化(pooling)方式處理卷積的信息, 這里使用的是 max pooling 的方式. 然后在經(jīng)過(guò)一次同樣的處理, 把得到的第二次處理的信息傳入兩層全連接的神經(jīng)層 (fully connected),這也是一般的兩層神經(jīng)網(wǎng)絡(luò)層,最后在接上一個(gè)分類器(classifier)進(jìn)行分類預(yù)測(cè).
1.2.2 循環(huán)神經(jīng)網(wǎng)絡(luò) RNN
序列數(shù)據(jù)
CNN的局限在于他只能接受一個(gè)指定大小的輸入,然后輸出一個(gè)指定大小的結(jié)果吧史。不僅如此吠各,這個(gè)模型還使用了指定好的層數(shù)。然而欠动,RNN的核心問題就是丹诀,它能夠讓我們操作序列數(shù)據(jù)。
你可能會(huì)想翁垂,處理序列的輸入輸出很少見铆遭,但是很重要的一點(diǎn)是,即使你的輸入是固定的沿猜,那么用RNN來(lái)訓(xùn)練也是可以的枚荣。
?我們想象現(xiàn)在有一組序列數(shù)據(jù) data 0,1,2,3. 在當(dāng)預(yù)測(cè) result0 的時(shí)候,我們基于的是 data0, 同樣在預(yù)測(cè)其他數(shù)據(jù)的時(shí)候, 我們也都只單單基于單個(gè)的數(shù)據(jù). 每次使用的神經(jīng)網(wǎng)絡(luò)都是同一個(gè) NN. 不過(guò)這些數(shù)據(jù)是有關(guān)聯(lián) 順序的 , 就像在廚房做菜, 醬料 A要比醬料 B 早放, 不然就串味了. 所以普通的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)并不能讓 NN 了解這些數(shù)據(jù)之間的關(guān)聯(lián).
處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)
那我們?nèi)绾巫寯?shù)據(jù)間的關(guān)聯(lián)也被 NN 加以分析呢? 想想我們?nèi)祟愂窃趺捶治龈鞣N事物的關(guān)聯(lián)吧, 最基本的方式,就是記住之前發(fā)生的事情. 那我們讓神經(jīng)網(wǎng)絡(luò)也具備這種記住之前發(fā)生的事的能力. 再分析 Data0 的時(shí)候, 我們把分析結(jié)果存入記憶. 然后當(dāng)分析 data1的時(shí)候, NN會(huì)產(chǎn)生新的記憶, 但是新記憶和老記憶是沒有聯(lián)系的. 我們就簡(jiǎn)單的把老記憶調(diào)用過(guò)來(lái), 一起分析. 如果繼續(xù)分析更多的有序數(shù)據(jù) , RNN就會(huì)把之前的記憶都累積起來(lái), 一起分析.
我們?cè)僦貜?fù)一遍剛才的流程, 不過(guò)這次是以加入一些數(shù)學(xué)方面的東西. 每次 RNN 運(yùn)算完之后都會(huì)產(chǎn)生一個(gè)對(duì)于當(dāng)前狀態(tài)的描述 , state. 我們用簡(jiǎn)寫 S( t) 代替, 然后這個(gè) RNN開始分析 x(t+1) , 他會(huì)根據(jù) x(t+1)產(chǎn)生s(t+1), 不過(guò)此時(shí) y(t+1) 是由 s(t) 和 s(t+1) 共同創(chuàng)造的. 所以我們通常看到的 RNN 也可以表達(dá)成這種樣子.
下面的圖能更清晰的解釋這個(gè)原理:
RNN 的運(yùn)用
RNN 的形式不單單這有這樣一種, 他的結(jié)構(gòu)形式很自由. 如果用于分類問題, 比如說(shuō)一個(gè)人說(shuō)了一句話, 這句話帶的感情色彩是積極的還是消極的. 那我們就可以用只有最后一個(gè)時(shí)間點(diǎn)輸出判斷結(jié)果的RNN.
又或者這是圖片描述 RNN, 我們只需要一個(gè) X 來(lái)代替輸入的圖片, 然后生成對(duì)圖片描述的一段話.或者是語(yǔ)言翻譯的 RNN, 給出一段英文, 然后再翻譯成中文.
有了這些不同形式的 RNN, RNN 就變得強(qiáng)大了. 有很多有趣的 RNN 應(yīng)用. 比如之前提到的, 讓 RNN 描述照片. 讓 RNN 寫學(xué)術(shù)論文, 讓 RNN 寫程序腳本, 讓 RNN 作曲. 我們一般人甚至都不能分辨這到底是不是機(jī)器寫出來(lái)的.
1.2.3 循環(huán)神經(jīng)網(wǎng)絡(luò) LSTM RNN
colah.github.io/posts/2015-08-Understanding-LSTMs/
RNN 的弊端
之前我們說(shuō)過(guò), RNN 是在有順序的數(shù)據(jù)上進(jìn)行學(xué)習(xí)的. 為了記住這些數(shù)據(jù), RNN 會(huì)像人一樣產(chǎn)生對(duì)先前發(fā)生事件的記憶. 不過(guò)一般形式的 RNN 就像一個(gè)老爺爺, 有時(shí)候比較健忘. 為什么會(huì)這樣呢?
想像現(xiàn)在有這樣一個(gè) RNN, 他的輸入值是一句話: ‘我今天要做紅燒排骨, 首先要準(zhǔn)備排骨, 然后…., 最后美味的一道菜就出鍋了’, shua ~ 說(shuō)著說(shuō)著就流口水了. 現(xiàn)在請(qǐng) RNN 來(lái)分析, 我今天做的到底是什么菜呢. RNN可能會(huì)給出“辣子雞”這個(gè)答案. 由于判斷失誤, RNN就要開始學(xué)習(xí) 這個(gè)長(zhǎng)序列 X 和 ‘紅燒排骨’ 的關(guān)系 , 而RNN需要的關(guān)鍵信息 ”紅燒排骨”卻出現(xiàn)在句子開頭,
再來(lái)看看 RNN是怎樣學(xué)習(xí)的吧. 紅燒排骨這個(gè)信息原的記憶要進(jìn)過(guò)長(zhǎng)途跋涉才能抵達(dá)最后一個(gè)時(shí)間點(diǎn). 然后我們得到誤差, 而且在 反向傳遞 得到的誤差的時(shí)候, 他在每一步都會(huì) 乘以一個(gè)自己的參數(shù) W. 如果這個(gè) W 是一個(gè)小于1 的數(shù), 比如0.9. 這個(gè)0.9 不斷乘以誤差, 誤差傳到初始時(shí)間點(diǎn)也會(huì)是一個(gè)接近于零的數(shù), 所以對(duì)于初始時(shí)刻, 誤差相當(dāng)于就消失了. 我們把這個(gè)問題叫做梯度消失或者梯度彌散 Gradient vanishing. 反之如果 W 是一個(gè)大于1 的數(shù), 比如1.1 不斷累乘, 則到最后變成了無(wú)窮大的數(shù), RNN被這無(wú)窮大的數(shù)撐死了, 這種情況我們叫做梯度爆炸, Gradient exploding. 這就是普通 RNN 沒有辦法回憶起久遠(yuǎn)記憶的原因.
LSTM(Long Short Term Memory)
LSTM 就是為了解決這個(gè)問題而誕生的. LSTM 和普通 RNN 相比, 多出了三個(gè)控制器. (輸入控制, 輸出控制, 忘記控制). 現(xiàn)在, LSTM RNN 內(nèi)部的情況是這樣.
他多了一個(gè)控制全局的記憶, 我們用粗線代替. 為了方便理解, 我們把粗線想象成電影或游戲當(dāng)中的 主線劇情. 而原本的 RNN 體系就是 分線劇情. 三個(gè)控制器都是在原始的 RNN 體系上, 我們先看 輸入方面 , 如果此時(shí)的分線劇情對(duì)于劇終結(jié)果十分重要, 輸入控制就會(huì)將這個(gè)分線劇情按重要程度 寫入主線劇情 進(jìn)行分析. 再看 忘記方面, 如果此時(shí)的分線劇情更改了我們對(duì)之前劇情的想法, 那么忘記控制就會(huì)將之前的某些主線劇情忘記, 按比例替換成現(xiàn)在的新劇情. 所以 主線劇情的更新就取決于輸入 和忘記 控制. 最后的輸出方面, 輸出控制會(huì)基于目前的主線劇情和分線劇情判斷要輸出的到底是什么.基于這些控制機(jī)制, LSTM 就像延緩記憶衰退的良藥, 可以帶來(lái)更好的結(jié)果.
更理論的論述如下:
從上圖可以看出啼肩,RNN和LSTMs的結(jié)構(gòu)大體是相同的橄妆,稍微不同的地方是重復(fù)模塊部分。取而代之RNN的一個(gè)神經(jīng)網(wǎng)絡(luò)層的是四個(gè)祈坠。
LSTM的關(guān)鍵點(diǎn)事它具有cell state.
Cell state就像一條輸送帶害碾。它能直接跑到鏈條的終端,對(duì)信息來(lái)說(shuō)赦拘,保持不變的直接從上游傳到下游事很容易的事情慌随。但是LSTM有能力將信息刪除或者添加進(jìn)入cell state.
Gate就是一種途徑去控制信息的加入或刪除。它是由sigmoid神經(jīng)元組成躺同。因?yàn)閟igmoid的輸出是在0到1之間阁猜,所以,它能衡量到底有多少的數(shù)據(jù)要進(jìn)入cell state蹋艺。1就代表讓所有的信息進(jìn)入剃袍,0就代表全都不進(jìn)去。
LSTM有三個(gè)這樣的Gate.
1. forget gate layer
對(duì)于LSTM來(lái)說(shuō)捎谨,第一步就是決定什么樣的信息我們要從cell state中舍棄民效。
它是由sigmoid神經(jīng)元組成。因?yàn)閟igmoid的輸出是在0到1之間涛救,所以畏邢,它能衡量到底有多少的數(shù)據(jù)要從cell state忘記。1就代表讓所有的信息記住州叠,0就代表全部忘記棵红。
2. input gate layer
第二步,就要決定什么樣的新信息要存在cell state當(dāng)中咧栗。這個(gè)由兩部分組成逆甜,第一部分是由sigmoid層決定什么信息我們要更新虱肄,第二部分是由tanh層生成一個(gè)新信息的向量,來(lái)加入到state當(dāng)中去交煞。
所以到目前為止咏窿,我們將老的狀態(tài)乘以ft, 也就是forget gate計(jì)算得出來(lái)多少以前的數(shù)據(jù)要留下來(lái),然后加上新的多少的數(shù)據(jù)要記住素征,即it*Ct集嵌,如下圖:
3. output gate layer
最后,我們要決定我們要輸出什么御毅。這個(gè)輸出將基于當(dāng)前的cell state根欧,但是必須是一個(gè)過(guò)濾的版本。首先端蛆,我們用sigmoid層來(lái)決定有多少的信息我們將輸出凤粗,然后,我們將cell state通過(guò)tanh層(目的是將值壓縮到-1到1之間)今豆,最后將sigmoid的輸出乘以tanh的結(jié)果就是我們最終的輸出內(nèi)容嫌拣。
總的來(lái)說(shuō),cell state是一條主線呆躲,會(huì)一直延續(xù)下去异逐,但是output gate的輸出只是作為下一層的輸入,所以稱為分線插掂。
1.2.4 RNN應(yīng)用:Character-Level Language Models
karpathy.github.io/2015/05/21/rnn-effectiveness/
我們現(xiàn)在將在一個(gè)有趣的應(yīng)用程序:這將訓(xùn)練RNN字符級(jí)語(yǔ)言模型灰瞻。也就是說(shuō),我們將給RNN一個(gè)巨大的文本塊燥筷,并要求它模擬下一個(gè)字符在給定一系列先前字符的序列中的概率分布箩祥。這將允許我們一次生成一個(gè)字符的新文本。
作為一個(gè)工作實(shí)例肆氓,假設(shè)我們只有四個(gè)可能的字母“helo”的詞匯,并且希望在訓(xùn)練序列“hello”上訓(xùn)練RNN底瓣。該訓(xùn)練序列實(shí)際上是4個(gè)單獨(dú)的訓(xùn)練樣本的來(lái)源:1.“e”的概率應(yīng)該可能給定為“h”的上下文谢揪,2.“l(fā)”應(yīng)該可能在“he”的上下文中,3 捐凭〔Ψ觯“l(fā)”也應(yīng)該是給定“hel”的上下文,最后4.“o”應(yīng)該可能給出“hell”的上下文茁肠。
具體地患民,我們將使用1-of-k編碼(即,除了在詞匯中的字符的索引處的單個(gè)字符之外的所有零)將每個(gè)字符編碼到向量中垦梆,并且一次一個(gè)地將它們饋送到RNN匹颤,使用step功能仅孩。然后我們將觀察4維輸出向量的序列(每個(gè)字符一維),我們將其解釋為RNN當(dāng)前分配給序列中下一個(gè)字符的每個(gè)字符的置信度印蓖。如圖:
例如辽慕,我們看到在第一時(shí)間步驟中,當(dāng)RNN看到字符“h”時(shí)赦肃,其分配到下一個(gè)字母是“h”的置信度為1.0溅蛉,到字母“e”是2.2,到“l(fā)”是-3.0他宛,到“o”是4.1船侧。因?yàn)樵谖覀兊挠?xùn)練數(shù)據(jù)(字符串“hello”)下一個(gè)正確的字符是“e”,我們想增加其置信度(綠色)厅各,降低所有其他字母(紅色)的置信度勺爱。類似地,我們?cè)?個(gè)時(shí)間步長(zhǎng)中的每一個(gè)都有一個(gè)期望的目標(biāo)字符讯检,我們希望網(wǎng)絡(luò)分配更大的置信度琐鲁。由于RNN完全由可微分操作組成,我們可以運(yùn)行反向傳播算法(這只是來(lái)自微積分的鏈?zhǔn)揭?guī)則的遞歸應(yīng)用)人灼,以找出在什么方向我們應(yīng)該調(diào)整每一個(gè)權(quán)重以增加正確目標(biāo)的分?jǐn)?shù)(綠色粗體數(shù)字)围段。然后,我們可以執(zhí)行參數(shù)更新投放,其在該梯度方向上微調(diào)每個(gè)重量很小的量奈泪。如果我們?cè)趨?shù)更新之后向RNN饋送相同的輸入,我們將發(fā)現(xiàn)正確字符的分?jǐn)?shù)(例如灸芳,第一時(shí)間步長(zhǎng)中的“e”)將稍高(例如2.3而不是2.2)涝桅,并且分?jǐn)?shù)不正確的字符會(huì)稍微降低。然后烙样,我們重復(fù)這個(gè)過(guò)程多次冯遂,直到網(wǎng)絡(luò)收斂,其預(yù)測(cè)最終與訓(xùn)練數(shù)據(jù)一致谒获,因?yàn)檎_的字符總是預(yù)測(cè)下一步蛤肌。
在測(cè)試時(shí),我們將一個(gè)字符饋入RNN批狱,并獲得可能接下來(lái)的字符的分布裸准。我們從這個(gè)分布中采樣,并立即喂它以獲得下一個(gè)字母赔硫。重復(fù)這個(gè)過(guò)程炒俱。
1.2.5 自編碼 Auto Encoder
壓縮與解壓
有一個(gè)神經(jīng)網(wǎng)絡(luò), 它在做的事情是接收一張圖片, 然后給它打碼, 最后再?gòu)拇虼a后的圖片中還原. 太抽象啦? 行, 我們?cè)倬唧w點(diǎn).
假設(shè)剛剛那個(gè)神經(jīng)網(wǎng)絡(luò)是這樣, 對(duì)應(yīng)上剛剛的圖片, 可以看出圖片其實(shí)是經(jīng)過(guò)了壓縮,再解壓的這一道工序. 當(dāng)壓縮的時(shí)候, 原有的圖片質(zhì)量被縮減, 解壓時(shí)用信息量小卻包含了所有關(guān)鍵信息的文件恢復(fù)出原本的圖片. 為什么要這樣做呢?
原來(lái)有時(shí)神經(jīng)網(wǎng)絡(luò)要接受大量的輸入信息, 比如輸入信息是高清圖片時(shí), 輸入信息量可能達(dá)到上千萬(wàn), 讓神經(jīng)網(wǎng)絡(luò)直接從上千萬(wàn)個(gè)信息源中學(xué)習(xí)是一件很吃力的工作. 所以, 何不壓縮一下, 提取出原圖片中的最具代表性的信息, 縮減輸入信息量, 再把縮減過(guò)后的信息放進(jìn)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí). 這樣學(xué)習(xí)起來(lái)就簡(jiǎn)單輕松了. 所以, 自編碼就能在這時(shí)發(fā)揮作用. 通過(guò)將原數(shù)據(jù)白色的X 壓縮, 解壓 成黑色的X, 然后通過(guò)對(duì)比黑白 X ,求出預(yù)測(cè)誤差, 進(jìn)行反向傳遞, 逐步提升自編碼的準(zhǔn)確性. 訓(xùn)練好的自編碼中間這一部分就是能總結(jié)原數(shù)據(jù)的精髓. 可以看出, 從頭到尾, 我們只用到了輸入數(shù)據(jù) X, 并沒有用到 X 對(duì)應(yīng)的數(shù)據(jù)標(biāo)簽, 所以也可以說(shuō)自編碼是一種非監(jiān)督學(xué)習(xí). 到了真正使用自編碼的時(shí)候. 通常只會(huì)用到自編碼前半部分.
編碼器 Encoder
這部分也叫作 encoder 編碼器. 編碼器能得到原數(shù)據(jù)的精髓, 然后我們只需要再創(chuàng)建一個(gè)小的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)這個(gè)精髓的數(shù)據(jù),不僅減少了神經(jīng)網(wǎng)絡(luò)的負(fù)擔(dān), 而且同樣能達(dá)到很好的效果.
這是一個(gè)通過(guò)自編碼整理出來(lái)的數(shù)據(jù), 他能從原數(shù)據(jù)中總結(jié)出每種類型數(shù)據(jù)的特征, 如果把這些特征類型都放在一張二維的圖片上, 每種類型都已經(jīng)被很好的用原數(shù)據(jù)的精髓區(qū)分開來(lái). 如果你了解 PCA 主成分分析, 再提取主要特征時(shí), 自編碼和它一樣,甚至超越了 PCA. 換句話說(shuō), 自編碼 可以像 PCA 一樣給特征屬性降維.