深度學習介紹
基于仿生學的一種自成體系的機器學習算法,包括但不限于圖像識別、語音、文本領域。
梯度下降法
作為深度學習算法種常用的優化算法
梯度下降法,是一種基于搜索的最優化方法,最用是最小化一個損失函數。梯度下降是迭代法的一種,可以用于求解最小二乘問題(線性和非線性都可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降是最常采用的方法之一,另一種常用的方法是最小二乘法。在求解損失函數的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數和模型參數值。
當然可以!以下是關于梯度下降法的詳細介紹,使用 LaTeX 格式進行排版,并將希臘字母用美元符號表示:
梯度下降法
梯度下降法(Gradient Descent)是一種用于優化的迭代算法,廣泛應用于機器學習和深度學習中,以最小化損失函數并找到模型的最佳參數。它的基本思想是通過計算損失函數相對于模型參數的梯度(即導數),來更新參數,從而逐步逼近損失函數的最小值。
1. 基本原理
在多維空間中,損失函數可以看作是一個表面,梯度下降法通過以下步驟來尋找最低點:
- 初始化參數:隨機選擇初始參數值。
- 計算梯度:計算損失函數相對于每個參數的梯度。
- 更新參數:根據梯度的方向和學習率(step size)更新參數:
θ = θ ? α ? J ( θ ) \theta = \theta - \alpha \nabla J(\theta) θ=θ?α?J(θ)
其中:- θ \theta θ 是參數,
- α \alpha α 是學習率,
- ? J ( θ ) \nabla J(\theta) ?J(θ) 是損失函數的梯度。
- 迭代:重復步驟 2 和 3,直到滿足停止條件(如達到最大迭代次數或損失函數收斂)。
2. 學習率
學習率 α \alpha α 是一個超參數,控制每次更新的步長。選擇合適的學習率非常重要:
- 過大:可能導致參數更新過頭,無法收斂,甚至發散。
- 過小:收斂速度慢,可能需要更多的迭代次數。
3. 梯度下降的變種
梯度下降法有幾種不同的變種,適用于不同的場景:
-
批量梯度下降(Batch Gradient Descent):使用整個訓練集計算梯度,適合小規模數據集,但在大數據集上計算開銷較大。
-
隨機梯度下降(Stochastic Gradient Descent, SGD):每次只使用一個樣本計算梯度,更新頻繁,收斂速度快,但可能會在最優解附近震蕩。
-
小批量梯度下降(Mini-batch Gradient Descent):結合了批量和隨機梯度下降的優點,每次使用一小部分樣本進行更新,平衡了計算效率和收斂穩定性。
4. 動量法
為了加速收斂并減少震蕩,動量法(Momentum)引入了“動量”概念,通過考慮過去的梯度來更新參數:
v t = β v t ? 1 + ( 1 ? β ) ? J ( θ ) v_t = \beta v_{t-1} + (1 - \beta) \nabla J(\theta) vt?=βvt?1?+(1?β)?J(θ)
θ = θ ? α v t \theta = \theta - \alpha v_t θ=θ?αvt?
其中:
- v t v_t vt? 是當前的動量,
- β \beta β 是動量衰減因子(通常取值在 0.9 到 0.99 之間)。
5. 自適應學習率方法
一些算法通過自適應調整學習率來提高收斂速度:
- AdaGrad:根據參數的歷史梯度調整學習率,適合稀疏數據。
- RMSProp:對每個參數使用指數衰減平均來調整學習率,適合非平穩目標。
- Adam:結合了動量法和 RMSProp 的優點,廣泛應用于深度學習。
6. 應用
梯度下降法在許多機器學習和深度學習任務中都有廣泛應用,包括但不限于:
- 線性回歸和邏輯回歸
- 神經網絡的訓練
- 支持向量機(SVM)
- 深度學習中的卷積神經網絡(CNN)和循環神經網絡(RNN)
總結
梯度下降法是優化問題中一種重要的工具,尤其在機器學習和深度學習中。通過不斷迭代更新參數,梯度下降法能夠有效地找到損失函數的最小值,從而提高模型的性能。選擇合適的變種和超參數(如學習率)對于成功應用梯度下降法至關重要。
最小二乘法的問題
梯度下降
最小二乘法是一種用于回歸分析的統計方法,旨在通過最小化觀測值與模型預測值之間的平方差來估計模型參數。其核心思想是找到一條最佳擬合線,使得所有數據點到這條線的垂直距離的平方和最小。
在機器學習中,許多算法都需要最大化或最小化一個函數,這個函數被稱為“目標函數”。通常,我們將最小化的一類函數稱為“損失函數”。損失函數能夠根據預測結果衡量模型預測能力的好壞。在求損失函數最小化的過程中,梯度下降法被廣泛應用。
- 梯度的概念
在直線方程中,導數代表斜率;在曲線方程中,導數代表切線的斜率。導數表示參數 θ \theta θ 單位變化時,損失函數相應的變化。通過圖中的點可以發現,該點的導數為負值,因此隨著參數 θ \theta θ 的增加,損失函數減小。導數從某種意義上還可以代表方向,對應著損失函數增大的方向。
import randomif __name__ == '__main__':x = [ i/100. for i in range(100)]y = [3*i+4+random.random()/100. for i in x]w = random.random()b = random.random()for _ in range(5000):for _x,_y in zip(x,y):y_pre = _x*w+bo = y_pre-_yloss = o**2dw = -2*o*_xdb = -2*ow = w+0.1*dwb = b+0.1*dbprint(w,b,loss)
公式原理
梯度
? J ( θ 0 , θ 1 , … , θ n ) = ( ? J ? θ 0 , ? J ? θ 1 , … , ? J ? θ n ) \nabla J\left(\theta_{0}, \theta_{1}, \ldots, \theta_{n}\right)=\left(\frac{\partial J}{\partial \theta_{0}}, \frac{\partial J}{\partial \theta_{1}}, \ldots, \frac{\partial J}{\partial \theta_{n}}\right) ?J(θ0?,θ1?,…,θn?)=(?θ0??J?,?θ1??J?,…,?θn??J?)
目標: 使 ∑ i = 1 m ( y ( i ) ? y ^ ( i ) ) 2 \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} ∑i=1m?(y(i)?y^?(i))2 盡可能的小
y ^ ( i ) = θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ? + θ n X n ( i ) \hat{y}^{(i)}=\theta_{0}+\theta_{1} X_{1}^{(i)}+\theta_{2} X_{2}^{(i)}+\cdots+\theta_{n} X_{n}^{(i)} y^?(i)=θ0?+θ1?X1(i)?+θ2?X2(i)?+?+θn?Xn(i)?
目標: 使 ∑ i = 1 m ( y ( i ) ? ( θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ? + θ n X n ( i ) ) ) 2 \sum_{i=1}^{m}\left(y^{(i)}-\left(\theta_{0}+\theta_{1} X_{1}^{(i)}+\theta_{2} X_{2}^{(i)}+\cdots+\theta_{n} X_{n}^{(i)}\right)\right)^{2} ∑i=1m?(y(i)?(θ0?+θ1?X1(i)?+θ2?X2(i)?+?+θn?Xn(i)?))2 盡可能小
? J ( θ ) = [ ? J ? θ 0 ? J ? θ 1 … ? J ? θ 2 ] = [ ∑ i ? 1 m 2 ( y ( i ) ? X ( i ) θ ) ? ( ? 1 ) ∑ i ? 1 m 2 ( y ( i ) ? X ( i ) θ ) ? ( ? X 1 ( i ) ) ∑ i = 1 m 2 ( y ( i ) ? X ( i ) θ ) ? ( ? X 2 ( i ) ) … ∑ i = 1 m 2 ( y ( i ) ? X ( i ) θ ) ? ( ? X n ( i ) ) ] = 2 ? [ ∑ i ? 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? 1 ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 1 ( i ) ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 2 ( i ) ) ? ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X n ( i ) ) ] \nabla J(\theta)=\left[\begin{array}{c} \frac{\partial J}{\partial \theta_{0}} \\ \frac{\partial J}{\partial \theta_{1}} \\ \ldots \\ \frac{\partial J}{\partial \theta_{2}} \end{array}\right]=\left[\begin{array}{c} \sum_{i-1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i-1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \ldots \\ \sum_{i=1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right]=2 \cdot\left[\begin{array}{c} \sum_{i-1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right] ?J(θ)= ??θ0??J??θ1??J?…?θ2??J?? ?= ?∑i?1m?2(y(i)?X(i)θ)?(?1)∑i?1m?2(y(i)?X(i)θ)?(?X1(i)?)∑i=1m?2(y(i)?X(i)θ)?(?X2(i)?)…∑i=1m?2(y(i)?X(i)θ)?(?Xn(i)?)? ?=2? ?∑i?1m?(y(i)?X(i)θ)?(?1)∑i=1m?(y(i)?X(i)θ)?(?X1(i)?)∑i=1m?(y(i)?X(i)θ)?(?X2(i)?)?∑i=1m?(y(i)?X(i)θ)?(?Xn(i)?)? ?
由于目標函數的梯度隨著特征向量的增加會越來越大,這是不合理的,因此我們給它加個系數 1 m \frac{1}{m} m1? 。
目標: 使 1 m ∑ i = 1 m ( y ( i ) ? y ^ ( i ) ) 2 \frac{1}{m} \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} m1?∑i=1m?(y(i)?y^?(i))2 盡可能的小
? J ( θ ) = 2 m [ ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? 1 ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 1 ( i ) ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 2 ( i ) ) ? ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X n ( i ) ) ] = 2 m [ ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 0 ( i ) ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 1 ( i ) ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 2 ( i ) ) ? ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X n ( i ) ) ] \nabla J(\theta)=\frac{2}{m}\left[\begin{array}{c} \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right]=\frac{2}{m}\left[\begin{array}{c} \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{0}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right] ?J(θ)=m2? ?∑i=1m?(y(i)?X(i)θ)?(?1)∑i=1m?(y(i)?X(i)θ)?(?X1(i)?)∑i=1m?(y(i)?X(i)θ)?(?X2(i)?)?∑i=1m?(y(i)?X(i)θ)?(?Xn(i)?)? ?=m2? ?∑i=1m?(y(i)?X(i)θ)?(?X0(i)?)∑i=1m?(y(i)?X(i)θ)?(?X1(i)?)∑i=1m?(y(i)?X(i)θ)?(?X2(i)?)?∑i=1m?(y(i)?X(i)θ)?(?Xn(i)?)? ?
有時也取 J ( θ ) = 1 2 m ∑ i = 1 m ( y ( i ) ? y ^ ( i ) ) 2 J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} J(θ)=2m1?∑i=1m?(y(i)?y^?(i))2
最小二乘法和梯度下降法是機器學習中非常重要的工具。通過最小化損失函數,我們可以有效地訓練模型,使其能夠更好地擬合數據。理解梯度的概念及其在優化過程中的作用,對于掌握機器學習算法的工作原理至關重要。隨著技術的不斷發展,梯度下降法也在不斷演化,出現了許多變種,如隨機梯度下降(SGD)、小批量梯度下降(Mini-batch Gradient Descent)等,這些方法在實際應用中展現出了良好的性能。