機器學習基本概念總結
開啟掘金成長之旅!這是我參與「掘金日新計劃 · 2 月更文挑戰」的第 7 天,點擊查看活動詳情。
深度學習是機器學習的一個特定分支,要想充分理解深度學習,就必須對機器學習的基本原理有深刻的理解。機器學習的本質屬於應用統計學,其更多地關注如何用計算機統計地估計複雜函數,而不太關注為這些函數提供置信區間,大部分機器學習算法可以分成監督學習和無監督學習兩類;通過組合不同的算法部分,例如優化算法、代價函數、模型和數據集可以建立一個完整的機器學習算法。
一,餘弦相似度與歐氏距離
1.1,餘弦相似度
通過對兩個文本分詞,TF-IDF
算法向量化,利用空間中兩個向量的夾角,來判斷這兩個向量的相似程度:(計算夾角的餘弦,取值 0-1
)
- 當兩個向量夾角越大,距離越遠,最大距離就是兩個向量夾角 180°;
- 夾角越小,距離越近,最小距離就是兩個向量夾角 0°,完全重合。
- 夾角越小相似度越高,但由於有可能一個文章的特徵向量詞特別多導致整個向量維度很高,使得計算的代價太大不適合大數據量的計算。
計算兩個向量a、b的夾角餘弦: 我們知道,餘弦定理:$cos(\theta) = \frac {a^2+b^2+c^2}{2ab}$ ,由此推得兩個向量夾角餘弦的計算公式如下:
$$ cos(\theta) = \frac {ab}{||a|| \times ||b||} = \frac {x_{1}x_{2}+y_1y_2}{\sqrt{x^2_1+y^2_1}\sqrt{x^2_2+y^2_2}} $$
(分子就是兩個向量的內積,分母是兩個向量的模長乘積)
1.2,歐式距離
歐式距離和 L2 範數計算公式相同。
在歐幾里得空間中,歐式距離其實就是向量空間中兩點之間的距離。點 $x = (x_{1}, ..., x_{n})$ 和 $y = (y_{1}, ..., y_{n})$ 之間得歐氏距離計算公式如下:
$$d(x,y) = \sqrt {((x_{1}-y_{1})^{2} + (x_{2}-y_{2})^{2} + ... + (x_{n}-y_{n})^{2})}$$
1.3,餘弦相似度和歐氏距離的區別
- 歐式距離和餘弦相似度都能度量
2
個向量之間的相似度 - 放到向量空間中看,歐式距離衡量
兩點之間
的直線距離,而餘弦相似度計算的是兩個向量
之間的夾角 - 沒有歸一化時,歐式距離的範圍是
[0, +∞]
,而餘弦相似度的範圍是[-1, 1]
;餘弦距離是計算相似程度,而歐氏距離計算的是相同程度(對應值的相同程度) - 歸一化的情況下,可以將空間想象成一個超球面(三維),歐氏距離就是球面上兩點的直線距離,而向量餘弦值等價於兩點的球面距離,本質是一樣。
二,Bias(偏差)和Varience(方差)
當我們討論預測模型時,預測誤差可以分解為我們關心的兩個主要子成分:“偏差”引起的誤差和“方差”引起的誤差。 在模型最小化偏差和方差的能力之間存在權衡。 瞭解這兩類錯誤可以幫助我們診斷模型結果,避免出現過擬合或欠擬合的錯誤。
有兩個不同的概念都被稱為“方差”。一種是理論概率分佈的方差。而另一種方差是一組觀測值的特徵(統計意義上的方差)。
2.1,概念定義
統計領域為我們提供了很多工具來實現機器學習目標,不僅可以解決訓練集上的任務,還可以泛化。偏差-方差指標方法是試圖對學習算法(模型)的期望泛化錯誤率進行拆解:
$$ Error = Bias + Varience $$
Varience(Error due to Variance), Bias(Error due to Bias)
Error
: 反映的是整個模型的準確度。Bias
:偏差引起的誤差被視為我們模型的預期(或平均)預測與我們試圖預測的正確值之間的差異,即模型的準確性。當然,您只有一個模型,因此談論預期或平均預測值可能看起來有點奇怪。但是,想象一下您可以多次重複整個模型構建過程:每次您收集新數據並運行新分析時都會創建一個新模型。由於基礎數據集中的隨機性,生成的模型將具有一系列預測。偏差通常衡量這些模型的預測與正確值之間的差距。Varience
:方差引起的誤差被視為給定數據點的模型預測的可變性,即**即模型的穩定性。同樣,假設您可以多次重複整個模型構建過程。方差是給定點的預測在模型的不同實現之間的變化程度。
2.2,圖形定義
Bias
和 Varience
的圖形定義:
我們可以使用靶心圖創建偏差和方差的圖形可視化。想象一下,目標的中心是一個可以完美預測正確值的模型。當我們遠離靶心時,我們的預測會變得越來越糟。
Low Bias
表現出來就是點都打在靶心中間,但這樣容易過擬合 (overfitting
),過擬合對應下圖是 High Variance
,表現就是點很分散,沒有集中在一起,手不穩啊(對應就是模型預測結果變化性太大)。
Low Variance
對應就是點都打的很集中,但不一定是靶心附近,手很穩,但是瞄的不一定準。
我們可以繪製四種不同的情況,代表高低偏差和方差的組合。
總的來説,參數估計、偏差和方差雖然是統計領域的基本概念,但它們的關係也和機器學習的模型容量、欠擬合和過擬合的概念緊密相聯。
偏差和方差度量着估計量的兩個不同誤差來源: - 偏差度量着偏離真實函數或參數的誤差期望。 - 方差度量着數據上任意特定採樣可能導致的估計期望的偏差。
2.3,數學定義
假設對測試樣本 $x$, 令 $y_{D}$ 為 $x$ 在數據集中的標記,$y$ 為 $x$ 的真實標記, $f(x;D)$ 為在訓練集 $D$ 上學習到的模型 $f$ 在 $x$ 上的預測輸出。
+ 訓練過程中期望輸出與真實標記(標籤)的差別稱為偏差(bias
):$bias^{2}(x) = (\bar{f} - y)^{2}$
+ (交叉驗證訓練模型)使用樣本數相同不同訓練集訓練出來的模型在測試集上產生的方差
為: $var(x) = E_{D}[(f(x;D) - \bar{f})^{2}] $
2.4,導致偏差和方差的原因
- 偏差通常是由於我們對學習算法做了錯誤的假設,或者模型的複雜度不夠;
- 比如真實模型是一個二次函數,而我們假設模型為一次函數,這就會導致偏差的增大(欠擬合);
- 由偏差引起的誤差通常在訓練誤差上就能體現,或者説訓練誤差主要是由偏差造成的
- 方差通常是由於模型的複雜度相對於訓練集過高導致的;
- 比如真實模型是一個簡單的二次函數,而我們假設模型是一個高次函數,這就會導致方差的增大(過擬合);
- 由方差引起的誤差通常體現在測試誤差相對訓練誤差的增量上。
2.5,深度學習中的偏差與方差
- 神經網絡的擬合能力非常強,因此它的訓練誤差(偏差)通常較小;
- 但是過強的擬合能力會導致較大的方差,使模型的測試誤差(泛化誤差)增大;
- 深度學習的核心工作之一就是研究如何降低模型的泛化誤差,這類方法統稱為
正則化方法
。
三,模型容量、過擬合和欠擬合
- 模型容量是指模型擬合各種函數的能力,決定了模型是欠擬合還是過擬合。
- 欠擬合就是指模型的訓練誤差過大,即偏差(
bias
)過大,表現為模型不夠”準“,優化算法目的在於解決欠擬合問題。 - 過擬合就是指訓練誤差和測試誤差間距過大,即方差(
variance
)過大,表現為模型不夠”穩“,正則化目的在於解決過擬合問題。 - 機器學習模型的目的是解決欠擬合和過擬合的問題,這也是機器學習算法的兩個挑戰。
訓練誤差
train error
,泛化誤差generalization error
(也叫測試誤差test error
)。
模型容量與偏差、方差的關係圖如下所示:
從上圖可以看出,當容量增大(x 軸)時,偏差(藍色虛線)隨之減小,而方差(綠色虛線)隨之增大,使得泛 化誤差(加粗曲線)產生了另一種 U 形。如果我們沿着軸改變容量,會發現最佳容量(optimal capacity),當容量小於最佳容量會呈現欠擬合,大於時導致過擬合。這種關係與第一章中討論的容量、欠擬合和過擬合之間的關係類似。
四,樣本方差與總體方差
本章中樣本方差與總體方差概念是統計學意義上的。
4.1,方差定義
方差是在概率論和統計學中衡量隨機變量或一組數據時離散程度的度量,在統計描述和概率分佈中各有不同的定義,並有不同的公式。
概率論中,方差(variance)衡量的是當我們對 $\textrm{x}$ 依據它的概率分佈進行採樣時,隨機變量 $\textrm{x}$ 的函數值會呈現多大的差異,簡單理解就是用來度量隨機變量和其數學期望之間的偏離程度。
統計學中,方差是一組觀測值的特徵,觀測值通常是從真實世界的系統中測量的。如果給出系統的所有可能的觀測,則它們算出的方差稱為總體方差;然而,一般情況下我們只使用總體的一個子集(樣本),由此計算出的方差稱為樣本方差。用樣本計算出的方差可認為是對整個總體的方差的估計量。
1,均方誤差(MSE,mean squared error)與均方根誤差(RMSE)
均方誤差是預測值與真實值之差的平方和的平均值,即誤差平方和的平均數。計算公式形式上接近方差,它的開方叫均方根誤差 RMSE
,均方根誤差才和標準差形式上接近。
計算公式如下:
$$ \frac{1}{n} \sum_{i=1}^{n}[f(x_i)-y_i]^2 $$
在機器學習中均方誤差常用作預測和迴歸問題的損失函數,均方誤差越小,説明模型預測的越準確,反之則越不準確。
2,總體方差
統計中的總體方差 $\sigma^2$ 就是對整個總體運用方差計算方法得到的結果,即樣本實際值與實際值的總體平均值之差的平方和的平均值。
另一種定義:各個樣本誤差之平方(而非取絕對值,使之肯定為正數)相加之後再除以總數。
總體方差計算公式如下:
$$ \sigma ^2 = \frac{\sum_{i=1}^{N}(X_{i}-\mu)^2}{N} $$
公式解析: 1. 因為和樣本數無關,所以分母為樣本數 2. 累加每個值和均值差值的平方,對應於每個值相對於均值的偏差,對應於離散程度,平方是對離散程度的加劇,同時能讓差值總為正數,以符合偏差的概念意義 3. $\sigma$ 的平方表示總體方差,$X$ 表示變量,$\mu $ 表示總體均值(也叫數學期望),$N$ 表示總體樣本數量。
由於方差是數據的平方,與檢測值本身相差太大,難以直觀的衡量,所以常用方差開根號換算回來,就成了標準差(Standard Deviation)用$\sigma$ 表示。
3,樣本方差
在實際項目中,總體均值很難獲得,所以常用樣本方差來估計總體方差(統計術語:樣本方差是對總體方差的無偏估計)。所謂樣本方差,是指樣本各單位變量值與其算術平均數的離差平方的平均數。
應用樣本統計量替代總體參數,經校正後,樣本方差的計算公式如下:
$$ \sigma ^2 = \frac{\sum_{i=1}^{n-1}(X_{i}-\overline{x_{i}..x_{n}})^2}{n-1} $$
$\overline{x_{i}..x_{n}}$ 表示樣本均值公式分母由總體方差的 N
變為了 n-1
,使得樣本方差更能反映總體方差。
五,先驗概率與後驗概率
更多深入內容可參考《花書》第三章概率與信息論。
5.1,條件概率
一個事件發生後另一個事件發生的概率。設 A 與 B 為樣本空間 Ω 中的兩個事件,其中 P(B)>0。那麼在事件 B 發生的條件下,事件 A 發生的條件概率為:
$$ P(A|B) = \frac {P(A\cap B)} {P(B)} $$
5.2,先驗概率
事件發生前的概率,可以是基於以往經驗/分析,也可以是基於歷史數據的統計,甚至可以是人的主觀觀點給出。一般是單獨事件概率,如 $P(x)$, $P(y)$。
5.3,後驗概率
- 事情已經發生,要求這件事情發生的原因是由某個因素引起的可能性的大小(由果推因:就是在知道“果”之後,去推測“因”的概率)
- 後驗概率和和先驗概率的關係可以通過
貝葉斯
公式求得,公式如下: $$ P(B_{i}|A) = \frac {P(B_{i}\cdot P(A|B_{i}}{P(B_{1})\cdot P(A|B_{1}) + P(B_{2})\cdot P(A|B_{2}) } $$
5.4,貝葉斯公式
貝葉斯公式是建立在條件概率的基礎上尋找事件發生的原因(即大事件 A
已經發生的條件下,分割中的小事件 Bi
的概率),設 B1,B2,...
是樣本空間 Ω
的一個劃分,則對任一事件 A(P(A)>0)
, 有:$$P(B_{i}|A) = \frac {P(A|B_{i})P(B_{i})}{\sum_{j=1}^{n}P(B_{j})P(A|B_{j})}$$
Bi
常被視為導致試驗結果A發生的”原因“;P(Bi)(i=1,2,...)
表示各種原因發生的可能性大小,故稱先驗概率;P(Bi|A)(i=1,2...)
則反映當試驗產生了結果A之後,再對各種原因概率的新認識,故稱後驗概率。
5.5,後驗概率實例
假設一個學校裏有 60%
男生和 40%
女生。女生穿褲子的人數和穿裙子的人數相等,所有男生穿褲子。一個人在遠處隨機看到了一個穿褲子的學生。那麼這個學生是女生的概率是多少?
+ 使用貝葉斯定理,事件A是看到女生,事件B是看到一個穿褲子的學生。我們所要計算的是 $P(A|B)$。
+ $P(A)$ 是忽略其它因素,看到女生的概率,在這裏是 40%;
+ $P(A')$ 是忽略其它因素,看到不是女生(即看到男生)的概率,在這裏是 60%;
+ $P(B|A)$ 是女生穿褲子的概率,在這裏是 50%;
+ $P(B|A')$ 是男生穿褲子的概率,在這裏是 100%;
+ $P(B)$ 是忽略其它因素,學生穿褲子的概率,$P(B) = P(B|A)P(A) + P(B|A')P(A')$,在這裏是 0.5×0.4 + 1×0.6 = 0.8。
根據貝葉斯定理,我們計算出後驗概率P(A|B):
$$ P(A|B) = \frac {P(B|A)P(A)}{P(B)} = \frac {0.5\times 0.4} {0.8} $$
六,相對熵(KL散度)與交叉熵
也可參考文章【直觀詳解】信息熵、交叉熵和相對熵、為什麼交叉熵(cross-entropy)可以用於計算代價和神經網絡基礎部件-損失函數詳解。
6.1,信息熵
其實信息熵是香農信息量($log\frac{1}{p}$)的期望(均值),它不是針對每條信息,而是針對整個不確定性結果集而言,信息熵越大,事件不確定性就越大。單條信息只能從某種程度上影響結果集概率的分佈。信息熵定義:
$$ H(P) = \sum_{i} P(i)log_{a} \frac{1}{P(i)} = -\sum_{i}P(i)log_{a} P(i) $$
$P_{i}$ 表示第 $i$ 個事件發生得概率,總的來説信息熵其實從某種意義上反映了信息量存儲下來需要多少存儲空間。 總結為:根據真實分佈,我們能夠找到一個最優策略,以最小的代價消除系統的不確定性(比如編碼),而這個代價的大小就是信息熵。
6.2,相對熵/KL散度
KL
散度,有時候也叫 KL 距離
,一般被用於計算兩個分佈之間的不同,記為 $D_{KL}(P||Q) = H(P,Q) - H(P)$,對於同一個離散隨機變量 $\textrm{x}$ 有兩個單獨的概率分佈 $P(x)$ 和 $Q(x)$,其 KL
散度為:
$$ D_{KL}(P \| Q) = \sum_i P(i)log_{a} \frac{P(i)}{Q(i)} = \sum_i P(i)[logP(x) - log Q(x)] $$
當 $P(i) = Q(i)$ 的時候,該值為 0
,深度學習過程也是一個降低該值的過程,該值越低,訓練出來的概率 $Q$ 越接近樣本集概率 $P$,即越準確,或者可以理解為相對熵是一把標尺,用來衡量兩個函數是否相似,相似就是 0。即,相對熵 = 某個策略的交叉熵 - 信息熵(根據系統真實分佈計算而得的信息熵,為最優策略),當信息熵為常量時,交叉熵與KL散度相等。
6.3,交叉熵 cross-entroy
交叉熵是由信息熵而得來的,和 KL
散度關係密切,拓展用在機器學習/深度學習中作損失函數。假定在確定性更大的概率分佈情況下,用更不確定的存儲策略來計算,比如使用 P
的概率乘上 Q
的存儲因子,套用信息熵公式:
$$H(P,Q) = \sum_{i} P(i)log_{a} \frac{1}{Q(i)} = -\sum_{i}P(x_i)log_{a} Q(x_i)$$
用預測概率 $q$ 分佈,去編碼真實標籤 $p$ 的分佈,得到的信息量。交叉熵,用來衡量在給定的真實分佈下,使用非真實分佈指定的策略消除系統的不確定性所需要付出努力的大小。總的來説,我們的目的是:讓熵儘可能小,即存儲空間小(消除系統的不確定的努力小)。交叉熵的一些性質:
- 非負。
- 和
KL
散度相同,交叉熵也不具備對稱性,即 $H(P,Q)≠H(Q,P)$。 - 交叉熵主要用於描述兩個事件之間的相互關係,對同一個分佈求交叉熵等於對其求熵
6.4,為什麼交叉熵可以用作代價
從數學上來理解就是,為了讓學到的模型分佈更接近真實數據的分佈,我們需要最小化模型數據分佈與訓練數據之間的 KL 散度
,而因為訓練數據的分佈是固定的,因此最小化 KL 散度
等價於最小化交叉熵,而且交叉熵計算更簡單,所以機器/深度學習中常用交叉熵 cross-entroy
作為分類問題的損失函數。
使用交叉熵損失大大提高了具有 sigmoid
和 softmax
輸出的模型的性能,而當使用均方誤差損失時會存在飽和和學習緩慢的問題。
6.5,KL 散度與交叉熵的關係
KL
散度和交叉熵在特定條件下等價- $D_{KL}(P||Q) = H(P,Q) - H(P)$
七,隨機梯度下降算法
- 隨機梯度下降算法是目前最為廣泛應用的一種神經網絡優化算法,形式為 $θ=θ − ϵg$,$ϵ$ 是學習率,$g$ 是梯度,$θ$ 是權重。
- 隨機梯度下降優化算法不一定能保證在合理的時間內達到一個局部最小值,但它通常能及時地找到代價函數一個很小的值,並且是有用的。
八,超參數和驗證集
- 普通參數指算法權重 $w$ 的值,是可以通過學習算法本身學習得到。超參數的值不是通過學習算法本身學習出來的,可通過驗證集人為選擇合適的超參數。
- 將訓練數據劃分為兩個不相交的子集,即訓練集和驗證集,訓練集用於學習普通參數,驗證集用於估計訓練中或訓練後的泛化誤差,更新超參數(“訓練超參數”)。通常,
80%
的訓練數據用於訓練,20%
用於驗證。 - 交叉驗證方法適合小規模數據集(例如幾百上千張圖片)訓練模型的情況。
九,正則化方法
所謂正則化,是指我們通過修改學習算法,使其降低泛化誤差而非訓練誤差的方法。
正則化是一種思想(策略),它是機器學習領域的中心問題之一,其重要性只有優化能與其相媲美。
許多正則化方法通過對目標函數 $J$ 添加一個參數範數懲罰項 $\Omega(\theta)$,限制模型 (如神經網絡、線性迴歸或邏輯迴歸)的學習能力。我們將正則化後的目標函數記為 $\tilde{J}$ :
$$ \tilde{J}(\theta; X, y) = J(\theta; X, y) + \alpha \Omega(\theta) $$
其中 $\alpha \in[0,∞)$ 是權衡範數懲罰項 $\Omega$ 和標準目標函數 $J(X;\theta)$ 相對貢獻的超參數。將 $\alpha$ 設為 0 表示沒有正則化。$\alpha$ 越大,對應正則化懲罰越大。
常用的參數正則化策略有 L1 和 L2 範數。L1 範數(L1 norm
)是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization)。 比如,向量 $A = [1,-1,3]$, 那麼 A 的 L1 範數為 $|1|+|-1|+|3|$。簡單總結就是:
- L1 範數: 為向量 x 各個元素絕對值之和。
- L2 範數: 為向量 x 各個元素平方和的 1/2 次方,L2 範數又稱 Euclidean 範數或 Frobenius 範數
- Lp 範數: 為向量 x 各個元素絕對值 $p$ 次方和的 $1/p$ 次方.
L1
範數可以使權值參數稀疏,方便特徵提取。L2 範數可以防止過擬合,提升模型的泛化能力。
參考資料
- ssh遠程連接方式總結
- 深度學習基礎-損失函數詳解
- 模型壓縮-剪枝算法詳解
- 機器學習經典算法總結
- 深度學習基礎-優化算法詳解
- 深度學習基礎-機器學習基本原理
- 機器學習基本概念總結
- 手把手教你註冊和使用ChatGPT
- 深入淺出動態規劃算法(中)
- 深度學習煉丹-數據預處理和增強
- 深入淺出回溯算法
- 深入淺出動態規劃算法(上)
- GitHub 車牌檢測識別項目調研
- 卷積神經網絡壓縮方法總結
- 神經網絡模型複雜度分析
- MobileNetv1 論文詳解
- ShuffleNetv2論文詳解
- Pytorch基礎-tensor數據結構
- Fast YOLO:用於實時嵌入式目標檢測(附論文下載)
- 嵌入式新聞早班車-第24期