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