机器学习三要素之数据、模型、算法
參考:https://gitbook.cn/gitchat/column/5ad70dea9a722231b25ddbf8/topic/5b1086eccad6fe44db4c1268
1. 機器學習與人腦映射關系
我們自己用來判斷萬事萬物的“觀點”、“看法”、“洞察”,實際上都是我們頭腦中一個個“模型”對所聞所見(輸入數據)進行“預測”的結果。這些模型自身的質量,直接導致了預測結果的合理性。
從機器學習認識客觀規律的過程中,我們可以知道,模型是由數據和算法決定的。對應到人腦,數據是我們經歷和見過的萬事萬物,而算法則是我們的思辨能力。
2. 學原理和公式推導的意義
- 不同模型的特質、適用場景,對當前數據的匹配程度;
- 不同算法對算力和時間的消耗;
- 不同框架對軟硬件的需求和并行化的力度;
- 評判模型性能的指標有哪些,如何計算?
- 正在使用的模型是怎么工作的?
- 這些超參數是什么含義,調整它們會產生哪些影響?
- 特征選取有哪些原則、方法可運用?
真正創造價值的,從來都是解決實際問題的人。
但對于理論知識扎實的機器學習工程師來說,他們完全有可能針對具體業務問題,構造出目標函數,甚至開發出符合自身軟硬件資源特點的求解算法。
作者強烈建議:即使目標崗位是“深度學習工程師”,也應該從統計學習方法學起。
一方面深度學習與機器學習具有傳承的關系,學習后者對于直觀理解前者有極大幫助。
另一方面,統計學習方法建立在將概念“數字化”(向量化)的基礎上,以數學公式和計算來表達概念之間的關聯及轉化關系。機器學習是一種認識世界的工具,借助它,我們可以從一個新的角度來看待世間萬物。
換句話說,當我們知道機器是怎樣通過學習事物特征的概率分布和轉換來掌握事物規律的時候,我們就有可能反過來審視自己看待世界的方法,發現其中不合理的部分,并主動優化自己的思維模型。
作者分享出來只是想說明:學習機器學習原理和公式推導,并非只是做一些無聊的數字變換。很可能由此為我們打開一扇窗,讓我們從新的角度看待世界,并為日常的思考過程提供更加可量化的方法。
3. 數據模型算法之間的聯系
機器學習三要素包括數據、模型、算法。簡單來說,這三要素之間的關系,可以用下面這幅圖來表示:
總結成一句話:算法通過在數據上進行運算產生模型。
3.1 數據
輸入給計算機的圖片或者視頻是原始數據,由于計算機只能處理數值,而不是圖片或者文字。所以我們就需要構建一個向量空間模型( Vector Space Model ,VSM)。 VSM 負責將格式(文字、圖片、音頻、視頻)轉化為一個個向量。然后開發者把這些轉換成的向量輸入給機器學習程序,數據才能夠得到處理。
3.1.1 無標注數據
比如圖2小馬寶莉中的6為女主角,我們要給她們做聚類,而且已經知道了,要用她們的兩個特征來做聚類,這兩個特征就是:獨角和翅膀。
那么我們就可以定義一個二維的向量 A=[a_1,a_2]。a_1 表示是否有獨角,有則 a_1 = 1, 否則 a_1 = 0。而 a_2 表示是否有翅膀。
那么按照這個定義,我們的6匹小馬最終就會被轉化為下面6個向量:
X_1 = [1,0]X_2 = [0,0]X_3 = [0,0]X_4 = [0,1]X_5 = [0,1]X_6 = [1,0]
這樣,計算機就可以對數據 X_1,……,X_6 進行處理了。這6個向量也就叫做這份數據的特征向量(Feature Vector)。
3.1.2 有標注數據
數據標注簡單而言就是給訓練樣本打標簽。這個標簽是依據我們的具體需要給樣本打上的。
比如,我們要給一系列圖標做標注,所有圖片分為兩類:“貓”或者“不是貓”。那么就可以標注成下圖這樣:
我們把樣本的標簽用變量 y 表示,一般情況下,y 都是一個離散的標量值。
標注數據當然也要提取出特征向量 X。每一個標注樣本既有無標注樣本擁有的 X,同時還比無標注樣本多了一個 y。 例如:
我們用三維特征向量 X 表示老鼠分類器的源數據,每一維分別對應“耳朵是圓的”、“有細長尾巴”、“是尖鼻子”。同時用一個整型值 y 來表示是否為老鼠,是的話 y=1,否則 y=0。
那么圖1老鼠和其他動物對應的數據就是這樣的:
X_1 = [1,1,1]; y = 1X_2 = [1,1,1]; y = 1X_3 = [1,1,1]; y = 1X_4 = [1,1,1]; y = 1X_5 = [1,1,1]; y = 1X_6 = [0,1,1]; y = 0X_7 = [0,0,0]; y = 0X_8 = [0,1,0]; y = 0X_9 = [0,0,1]; y = 0
在數據轉換到 VSM 之后,機器學習程序要做的就是把它交給算法,通過運算獲得模型。
大家已經看到了,我們之所以能把具體的一系列童話人物轉化為2維或者3維的向量,是因為我們已經確定了對某些人物用哪些特征。
這里其實有兩步:
- 確定用哪些特征來表示數據;
- 確定用什么方式表達這些特征。
這兩步做的事情就叫做特征工程。有了特征工程,才有下一步的 VSM 轉換。
3.2 模型
3.2.1 模型概念
模型是機器學習的結果,這個學習過程,稱為訓練( Train )。
一個已經訓練好的模型,可以被理解成一個函數: y=f(x) 。我們把數據(對應其中的 x)輸入進去,得到輸出結果(對應其中的 y)。
這個輸出結果可能是一個數值(回歸),也可能是一個標簽(分類),它會告訴我們一些事情。
比如,我們用老鼠和非老鼠數據訓練出了老鼠分類器。這個分類器就是分類模型,它其實是一個函數。
3.2.2 模型來源
模型是基于數據,經由訓練得到的。訓練又是怎么回事?
模型是函數: y=f(x) , x 是其中的自變量, y 是因變量。從 x 計算出 y 要看 f(x) 的具體形式是什么,它有哪些參數,這些參數的值都是什么。
在開始訓練的時候,我們有一些樣本數據。如果是標注數據,這些樣本本身既有自變量 x (特征)也有因變量 y (預期結果)。否則就只有自變量 x 。對應于 y=f(x) 中的 x 和 y 取值實例。
這個時候,因為已經選定了模型類型,我們已經知道了 f(x) 的形制,比如是一個線性模型 y=f(x)=ax+bx+c ,但卻不知道里面的參數 a 、 b 、 c 的值。
**訓練 **就是:根據已經被指定的 f(x) 的具體形式——模型類型,結合訓練數據,計算出其中各個參數的具體取值的過程。
訓練過程需要依據某種章法進行運算。這個章法,就是算法。
3.3 算法
有監督和無監督學習的算法差別甚大。因為我們在日常中主要應用的還是有監督學習模型,所以就先以此為重點,進行講解。
有監督學習的目標就是:讓訓練數據的所有 x 經過 f(x) 計算后,獲得的 y’ 與它們原本對應的 y 的差別盡量小。
我們需要用一個函數來描述 y’ 與 y 之間的差別,這個函數叫做損失函數( Loss Function ) L(y, y’)= L(y, f(x)) 。
Loss 函數針對一個訓練數據,對于所有的訓練數據,我們用代價函數( Cost Function )來描述整體的損失。
代價函數一般寫作: J ( theta )——注意,代價函數的自變量不再是 y 和 f(x) ,而是變成了 theta , theta 表示 f(x) 中所有待定的參數( theta 也可以是一個向量,每個維度表示一個具體的參數)!
至此,我們終于得到了一個關于我們真正要求取的變量( theta )的函數。而同時,既然 J(theta) 被稱為代價函數,顧名思義,它的取值代表了整個模型付出的代價,這個代價自然是越小越好。
因此,我們也就有了學習的目標(也稱為目標函數): argmin J(theta) —— 最小化 J(theta) 。
能夠讓 J(theta) 達到最小的 theta ,就是最好的 theta 。當找到最好的 theta 之后,我們把它帶入到原 f(x) ,使得 f(x) 成為一個完整的 x 的函數,也就是最終的模型函數。
怎么能夠找到讓 J(theta) 最小的 theta 呢?這就需要用到優化算法了。
具體的優化算法有很多,比如:梯度下降法( Gradient Descent )、共軛梯度法( Conjugate Gradient )、牛頓法和擬牛頓法、模擬退火法( Simulated Annealing ) 等等。
在這里需要強調一點:要得到高質量的模型,算法很重要,但往往(尤其是在應用經典模型時)更重要的是數據。
有監督學習需要標注數據。因此,在進入訓練階段前必須要經過一個步驟:人工標注。標注的過程繁瑣且工作量頗大,卻無法避免。
人工標注的過程看似簡單,但實際上,標注策略和質量對最終生成模型的質量有直接影響。
往往能夠決定有監督模型質量的,不是高深的算法和精密的模型,而是高質量的標注數據。
總結
以上是生活随笔為你收集整理的机器学习三要素之数据、模型、算法的全部內容,希望文章能夠幫你解決所遇到的問題。