假設存在一個數據集,包含工資、年齡及貸款額度三個維度的數據。我們需要根據這個數據集進行建模,從而在給定工資和年齡的情況下,實現對貸款額度的預測。其中,工資和年齡是模型構建時的兩個特征,額度是模型輸出的目標值。
工資 | 年齡 | 額度 |
---|---|---|
4000 | 25 | 20000 |
8000 | 30 | 70000 |
5000 | 28 | 35000 |
7500 | 33 | 50000 |
12000 | 40 | 85000 |
… | … | … |
我們可以根據數據集和相關需求進行公式建模:
y = θ 0 + θ 1 x 1 + θ 2 x 2 + ε = θ T x + ε y = {\theta }_{0} + {\theta }_{1}x_1 + {\theta }_{2}x_2 + \varepsilon = {\theta }^{T}x + \varepsilon y=θ0?+θ1?x1?+θ2?x2?+ε=θTx+ε
其中, θ 0 \theta _0 θ0? 為偏置項, θ 1 \theta _1 θ1?、 θ 2 \theta _2 θ2? 為兩個特征 x 1 x_1 x1?、 x 2 x_2 x2? 的權重項, ε \varepsilon ε 為誤差項; θ T \theta ^T θT 為一個行向量, x x x 為包含特征 x 1 x_1 x1?、 x 2 x_2 x2? 的矩陣。
θ 1 x 1 + θ 2 x 2 {\theta }_{1}x_1 + {\theta }_{2}x_2 θ1?x1?+θ2?x2? 在三維空間中表示的平面會盡可能去擬合所有數據點(目標值),但是這個平面并不一定是擬合度最高的,也許該平面沿著 y y y 維度向上或向下平移一點距離所得到的新平面才是擬合度最高的,因此我們會在該擬合表達式中加上一個偏置項 θ 0 \theta _0 θ0?。
θ 0 + θ 1 x 1 + θ 2 x 2 {\theta }_{0} + {\theta }_{1}x_1 + {\theta }_{2}x_2 θ0?+θ1?x1?+θ2?x2? 是給定 x 1 x_1 x1?、 x 2 x_2 x2? 值時,對目標值的預測,預測值與真實值之間必然會存在一個誤差,因此我們在該表達式中還需加上一個誤差項 ε \varepsilon ε。
對于一個樣本而言,公式可以寫成如下形式:
y ( i ) = θ T x ( i ) + ε ( i ) ? ε ( i ) = y ( i ) ? θ T x ( i ) y^{(i)} = {\theta }^{T}x^{(i)} + \varepsilon ^{(i)} \Rightarrow \varepsilon ^{(i)} = y^{(i)} - {\theta }^{T}x^{(i)} y(i)=θTx(i)+ε(i)?ε(i)=y(i)?θTx(i)
其中,每個樣本的誤差 ε ( i ) \varepsilon ^{(i)} ε(i) 都是獨立同分布的,服從均值為 0 0 0 的高斯分布。
高斯分布的概率密度函數如下所示:
f ( x ) = 1 2 π σ ? e ? ( x ? μ ) 2 2 σ 2 f(x) = \frac{1}{\sqrt{2\pi }\sigma }·{e}^{-\frac{{(x-\mu )}^{2}}{2{\sigma }^{2}}} f(x)=2π?σ1??e?2σ2(x?μ)2?
把誤差帶入進去,可得到公式:
f ( ε ( i ) ) = 1 2 π σ ? e ? ( ε ( i ) ) 2 2 σ 2 = 1 2 π σ ? e ? ( y ( i ) ? θ T x ( i ) ) 2 2 σ 2 f({\varepsilon }^{(i)}) = \frac{1}{\sqrt{2\pi }\sigma }·{e}^{-\frac{{({\varepsilon }^{(i)})}^{2}}{2{\sigma }^{2}}} = \frac{1}{\sqrt{2\pi }\sigma }·{e}^{-\frac{{(y^{(i)} - {\theta }^{T}x^{(i)})}^{2}}{2{\sigma }^{2}}} f(ε(i))=2π?σ1??e?2σ2(ε(i))2?=2π?σ1??e?2σ2(y(i)?θTx(i))2?
該公式表示誤差趨于 0 0 0 的概率,或者說預測值 θ T x ( i ) {\theta }^{T}x^{(i)} θTx(i) 趨近于真實值的概率,這個概率自然是越大越好。
我們的最終目的是要求出最合適的 θ 0 \theta _0 θ0?、 θ 1 \theta _1 θ1?、 θ 2 \theta _2 θ2?,而似然函數是統計學中用于估計參數的一個函數。因此在給出觀測數據的前提下,我們可以利用似然函數來推斷出未知的參數值。
構建的似然函數如下所示:
L ( θ ) = ∏ i = 1 m 1 2 π σ ? e ? ( y ( i ) ? θ T x ( i ) ) 2 2 σ 2 L(\theta ) = \displaystyle\prod_{i=1}^{m}\frac{1}{\sqrt{2\pi }\sigma }·{e}^{-\frac{{(y^{(i)} - {\theta }^{T}x^{(i)})}^{2}}{2{\sigma }^{2}}} L(θ)=i=1∏m?2π?σ1??e?2σ2(y(i)?θTx(i))2?
其中,在各個樣本都符合獨立同分布的情況下,聯合概率密度就等于各樣本概率密度的乘積,因此這里用了累乘。
想在乘法中求解出參數 θ \theta θ,也許是一個比較難的事,但如果能把乘法轉換成加法,對于參數的求解可能就容易了許多。鑒于此,我們可以使用對數似然函數來進行參數的求解。
構建的對數似然函數如下所示:
l o g L ( θ ) = l o g ∏ i = 1 m 1 2 π σ ? e ? ( y ( i ) ? θ T x ( i ) ) 2 2 σ 2 logL(\theta ) = log\displaystyle\prod_{i=1}^{m}\frac{1}{\sqrt{2\pi }\sigma }·{e}^{-\frac{{(y^{(i)} - {\theta }^{T}x^{(i)})}^{2}}{2{\sigma }^{2}}} logL(θ)=logi=1∏m?2π?σ1??e?2σ2(y(i)?θTx(i))2?
將上述公式進行展開化簡:
l o g L ( θ ) = ∑ i = 1 m l o g 1 2 π σ ? e ? ( y ( i ) ? θ T x ( i ) ) 2 2 σ 2 = m l o g 1 2 π σ + ∑ i = 1 m l o g e ? ( y ( i ) ? θ T x ( i ) ) 2 2 σ 2 = m l o g 1 2 π σ ? 1 σ 2 ? 1 2 ∑ i = 1 m ( y ( i ) ? θ T x ( i ) ) 2 logL(\theta ) = \displaystyle\sum_{i=1}^{m}log\frac{1}{\sqrt{2\pi }\sigma }·{e}^{-\frac{{(y^{(i)} - {\theta }^{T}x^{(i)})}^{2}}{2{\sigma }^{2}}} \\= mlog\frac{1}{\sqrt{2\pi }\sigma } + \displaystyle\sum_{i=1}^{m}log{e}^{-\frac{{(y^{(i)} - {\theta }^{T}x^{(i)})}^{2}}{2{\sigma }^{2}}} \\= mlog\frac{1}{\sqrt{2\pi }\sigma } - \frac{1}{{\sigma }^{2}}·\frac{1}{2}\displaystyle\sum_{i=1}^{m}{(y^{(i)} - {\theta }^{T}x^{(i)})}^{2} logL(θ)=i=1∑m?log2π?σ1??e?2σ2(y(i)?θTx(i))2?=mlog2π?σ1?+i=1∑m?loge?2σ2(y(i)?θTx(i))2?=mlog2π?σ1??σ21??21?i=1∑m?(y(i)?θTx(i))2
我們要讓似然函數越大越好,因此上述公式等價于讓下述目標函數的目標值越小越好:
J ( θ ) = 1 2 ∑ i = 1 m ( y ( i ) ? θ T x ( i ) ) 2 J(\theta ) = \frac{1}{2}\displaystyle\sum_{i=1}^{m}{(y^{(i)} - {\theta }^{T}x^{(i)})}^{2} J(θ)=21?i=1∑m?(y(i)?θTx(i))2
我們首先對上述目標函數進行展開:
J ( θ ) = 1 2 ( X θ ? y ) T ( X θ ? y ) = 1 2 ( θ T X T ? y T ) ( X θ ? y ) = 1 2 ( θ T X T X θ ? θ T X T y ? y T X θ + y T y ) = 1 2 ( 2 X T X θ ? X T y ? ( y T X ) T ) = X T X θ ? X T y J(\theta ) = \frac{1}{2}{(X\theta - y)}^{T}(X\theta - y) \\ = \frac{1}{2}{(\theta ^TX^T - y^T)}(X\theta - y) \\ = \frac{1}{2}(\theta ^TX^TX\theta - \theta ^TX^Ty - y^TX\theta + y^Ty) \\ = \frac{1}{2}(2X^TX\theta - X^Ty - (y^TX)^T) \\ = X^TX\theta - X^Ty J(θ)=21?(Xθ?y)T(Xθ?y)=21?(θTXT?yT)(Xθ?y)=21?(θTXTXθ?θTXTy?yTXθ+yTy)=21?(2XTXθ?XTy?(yTX)T)=XTXθ?XTy
根據展開的公式推出參數值:
θ = ( X T X ) ? 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)?1XTy
通過這種方法可以進行參數值 θ \theta θ 的求解,但是在上式中, X T X X^TX XTX 不一定是可逆的,也就是說不一定能求解出參數值 θ \theta θ。
鑒于上述問題,我們需要考慮使用其他方法來求解合適的 θ \theta θ,而機器學習就是非常好的方法。一個常規的思路是,我們喂給機器一堆數據,然后告訴它該用什么樣的方式學習,并讓它朝著這個方向去做(目標/損失函數),每一次學習一點,經過多次迭代優化后,最終收斂至一個穩定的狀態。
在對目標函數進行求解時,通常會用到梯度下降法來進行優化。梯度下降是一種常用的優化算法,用于求解目標函數的最小值或最大值。它的基本思想是通過迭代的方式,沿著目標函數的負梯度方向逐步更新參數,以逐漸接近最優解。具體來說,對于一個可微的目標函數,我們希望找到使其取得最小值的參數。梯度下降通過以下步驟進行迭代更新:
- 初始化參數:選擇初始參數值作為起點
- 計算梯度:計算目標函數關于參數的梯度(導數)
- 更新參數:將當前參數值沿著負梯度方向移動一小步,更新參數值
- 重復步驟 2 和步驟 3,直到滿足停止條件(如達到最大迭代次數或梯度變化很小)
梯度方向指示了函數上升最快的方向,而負梯度方向則指示了函數下降最快的方向。因此,通過不斷更新參數,梯度下降算法可以朝著函數取得最小值的方向逐漸迭代,最終接近或達到最優解。
梯度下降算法有多種變體,如批量梯度下降(Batch Gradient Descent)、隨機梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-Batch Gradient Descent),它們在每次更新參數時所使用的樣本數量不同。這些變體具有不同的優缺點,適用于不同的問題和數據集規模。
回到上面的問題,此時的目標/損失函數如下所示:
J ( θ ) = 1 2 m ∑ i = 1 m ( y i ? θ T x i ) 2 J(\theta ) = \frac{1}{2m}\displaystyle\sum_{i=1}^{m}(y^i - \theta ^Tx^i)^2 J(θ)=2m1?i=1∑m?(yi?θTxi)2
當使用批量梯度下降時,目標函數關于第 j j j 個參數的梯度可以寫成如下形式:
δ J ( θ ) δ θ j = ? 1 m ∑ i = 1 m ( y i ? θ T x i ) x j i \frac{\delta J(\theta)}{\delta \theta _j} = -\frac{1}{m}\displaystyle\sum_{i=1}^{m}(y^i - \theta ^Tx^i){x}_{j}^{i} δθj?δJ(θ)?=?m1?i=1∑m?(yi?θTxi)xji?
更新參數后,新的參數可以表示成如下形式:
θ j ′ = θ j + α ? 1 m ∑ i = 1 m ( y i ? θ T x i ) x j i {\theta }_{j}^{'} = \theta _j + \alpha · \frac{1}{m}\displaystyle\sum_{i=1}^{m}(y^i - \theta ^Tx^i){x}_{j}^{i} θj′?=θj?+α?m1?i=1∑m?(yi?θTxi)xji?
當使用隨機梯度下降時,目標函數關于第 j j j 個參數的梯度可以寫成如下形式:
δ J ( θ ) δ θ j = ? ( y i ? θ T x i ) x j i \frac{\delta J(\theta)}{\delta \theta _j} = -(y^i - \theta ^Tx^i){x}_{j}^{i} δθj?δJ(θ)?=?(yi?θTxi)xji?
更新參數后,新的參數可以表示成如下形式:
θ j ′ = θ j + α ? ( y i ? θ T x i ) x j i {\theta }_{j}^{'} = \theta _j + \alpha · (y^i - \theta ^Tx^i){x}_{j}^{i} θj′?=θj?+α?(yi?θTxi)xji?
當使用小批量梯度下降時,目標函數關于第 j j j 個參數的梯度可以寫成如下形式:
δ J ( θ ) δ θ j = 1 10 ∑ k = i i + 9 ( θ T x k ? y k ) x j k \frac{\delta J(\theta)}{\delta \theta _j} = \frac{1}{10}\displaystyle\sum_{k=i}^{i+9}(\theta ^Tx^k - y^k){x}_{j}^{k} δθj?δJ(θ)?=101?k=i∑i+9?(θTxk?yk)xjk?
更新參數后,新的參數可以表示成如下形式:
θ j ′ = θ j ? α ? 1 10 ∑ k = i i + 9 ( θ T x k ? y k ) x j k {\theta }_{j}^{'} = \theta _j - \alpha · \frac{1}{10}\displaystyle\sum_{k=i}^{i+9}(\theta ^Tx^k - y^k){x}_{j}^{k} θj′?=θj??α?101?k=i∑i+9?(θTxk?yk)xjk?
批量梯度下降容易得到最優解,但是由于每次都要考慮所有樣本,因此速度很慢;隨機梯度下降每次找一個樣本,迭代速度快,但不一定每次都朝著收斂的方向前進(存在離群點、噪聲點等干擾);小批量梯度下降比較實用,用的也比較多。