回覆列表
  • 1 # 小鴿子看世界

    t-SNE。

    當時我正在圖書館看一篇有關t-SNE演算法的論文,看到一半里,我脫口而出:“這TM都是誰想出來的?”真是費了老大勁兒才沒在一群陌生人面前爆粗口。

    首先,我們看一個t-SNE演算法可以解決的具體問題。我給你一組高維點,每個點都代表著一個手寫數字影象中全部畫素的灰度等級。因此,它們便構成了一個數據點:

    現在,我要求你把這些高維點變成資訊二維散點圖,每張圖代表一個手寫數字。二維散點圖必須能提供相應的資訊,也就是說必須分門別類,每張圖都必須有代表著0、1、2、……9。整個事情的難點在於,在我給你提供的高維點中,我沒有標明哪一組高維點代表哪個數字,你也不能自行標註!輸入電腦的只是一長串數字,既沒有標籤也不得提供幫助。

    試想一下,這些手寫數字影象之間的差別很可能在指數級以上,而我們需要做的是將所有可能性都轉換成二維空間,並保留不同數字之間的共性。這就好像我叫你重寫莎士比亞的作品,卻只給你5個單詞,但卻要求你保留他對愛情細緻入微的描寫。而且,你還不知道這5個單詞是什麼意思!

    現在有兩種思路可以完成這件事情。第一種思路與t-SNE演算法無關。在高維空間內,一個數字即一個流形。從本質上講,流形其實是植入高維空間的低維資料。其特徵是,同一流形上相近的幾個點看起來幾乎位於同一平面上。下圖即為嵌入三維空間的二維流形點:

    如果可以對兩張圖中的一張進行簡單的漸近式改動並最終和另一張圖完全重疊,那就說明這兩張圖很可能代表著同一個數字。分別代表2和8的兩張圖則會截然不同,因為如果你想讓兩張圖變得一致,就必須在某個階段做出非線性改動才行。就是這條簡單的、模糊不清的規則將各個用高維點組成的數字區分開來……我一開始還真是沒想到呢。

    在這個思路之下,我們又該如何製作出高度壓縮且極具代表性的散點圖呢?t-SNE演算法則透過點與點之間的距離測度將高維空間與低維空間區分開來。它開發了一種將高維點轉換成低維點的繪圖方法。利用這種方法,低維點之間的距離測度會產生出高維點之間距離測試相同的結果。根據不同的測度標準,高維空間中的各個點也會在低維空間中保持相對一致的距離。我們在高維空間運用高斯機率分佈,而在低維空間則運用t-分佈。最神奇的地方在於,當我們從高維空間轉到低維空間時,歐氏距離的變化可以透過上述測度之間的區別完全反映出來。這簡直太有用了!對不同測度結果的相似性進行最佳化可以指導我們在繪圖時精確關注資料結構,而忽視減少空間維度時產生的不必要的或無意義的變化。這麼做的結果就是,最終被選中的維度可以在不同流體之間轉換。真的嗎?誰能想到有這麼神奇的效果?我們現在正嘗試捕捉這些奇怪的流體,並試圖透過高斯分佈與t-分佈之間的關係來加以解釋。這種方法真的是太棒了。下面每個叢集都代表著一個數字:

    先別急,讓我們再理一下。首先,我們將數字表示成流體;接著,我們決定用距離測度來表示不同的空間;然後我們運用了高斯分佈和t-分佈並對繪圖方法進行了最佳化,以確保高維點和低維點能產生相似的結果。結果就是將點聚集到一起,並透過連續的小改動讓它們在高低維度之間相互轉化。真是太聰明瞭。

  • 2 # 機器之心Pro

    目前,對於演算法來講,沒有最聰明的,只有最合適的。

    在機器學習中,有個定理被稱為「沒有免費的午餐」。簡而言之,就是說沒有一個演算法可以完美解決所有問題,而且這對於監督學習(即對預測的建模)而言尤其如此。

    舉個例子,你不能說神經網路就一定任何時候都比決策樹優秀,反過來也是。這其中存在很多影響因素,比如你資料集的規模和結構。

    所以,當你使用一個固定的資料測試集來評估效能,挑選最適合演算法時,你應該針對你的問題嘗試多種不同的演算法。唯有如此,才能找到你所謂的最聰明的演算法。

    當然,你所使用的演算法必須要適合於你試圖解決的問題,這也就有了如何選擇正確的機器學習任務這一問題。做個類比,如果你需要打掃你的房子,你可能會用吸塵器、掃帚或者是拖把,但是你絕不會掏出一把鏟子然後開始挖地。

    接下來,我們要對問題進行分類,這包含兩個過程:

    根據輸入資料分類:如果資料有標籤,這就是一個監督學習問題;如果資料沒有標籤而且想找出資料的內在結構,那這就是無監督學習;如果我們想透過與環境互動來最佳化目標函式,這是強化學習。

    根據輸出結果分類:如果模型輸出結果是一個數值,這是迴歸問題;如果輸出結果是一個類別,這是分類問題;如果輸出結果是一組輸入資料,那這是聚類問題。

    更一般地說,我們可以詢問我們自己:我們的演算法要實現什麼目標,然後以此來找到正確的演算法類別。

    現在我們已經將問題進行了分類,我們就可以使用我們所掌握的工具來識別出適當且實用的演算法。

    支援向量機(SVM)可用於找到儘可能寬的分類的邊界。當兩個分類不能被清楚地分開時,該演算法會找到其所能找到的最佳邊界。其真正的亮點在於處理特徵密集的資料,比如文字或者基因組(特徵數量> 100)。在這些情況下,除了僅需要適量的記憶外,支援向量機(SVM)能夠比其它大多數演算法更快且更少過擬合地進行分類。

    人工神經網路是涵蓋二分類、多分類和迴歸問題的腦啟發式學習演算法。它們有無限的種類,包括感知器和深度學習。它們需要很長時間來訓練,但已知其在多種應用領域都實現了當前最佳的表現。

    logistic 迴歸:即便名字中有著「迴歸」,但 logistic 迴歸實際上是一種可用於二分類和多分類問題的強大工具。它快速且簡單。事實上,它使用「S」形曲線而非直線,所以它自然適合用於資料分組。logistic 迴歸可以給出線性分類邊界,所以如果你要使用它,你一定要確保你能接受線性的近似。

    決策樹和隨機森林:決策森林(decision forests)(迴歸、二分類、多分類),決策叢林(decision jungles)(二分類和多分類)和提升決策樹(boosted decision trees)(迴歸和二分類)都基於決策樹。這是一個基本的機器學習概念。決策樹有許多不同的變體,但它們都在做同樣的事情—將特徵空間(feature space)細分為具有大致相同標籤的區域。這些區域可以是一致的類別或者恆定值,具體取決於你進行的是分類還是迴歸。

    線性迴歸是將一條線(或平面、或超平面)擬合到一個數據集上。這是一種主要的工具,簡單且快速,但對於一些問題而言,它可能過於簡單。

    貝葉斯線性迴歸有著非常理想的特性:它可以避免過擬合。貝葉斯方法透過事先對答案的可能分佈做出一些假設來做到這一點。這種方法的另一個副產品是它們具有非常少的引數。

    提升決策樹迴歸(Boosted decision tree regression):如上所述,提升決策樹(迴歸和二分類)均基於決策樹,並透過將特徵空間細分為具有大致相同標籤的區域發揮效用。提升決策樹透過限制其可以細分的次數以及每個區域中所允許的最少資料點來避免過擬合。該演算法會構造一個樹的序列,其中每棵樹都會學習彌補之前的樹留下來的誤差。這能得到一個會使用大量的記憶體的非常精確的學習器。

    層次聚類(Hierarchical Clustering)的目標是構建聚類的層次結構,它有兩種形式。聚集聚類(agglomerative clustering)是一種「自下而上」的方法,其中每個觀察(observation)在其自己的聚類中開始,隨著其在層次中向上移動,成對的聚類會進行融合。分裂聚類(divisive clustering)則是一種「自上而下」的方法,其中所有的觀察都從一個聚類開始,並且會隨觀察向下的層次移動而遞迴式地分裂。整體而言,這裡的融合和分裂是以一種激進的方式確定的。層次聚類的結果通常表示成樹狀圖(dendrogram)的形式。

    k-均值聚類(k-means clustering)的目標是將 n 組觀測值分為 k 個聚類,其中每個觀測值都屬於其接近的那個均值的聚類——這些均值被用作這些聚類的原型。這會將資料空間分割成 Voronoi 單元。

    k 最近鄰(k-nearest neighbors / k-NN)是用於分類和迴歸的非引數方法。在這兩種情況下,輸入都是由特徵空間中與 k 最接近的訓練樣本組成的。在 k-NN 分類中,輸出是一個類成員。物件透過其 k 最近鄰的多數投票來分類,其中物件被分配給 k 最近鄰中最常見的類(k 為一正整數,通常較小)。在 k-NN 迴歸中,輸出為物件的屬性值。該值為其 k 最近鄰值的平均值。

    單類支援向量機(One-class SVM):使用了非線性支援向量機的一個巧妙的擴充套件,單類支援向量機可以描繪一個嚴格概述整個資料集的邊界。遠在邊界之外的任何新資料點都是非正常的,值得注意。

    以上。

  • 3 # 你看我獨角獸嗎

    客觀上沒有最聰明的演算法,但我有心目中認為最聰明的演算法——遺傳演算法

    遺傳算法理論來自於達爾文的一句名言:不是最強大、也不是最聰明的物種才能生存,而是最能對變化作出迴應的那一個。

    這套演算法本身是模擬物競天擇,適者生存的一套計算模型,是透過模擬自然進化過程搜尋最優解的方法。

    在很多地方都有適用它的地方,例如倉儲機器人、線上規劃、最最佳化問題等,最近在強化學習上也看到它的影子。

    演算法的實現有幾個步驟:

    初始化群體;

    個體評價;

    選擇運算(優勝劣汰);

    交叉運算;

    變異運算;

    得到更新後的群體。

    從宏觀講很符合我們物種進化的過程,在計算群體演變的過程中總能感覺到物種誕生的不可思議,很隨機性,但又是確定性的。

    在我心目中這才是最聰明的演算法。

  • 4 # 夢似悄然低語

    沒有最聰明的演算法,演算法的表現因不同問題而異。非要選出功能強悍的演算法,當然是最前沿的演算法,例如計算機視覺的CapsNet。人工智慧論文數量呈現爆發式增長,優秀的論文往往演算法方面具有革命性和前瞻性。個人覺得無監督學習,自監督學習更是值得研究,例如VAE,GAN等等

  • 中秋節和大豐收的關聯?
  • “王鳳姐弄權鐵檻寺”是何意?