一般化机器学习与神经网络
0
前言
機器學習的初學者很容易被各種模型搞得暈頭轉向。如果扎進各種模型的細節無法自拔的話,可能很難發現一般化的框架。
如果你覺得神經網絡是非常不同的機器學習模型,如果你覺得神經網絡的各種新名詞讓你覺得這完全就是一片新天地,那么可能你已經陷入到這些細節里啦。所以小夕希望通過本文將這些同學拔出來,重新審視一下學過的東西。
1
一般化機器學習
至此,小夕已經或多或少的講解了邏輯回歸模型、樸素貝葉斯模型、神經網絡,雖然小夕通過一系列的文章將這三個模型之間互相關聯,但是小夕一直沒有將其納入更上層的框架之下。
?
下面小夕將依次獻上:
機器學習模型的組成
機器學習模型的訓練
機器學習模型的測試/使用
?
組成
對于一個典型的機器學習模型M,其一般重點由以下三部分組成:
模型的輸入的格式,即特征向量x。
已知模型參數的情況下,將特征向量x映射成其標簽(類別)y的函數,即用來直接輸出類別或者間接輸出類別的假設函數(有時也叫打分函數(scoring)、模型函數、預測函數等)。這也是機器學習模型M的核心,有時甚至可以直接用假設函數代指一個模型。
衡量當前參數下的模型與大自然真實模型之間誤差的函數,即損失函數(loss function, 也叫代價函數(cost function))。損失函數的計算以假設函數的計算為基礎。一個模型的損失函數往往是固定的,但是也完全有可能一個模型對應著好幾個損失函數,甚至模型太過靈活,直接兼容各種損失函數(此時損失函數的選擇與數據集的結構和模型輸入x的格式有關)。
訓練
對于一個典型的機器學習模型M的訓練過程,其一般由以下4步完成:
拿到原始數據,將原始數據集通過預處理來生成m個樣本,n個維度的特征向量集X(端到端的模型中,特征向量恰好是“原始數據”)。
初始化模型M的參數(parameters)與超參數(hyperparameters),并確定一個用于尋找最優模型參數的最優化算法O。
基于全部X或部分X,利用優化算法O來最小化損失函數。這個過程要經歷N次迭代,每次迭代都會更新模型參數并且計算此時損失函數的值。記錄下每次迭代后的損失函數的值以及對應的模型參數。
從N次迭代中選出使得測試集準確率最高的那次迭代后的參數,作為模型M最終的參數,完成訓練。
對于步驟1:
需要明確x的形式,比如x包含幾部分,每一部分有多少維度;
對于步驟2:
模型的參數的初始化很可能會大大影響模型最終的精度。如果你剛開始將模型的參數扔到了坑坑洼洼的地方,那很可能迭代幾次就陷入到一個很差勁的局部最優點,極大的降低一個優秀模型的最終準確率。但是如果你剛開始將模型的參數扔到了距離馬里亞納海溝不遠的地方,那很可能收斂到全局最優點,極大的提高模型的最終準確率。
超參數包含但不限于batch的大小(batch的大小即每次求解損失函數時使用的樣本數量)、優化算法的參數(如步長)等一系列需要在第3步進行前就要固定死的參數(即如果不事前給超參數賦值,那么無法進行第3步);
對于步驟3:
運行優化算法時,優化算法的內部會計算損失函數在當前輸入(當前模型參數)處的梯度/導數,這個計算往往要用到全部的樣本x,然而當樣本集過大時,也可以只使用一部分x來近似計算梯度/導數,當然這是優化算法內部的工作啦。
另外,需要迭代的次數N取決于系統設計者,比如可以達到一個最大迭代步數后停止(因此最大迭代步數當然是個超參數),比如可以每次迭代后立刻用這次得到的參數在測試集上計算準確率,當測試集上的準確率不再提高時結束迭代;
對于步驟4:
其實測試集準確率最高的那次迭代,往往就是訓練時損失函數值下降最快的那次迭代(訓練曲線最彎的地方,如下圖紅色曲線的最高點,對應著綠色曲線最彎的地方)。
因此既可以直接計算出紅色曲線來得到真正的測試集準確度最高的迭代,在測試代價太高時也可以用綠色曲線最彎的那次迭代來近似。
?
測試/使用?
對于一個已經訓練完成的典型的機器學習模型M的測試/使用步驟:
將需要測試/處理的數據處理成模型M的輸入的格式,即特征向量x。
將特征向量x輸入到(當然是已知參數的)假設函數中,直接或間接的得到該樣本的標簽/類別。
2
神經網絡
好啦~大框架結束了。下面將神經網絡往里面丟~
小夕溫馨提示,紫色與綠色是成對出現的哦
1、整個神經網絡描述的是什么呢?
比如下面這個最傳統的前饋神經網絡是什么呢?
?
?
不過就是假設函數的可視化圖片而已啦╮(╯▽╰)╭,其中K(*)就是傳說中的激活函數,如sigmoid函數、tanh函數、ReLu函數等,不就是隱含層每個隱單元的輸出嘛~所以當然是以輸入層x為輸入啦。
只不過這個假設函數用數學表示起來比較麻煩,所以大家往往看到上面那個三層網絡會立刻想到前饋神經網絡,而看到這個假設函數就沒有前饋神經網絡的條件反射了。而大家將這個圖片直接跟前饋神經網絡掛鉤,也就說明假設函數基本就可以代表一個機器學習模型的直觀印象了。
?
2、而神經網絡中所謂的前向算法是什么呢?
前向算法做了什么呢?不就是將一個特征向量丟進模型,然后一層層往前推,一直推到輸出層出結果嘛~站在上層看這個過程的話是什么?不就是將x映射成了y嘛~是的,不過是計算了一下假設函數而已啦╮(╯▽╰)╭
?
3、而神經網絡中所謂的反向傳播算法(BP算法)是什么呢?
首先,還記不記得BP算法的最開頭要在輸出層計算一下誤差,這一步在干嘛呢?當然就是在計算損失函數啦~這個誤差就是損失函數的輸出啦~
?
然后,還記不記得各種入門視頻中千叮嚀萬囑咐的:一定要先實現和調試前向算法,再完成BP算法吶~誒為什么?這就是前面小夕講的“損失函數是基于假設函數的結果來計算的”啦~損失函數的值是BP算法的開始,那當然要在BP算法開始之前先保證可以計算前向算法(假設函數)啦。
?
再然后,那么BP算法將這個誤差往前傳播,邊傳播邊根據某種規則更新各個邊的權重,傳到了輸入層,就更新完了所有的邊的權重。這是在干嘛呢?邊的權重不就是神經網絡這個模型M的參數嘛~我們前面說基于全部或部分x,利用“什么”可以更新模型參數來??這里的“什么”就是優化算法啦~所以說,BP算法只是一種優化算法而已~(提前告訴你,本質上是一種巧妙計算梯度的梯度下降法)
?
怎么樣?看似自成一派的神經網絡也是死死卡在一般化機器學習框架里的。像邏輯回歸、SVM等就更不用說了,只不過神經網絡這個機器學習模型同時還卡上了生物模型(生物中的神經網絡),因此其有各種有趣的名字和演變,但是也不要忘記這依然是一種機器學習方法。
?
那么,其他的各種神經網絡,比如CNN、RNN甚至LSTM呢?深度神經網絡呢?難道100層的深度XXX網絡也逃不出這個框架?你試試不就知道啦( ̄? ̄)
總結
以上是生活随笔為你收集整理的一般化机器学习与神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作中如何做好技术积累
- 下一篇: Spring Cloud Alibaba