從零開始機器學習002-梯度降低算法

老師的課程
1.從零開始進行機器學習
2.機器學習數學基礎(根據學生需求不斷更新)
3.機器學習Python基礎
4.最適合程序員的方式學習TensorFlowhtml

上節課講完線性迴歸的數學推導,咱們這節課說下如何用機器學習的思想把最合適的權重參數求解出來呢?這裏就涉及到了最優化算法,其中梯度降低就是最優化算法中的一種。咱們看下梯度降低是怎麼完成最優化求解的。程序員

1、概念:

梯度降低算法是一個最優化算法,它是沿梯度降低的方向求解極小值。算法

2、前提條件:

  1. 目標函數
    使用梯度降低算法是要求有前提條件的。第一個就是目標函數,梯度降低是求最優解的算法沒錯,可是你必定要告訴梯度降低,你要求哪一個函數的解。萬物得有源頭。目標函數就是源頭。本節課的源頭就是
    目標函數
  2. 訓練集
    這個目標函數是根據上節課推導出來的最小二乘的公式。只不過1/2後面多了個m。m是總的數據量。意味着是求多個數據以後的平均值。
    第二個是訓練集,有了目標函數,還得有數據支撐。只有有了大量的數據,機器纔可以真正的掌握規律。(下方爲數據集樣本)
    數據集樣本
    最終的目標是求得是這個目標函數最小(或局部最小)的參數θ。
    目標

3、訓練步驟

這裏寫圖片描述

  1. 隨機生成一個初始點
    圖片中紅圈上的點,從上面的圖能夠看出:初始點不一樣,得到的最小值也不一樣,所以梯度降低求得的只是局部最小值;
  2. 肯定學習率(Learning rate)
    學習率能夠理解爲下山時每一步邁的大小。步子邁得太大有可能不收斂,步子邁的過小下山速度太慢。以下圖
    這裏寫圖片描述
    上圖左邊黑色爲損失函數的曲線,假設從左邊最高點開始,若是 learning rate 調整的剛恰好,好比紅色的線,就能順利找到最低點。若是 learning rate 調整的過小,好比藍色的線,就會走的太慢,雖然這種狀況給足夠多的時間也能夠找到最低點,實際狀況可能會等不及出結果。若是 learning rate 調整的有點大,好比綠色的線,就會在上面震盪,走不下去,永遠沒法到達最低點。還有可能很是大,好比×××的線,直接就飛出去了,update參數的時候只會發現損失函數越更新越大。
    工做經驗:先使用0.1試下,若是不收斂或者收斂慢,再試0.0一、0.001。
    還有一點,學習率並不必定全程不變,能夠剛開始的時候大一些,後期的時候不斷調小。
  3. 輸入數據集,肯定一個向下的方向,並更新θ。
    數據集的輸入通常有三種。批量梯度降低、隨機梯度降低、小批量隨機梯度降低。
    批量梯度降低:每調整一步,帶入全部的數據,
    優勢:全部數據都涉及到,訓練的結果應該是最精確的。
    缺點:數據量很是大的時候,訓練速度奇慢無比。
    隨機梯度降低:每次隨機獲取數據集裏面的一個值
    優勢:速度快
    缺點:訓練結果可能不夠精確
    小批量隨機梯度降低:前二者的中間產物
    速度相對較快,結果相對精確。
    在google,TensorFlow中,訓練Mnist數據集的時候,採用的就是小批量隨機梯度降低。在平時工做,小批量隨機梯度降低也應用的最普遍。
  4. 訓練終止
    當損失函數達到預設值的一個值,或者收斂不明顯時,能夠終止訓練。獲得的值就是梯度降低優化算法的最終值(極小值)。
    這裏寫圖片描述

4、其餘

問:多個特徵值怎麼訓練?
答:並非放在一塊兒訓練,而是每一個特徵本身訓練本身的。
以下圖:
這裏寫圖片描述機器學習


文章部分圖片及內容借鑑:
http://blog.csdn.net/zyq522376829/article/details/66632699#t3
http://blog.csdn.net/xiazdong/article/details/7950084ide

相關文章
相關標籤/搜索