梯度下降
引入:當我們得到了一個目标函數後,如何進行求解?
直接求解?(并不一定可解,線性回歸可以當做一個特例)
正常套路:機器學習的套路就是我交給機器一堆資料,然後告訴它什麼樣的學習方式是對的(目标函數),然後讓它朝着這個方向去做
如何優化:一口吃不成胖子,我們要靜悄悄的一步步的完成疊代(每次優化一點點,積累起來就是個大成績)
目标函數: J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x i ) − y ( i ) ) 2 J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{i})-y^{(i)})^{2} J(θ0,θ1)=2m1∑i=1m(hθ(xi)−y(i))2
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90EVNFTWq1kMRRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1kzNwQTO1YTM5ITOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
尋找山谷的最低點,也就是我們的目标函數終點(什麼樣的參數能使目标函數達到極值點)
下山分幾步走?(更新參數)
(1)找到目前最合适的方向
(2)走那麼一小步,走快了該“跌倒”了
(3)按照方向與步伐去更新我們的參數
梯度下降,目标函數: J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x i ) − y ( i ) ) 2 J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{i})-y^{(i)})^{2} J(θ0,θ1)=2m1∑i=1m(hθ(xi)−y(i))2
一般有三種梯度下降的方式:
批量梯度下降: ∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m ( y i − h 0 ( x i ) ) x j i \frac{\partial J(\theta)}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{i}-h_{0}(x^{i}))x_{j}^{i} ∂θj∂J(θ)=−m1∑i=1m(yi−h0(xi))xji
(容易得到最優解,但是由于每次考慮所有的樣本,速度很慢)
随機梯度下降: θ j ′ = θ j + ( y i − h θ ( x i ) ) x j i \theta_{j}^{'}=\theta_{j}+(y^{i}-h_{\theta}(x^{i}))x_{j}^{i} θj′=θj+(yi−hθ(xi))xji
(每次找一個樣本,疊代速度快,但是不一定每一次都朝着收斂的方向)
小批量梯度下降法: θ j : = θ j − α 1 10 ∑ k = i i + 9 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) \theta_{j}:=\theta_{j}-\alpha \frac{1}{10}\sum_{k=i}^{i+9}(h_{\theta}(x^{(k)})-y^{(k)})x_{j}^{(k)} θj:=θj−α101∑k=ii+9(hθ(x(k))−y(k))xj(k)
(每次更新選擇一小部分資料進行計算,實用!!!)
梯度下降學習率
學習率(步長):對結果會産生巨大的影響,一般取值小點
如何選擇:從小的時候選擇,不行再小
批處理數量:32,64,128一般都可以,很多時候還得考慮記憶體和效率