無監(jiān)督學(xué)習(xí)是沒有任何的數(shù)據(jù)標(biāo)注,只有數(shù)據(jù)本身。無監(jiān)督學(xué)習(xí)解決的主要是“聚類(Clustering)”問題,那它的算法模型有哪幾種?
在上一篇筆記里我們簡單地學(xué)習(xí)了監(jiān)督學(xué)習(xí)的幾種算法模型,今天就來學(xué)習(xí)一下無監(jiān)督學(xué)習(xí)的基本概念和相應(yīng)的幾種算法模型。
無監(jiān)督學(xué)習(xí)(Unsupervised Learning)是和監(jiān)督學(xué)習(xí)相對的另一種主流機(jī)器學(xué)習(xí)的方法,我們知道監(jiān)督學(xué)習(xí)解決的是“分類”和“回歸”問題,而無監(jiān)督學(xué)習(xí)解決的主要是“聚類(Clustering)”問題。
監(jiān)督學(xué)習(xí)通過對數(shù)據(jù)進(jìn)行標(biāo)注,來讓機(jī)器學(xué)習(xí)到,比如:小曹多重多高就是胖紙,或者用身高體重等數(shù)據(jù),來計算得到小曹的BMI系數(shù);而無監(jiān)督學(xué)習(xí)則沒有任何的數(shù)據(jù)標(biāo)注(超過多高算高,超過多重算胖),只有數(shù)據(jù)本身。
比如:有一大群人,知道他們的身高體重,但是我們不告訴機(jī)器“胖”和“瘦”的評判標(biāo)準(zhǔn),聚類就是讓機(jī)器根據(jù)數(shù)據(jù)間的相似度,把這些人分成幾個類別。
那它是怎么實現(xiàn)的呢?怎么才能判斷哪些數(shù)據(jù)屬于一類呢?
這是幾種常見的主要用于無監(jiān)督學(xué)習(xí)的算法。
- K均值(K-Means)算法;
- 自編碼器(Auto-Encoder);
- 主成分分析(Principal Component Analysis)。
K均值算法
K均值算法有這么幾步:
- 隨機(jī)的選取K個中心點,代表K個類別;
- 計算N個樣本點和K個中心點之間的歐氏距離;
- 將每個樣本點劃分到最近的(歐氏距離最小的)中心點類別中——迭代1;
- 計算每個類別中樣本點的均值,得到K個均值,將K個均值作為新的中心點——迭代2;
- 重復(fù)234;
- 得到收斂后的K個中心點(中心點不再變化)——迭代4。
上面提到的歐氏距離(Euclidean Distance),又叫歐幾里得距離,表示歐幾里得空間中兩點間的距離。我們初中學(xué)過的坐標(biāo)系,就是二維的歐幾里得空間,歐氏距離就是兩點間的距離,三維同理,多維空間的計算方式和三維二維相同。
舉栗子:
我們現(xiàn)在有三組身高體重數(shù)據(jù)180kg、180cm,120kg、160cm和90kg、140cm,提問:這三個人里,哪兩個人的身材比較相近呢?
這三組數(shù)據(jù)可以表示為A(180,180),B(120,160)和C(90,140),這就是我們很熟悉的平面直角坐標(biāo)系里的三個點,他們之間的距離大家都知道算。
從結(jié)果可以看到Bc間的距離最小,也就是Bc的身材最相似。我們再增加一個維度,腰圍,分別是100cm、120cm和140cm(隨便編的不要當(dāng)真),那現(xiàn)在這三組數(shù)據(jù)可以表示為A(180,180,100),B(120,160,120)和C(90,140,140),這就變成了我們高中學(xué)過的空間直角坐標(biāo)系里的三個點,要計算它們之間的距離也很簡單。
現(xiàn)在還是Bc的身材最相似,如果我們增加N個維度,數(shù)據(jù)就可以用(X?,X?,X?,…..,Xn)和(Y?,Y?,Y?,…..,Yn)來表示,他們之間的距離就是
K均值算法里樣本點到中心點的距離就是這么計算的,這個用空間點,來表示數(shù)據(jù)的思想,在機(jī)器學(xué)習(xí)領(lǐng)域是非常常見和重要的,以后還會經(jīng)常見到。值得注意的是:雖然K近鄰算法和K均值算法沒有什么關(guān)系,但是它們的思想有想通之處,并且原始模型實際使用起來計算起來都比較慢。
自編碼器
自編碼器(Auto-encoder)(其實相當(dāng)于一個神經(jīng)網(wǎng)絡(luò),但這里不用神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)來解讀)做的事情很有意思,它的基本思想就是對輸入(input)編碼(encode)后得到一個隱含的表征再解碼(decode)并輸出(output),這么看起來不是在繞圈圈嗎?
如果說我們的自編碼器只是為了得到一個和輸入一模一樣的輸出,那我們的行為確實沒什么用,但是細(xì)心的胖友,你們覺得這張圖里什么是關(guān)鍵呢?
對了,是中間的隱含表征(latent representation)!
自編碼器的兩個主要應(yīng)用是降噪(denoising)和稀疏化數(shù)據(jù)(sparse)。
什么叫降噪和降維呢?
讓我們用這張圖來理解,圖中有三層,輸入、隱含和輸出層,每一層的么一個圈圈代表一個特征。輸入層經(jīng)過編碼變成了中間的隱含層,隱含層解碼后得到后面的輸出層??梢钥吹?,隱含層只有輸入層的一半,原本的6個特征變成了3個特征,這意味著什么?
又到了舉栗子的時間:
如果要來表示小明的身材,輸入的六個特征分別為“肉多”、“體脂率高”、“質(zhì)量大”、“個子不高”、“總是心情好”、“喜歡笑”而隱含層的三個特征為“肉多”、“體脂率高”、“個子不高”,這個自編碼器就是用來降噪的。
噪音(noise)指的是影響我們算法模型的不相關(guān)因素;降噪呢,就是用特定的方法去掉這些不相關(guān)的因素。
如果要來表示小明的主要特征,輸入的六個特征還是“肉多”、“體脂率高”、“質(zhì)量大”、“個子不高”、“心情好”、“喜歡看劇”而隱含層的特征變成了“胖”、“矮”和“開朗”,這個自編碼器就是稀疏自編碼器。
稀疏化數(shù)據(jù),就是指將密集的淺層含義的數(shù)據(jù)(比如說:肉多這樣的外在表現(xiàn))表示為稀疏的更抽象的數(shù)據(jù)(將外在表現(xiàn)提煉為總結(jié)性的特征,比如:胖)。
完成上述兩個任務(wù),都需要構(gòu)建合適的損失函數(shù)(loss function)(了解一下)。
(后面的依據(jù)個人興趣選擇是否閱讀)
隱含層的層數(shù)是可以增加的,每一層都可以作為我們需要的特征,多層的結(jié)構(gòu)能夠讓自編碼器對特征的分析更加準(zhǔn)確和穩(wěn)定,而如果這個層數(shù)再增加一些(很多很多很多層)。
(省略了后面的解碼步驟)
它就是堆疊/卷積自編碼器(Convolution autoencoder),可以說是一種卷積神經(jīng)網(wǎng)絡(luò)(Convolutional neural network,CNN),更多的關(guān)于神經(jīng)網(wǎng)絡(luò)的知識會在后面詳細(xì)說。
而回到最開始的圖,我們剛才一直在說的是隱含層的意義和變化,那最后的輸出一點用都沒有嗎?
這里不得不提一下生成式對抗網(wǎng)絡(luò)(Generative adversarial networks,GAN)。
生成式對抗網(wǎng)絡(luò)的精髓就是兩個網(wǎng)絡(luò),一個網(wǎng)絡(luò)生成圖片,一個網(wǎng)絡(luò)辨別圖片是不是真實的,當(dāng)生成圖片的網(wǎng)絡(luò)能夠“欺騙”識別圖片的網(wǎng)絡(luò)的時候,我們就得到了一個能夠生成足夠真實圖片的網(wǎng)絡(luò)。
這是一個很有趣的模型,機(jī)器根據(jù)已有的實物創(chuàng)造了實際中不存在的事物,下圖是從真實圖片轉(zhuǎn)化為生成圖片的過程。
這個思想能夠?qū)崿F(xiàn)一些很神奇的事情,比如:將文字變成圖像,用對抗網(wǎng)絡(luò)來構(gòu)造藥品和疾病的對抗等(https://www.jiqizhixin.com/articles/2017-08-23-6)
而對抗自編碼器(Adversarial Autoencoder,AAE) ,使用了最近提出的生成對抗網(wǎng)絡(luò)(GAN),通過任意先驗分布與VAE隱藏代碼向量的聚合后驗匹配,來實現(xiàn)變分推理。
簡單地說,就是它把GAN和自編碼器組合成了一個具有生成能力的模型,也就是對抗自編碼器。AAE能夠在監(jiān)督、無監(jiān)督的條件下,都展現(xiàn)出不錯的識別和生成能力。由于相關(guān)資料和文獻(xiàn)不算很多,我也沒有很清楚它的具體應(yīng)用場景,這里就不做過多的解讀了,歡迎大家給出一些指點。
主成分分析
主成分分析(Principal Component Analysis)是一種數(shù)據(jù)降維的方法,我們可以簡單地把數(shù)據(jù)降維和稀疏化數(shù)據(jù)當(dāng)成一個意思來理解(還是有區(qū)別的)。
從數(shù)學(xué)的視角來看,二維平面中的主成分分析,就是用最大方差法將坐標(biāo)系里分布的點投影到同一條線上(一維的);三維空間中的主成分分析,就是同理將空間中的分布點投影到同一個(超)平面上。
最大方差法不做過多解釋(要擺公式),但我們知道方差是表示一組數(shù)據(jù)間差異大小的,方差最大就保證了數(shù)據(jù)的間隔足夠大,這也就意味著數(shù)據(jù)在降維后不容易發(fā)生重疊。比如:上面的圖,我們會用F?而不是F?。
其實在實際應(yīng)用中主成分分析主要是數(shù)學(xué)方法,但是為了幫助理解還是打個比方。
上文中提到的身材的特征的稀疏化,表達(dá)其實就可以理解為主成分分析。顧名思義,“把主要成分提取出來分析”,就像我們在討論一個國家經(jīng)濟(jì)實力的時候,不會討論這個國家一年生產(chǎn)多少石油,出口多少商品,進(jìn)口多少原材料,國民總共又拿了多少工資。我們會用國民生產(chǎn)總值和國民人均生產(chǎn)總值,來代表上面所說的哪些零散的數(shù)據(jù),這就是主成分分析。
參考資料
K均值算法概念及其代碼實現(xiàn):https://my.oschina.net/keyven/blog/518670
歐幾里得距離:https://en.wikipedia.org/wiki/Euclidean_distance
K-means算法實現(xiàn):https://feisky.xyz/machine-learning/clustering/k-means/
自編碼器與堆疊自編碼器簡述:http://peteryuan.net/autoencoder-stacked/
對抗自編碼器:https://blog.csdn.net/shebao3333/article/details/78760580
從自編碼器到生成對抗網(wǎng)絡(luò):一文縱覽無監(jiān)督學(xué)習(xí)研究現(xiàn)狀:https://zhuanlan.zhihu.com/p/26751367
翻譯:AAE 對抗自編碼(一):https://kingsleyhsu.github.io/2017/10/10/AAE/
生成對抗網(wǎng)絡(luò)原理與應(yīng)用:GAN如何使生活更美好:https://www.jiqizhixin.com/articles/2017-08-23-6
對抗生成網(wǎng)絡(luò)詳解:https://cethik.vip/2017/01/11/deepGan/
主成分分析(PCA)-最大方差解釋:https://blog.csdn.net/huang1024rui/article/details/46662195
主成分分析(principal components analysis, PCA)——無監(jiān)督學(xué)習(xí):https://www.cnblogs.com/fuleying/p/4458439.html
圖片來源:google、個人
作者:小曹,公眾號:小曹的AI學(xué)習(xí)筆記
愛盈利-運(yùn)營小咖秀(www.jza6.com) 始終堅持研究分享移動互聯(lián)網(wǎng)App運(yùn)營推廣經(jīng)驗、策略、全案、渠道等純干貨知識內(nèi)容;是廣大App運(yùn)營從業(yè)者的知識啟蒙、成長指導(dǎo)、進(jìn)階學(xué)習(xí)的集聚平臺;
想了解更多移動互聯(lián)網(wǎng)干貨知識,請關(guān)注微信公眾號運(yùn)營小咖秀(ID: yunyingshow)
【轉(zhuǎn)載說明】  若上述素材出現(xiàn)侵權(quán),請及時聯(lián)系我們刪除及進(jìn)行處理:[email protected]