機器學習常用的算法和名詞


貪心算法
模擬退火
集束搜索
遺傳算法
魯棒性
餘弦相似度
ELM
Siamese network
k-means
協同過濾

---------------------------------------------------------------------------------------------------------------------------------------------------


1.貪心算法
貪心算法的基本思路就是從問題的某一個初始解出發一步一步地進行,根據某個優化測試,每一步都要確保可以獲得局部最優解。每一步只考慮一個數據,它的選取應該滿足局部最優的條件下。若下一個數據和部分最優解連在一起不再是可行解時,就不把該數據添加到部分解中,知道把所有數據枚舉完,或者不能再添加算法停止。
貪心選擇是指所求問題的整體最優解可以通過一系列局部最優的選擇,即貪心選擇來達到。這是貪心算法可行的第一個基本要素,也是貪心算法與動態規劃算法的主要區別。貪心選擇是採用從頂向下、以迭代的方法做出相繼選擇,每做一次貪心選擇就將所求問題簡化爲一個規模更小的子問題。對於一個具體問題,要確定它是否具有貪心選擇的性質,我們必須證明每一步所作的貪心選擇最終能得到問題的最優解。通常可以首先證明問題的一個整體最優解,是從貪心選擇開始的,而且作了貪心選擇後,原問題簡化爲一個規模更小的類似子問題。然後,用數學歸納法證明,通過每一步貪心選擇,最終可得到問題的一個整體最優解。
值得注意的是,貪心算法並不是在任何問題中可以使用,貪心策略一旦經過證明成立後,它就是一種高效的算法。貪心算法還是很常見的算法之一,這是由於它簡單易行,構造貪心策略不是很困難。可惜的是,它需要證明後才能真正運用到題目的算法中。一般來說,貪心算法的證明圍繞着:整個問題的最優解一定由在貪心策略中存在的子問題的最優解得來的。
在這裏插入圖片描述
2.模擬退火
模擬退火其實也是一種Greedy算法,但是它的搜索過程引入了隨機因素。模擬退火算法以一定的概率來接受一個比當前解要差的解,因此有可能會跳出這個局部的最優解,達到全局的最優解。以上圖爲例,模擬退火算法在搜索到局部最優解B後,會以一定的概率接受向右繼續移動。也許經過幾次這樣的不是局部最優的移動後會到達B 和C之間的峯點,於是就跳出了局部最小值B。
3.集束搜索
集束搜索又名定向搜索,是一種啓發式圖搜索算法,通常用在圖的解空間比較大的情況下,爲了減少搜索所佔用的空間和時間,在每一步深度擴展的時候,剪掉一些質量比較差的結點,保留下一些質量較高的結點。這樣減少了空間消耗,並提高了時間效率。
使用廣度優先策略建立搜索樹,在樹的每一層,按照啓發代價對節點進行排序,然後僅留下預先確定的個數(Beam Width-集束寬度)的節點,僅這些節點在下一層次繼續擴展,其他節點就被剪掉了。
4.遺傳算法-Genetic Algorithm
遺傳算法是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。遺傳算法是從代表問題可能潛在的解集的一個種羣開始的,而一個種羣則由經過基因編碼的一定數目的個體組成。每個個體實際上是染色體帶有特徵的實體。染色體作爲遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭髮的特徵是由染色體中控制這一特徵的某種基因組合決定的。因此,在一開始需要實現從表現型到基因型的映射即編碼工作。由於仿照基因編碼的工作很複雜,我們往往進行簡化,如二進制編碼,初代種羣產生之後,按照適者生存和優勝劣汰的原理,逐代演化產生出越來越好的近似解,在每一代,根據問題域中個體的適應度大小選擇個體,並藉助於自然遺傳學的遺傳算子進行組合交叉和變異,產生出代表新的解集的種羣。這個過程將導致種羣像自然進化一樣的後生代種羣比前代更加適應於環境,末代種羣中的最優個體經過解碼,可以作爲問題近似最優解。

魯棒性
魯棒是Robust的音譯,也就是健壯和強壯的意思。它也是在異常和危險情況下系統生存的能力。比如說,計算機軟件在輸入錯誤、磁盤故障、網絡過載或有意攻擊情況下,能否不死機、不崩潰,就是該軟件的魯棒性。所謂“魯棒性”,也是指控制系統在一定(結構,大小)的參數攝動下,維持其它某些性能的特性。根據對性能的不同定義,可分爲穩定魯棒性和性能魯棒性。以閉環系統的魯棒性作爲目標設計得到的固定控制器稱爲魯棒控制器。


餘弦相似度
兩個向量間的餘弦值可以通過使用歐幾里得點積公式求出:

給定兩個屬性向量,A和B,其餘弦相似性θ由點積和向量長度給出,如下所示:

這裏的分別代表向量A和B的各分量。
給出的相似性範圍從-1到1:-1意味着兩個向量指向的方向正好截然相反,1表示它們的指向是完全相同的,0通常表示它們之間是獨立的,而在這之間的值則表示中間的相似性或相異性。
對於文本匹配,屬性向量A和B通常是文檔中的詞頻向量。餘弦相似性,可以被看作是在比較過程中把文件長度正規化的方法。
在信息檢索的情況下,由於一個詞的頻率(TF-IDF權)不能爲負數,所以這兩個文檔的餘弦相似性範圍從0到1。並且,兩個詞的頻率向量之間的角度不能大於90°。


ELM(Extreme Learning Machine, ELM)
在這裏插入圖片描述

極限學習機或“超限學習機”是一類基於前饋神經網絡(Feedforward Neuron Network, FNN)構建的機器學習系統或方法,適用於監督學習和非監督學習問題 。
ELM在研究中被視爲一類特殊的FNN,或對FNN及其反向傳播算法的改進,其特點是隱含層節點的權重爲隨機或人爲給定的,且不需要更新,學習過程僅計算輸出權重 。
傳統的ELM具有單隱含層,在與其它淺層學習系統,例如單層感知機(single layer perceptron)和支持向量機(Support Vector Machine, SVM)相比較時,被認爲在學習速率和泛化能力方面可能具有優勢 [2] 。ELM的一些改進版本通過引入自編碼器構築或堆疊隱含層獲得了深度結構,能夠進行表徵學習 。
ELM的應用包括計算機視覺和生物信息學,也被應用於一些地球科學、環境科學中的迴歸問題

import numpy as np
import matplotlib.pyplot as plt
 
def sigmoid(a, b, x):
   '''
   定義Sigmoid函數: g(z) = 1/(1+e^-(ax+b))
   '''
   return 1.0/(1+np.exp(-1.0*(x.dot(a)+b)))
    
def ELM_prototype(X, T, C, n, L):
   '''
   迴歸問題的ELM標準算法
   變量:X - 輸入數據;樣本數x特徵數(N*n)
          :H - 輸出矩陣;樣本數x隱含層節點數(N*L)
          :T - 學習目標;樣本數x輸出層節點數(N*M)
          :C - 正則化係數
   '''
   # 隨機初始化
   a = np.random.normal(0, 1, (n, L))
   b = np.random.normal(0, 1)
   # 使用特徵映射求解輸出矩陣
   H = sigmoid(a, b, X)
   # 計算輸出權重和輸出函數
   HH = H.T.dot(H); HT = H.T.dot(T)
   beta = np.linalg.pinv(HH+np.identity(L)/C).dot(HT)
   Fl = H.dot(beta)
   # 返回計算結果
   return beta, Fl
# 測試:構造輸入值和訓練目標(輸入變量n=2; 輸出變量m=1)
x1 = np.linspace(1, 20, 150)
x2 = np.linspace(-5, 5, 150)
X = np.vstack([x1, x2]).T
T = np.sin(x1*x2/(2*np.pi))+np.random.normal(0, 0.2, 150)
# 使用ELM算法進行學習(隱含層節點數L=100; 正則化參數C=1e5)
beta, Fl = ELM_prototype(X, T, C=1e5, n=2, L=100)
# 繪製學習結果
plt.plot(x1, T, lw=1.5, label='Training goal')
plt.plot(x1, Fl, lw=3, label='ELM output')
plt.legend()

Siamese network
孿生神經網絡
簡單來說,Siamese network就是“連體的神經網絡”,神經網絡的“連體”是通過共享權值來實現的,如下圖所示。
在這裏插入圖片描述
左右兩邊的神經網絡相同,可以分析兩個輸入的相似度,例如,在兩邊已經訓練好了的人臉識別網絡中,輸入兩張人物的圖片,就可以判斷輸入的兩個人物是否爲同一個人
應用
nlp(自然語言處理)&cv領域都有很多應用。
1)前面提到的詞彙的語義相似度分析,QA中question和answer的匹配,簽名/人臉驗證。
2)手寫體識別也可以用siamese network,網上已有github代碼。
3)kaggle上Quora的question pair的比賽,即判斷兩個提問是不是同一問題,冠軍隊伍用的就是n多特徵+Siamese network,知乎團隊也可以拿這個模型去把玩一下。
在圖像上,基於Siamese網絡的視覺跟蹤算法也已經成爲熱點《Fully-convolutional siamese networks for object tracking》。

若兩邊的神經網絡不一樣,則被稱爲僞孿生神經網絡-pseudo-siamese network


k-means(k-means clustering algorithm)
k均值聚類算法是一種迭代求解的聚類分析算法,其步驟是隨機選取K個對象作爲初始的聚類中心,然後計算每個對象與各個種子聚類中心之間的距離,把每個對象分配給距離它最近的聚類中心。聚類中心以及分配給它們的對象就代表一個聚類。每分配一個樣本,聚類的聚類中心會根據聚類中現有的對象被重新計算。這個過程將不斷重複直到滿足某個終止條件。終止條件可以是沒有(或最小數目)對象被重新分配給不同的聚類,沒有(或最小數目)聚類中心再發生變化,誤差平方和局部最小。


協同過濾
協同過濾簡單來說是利用某興趣相投、擁有共同經驗之羣體的喜好來推薦用戶感興趣的信息,個人通過合作的機制給予信息相當程度的迴應(如評分)並記錄下來以達到過濾的目的進而幫助別人篩選信息,迴應不一定侷限於特別感興趣的,特別不感興趣信息的紀錄也相當重要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章