1. 程式人生 > >優化演算法(吳恩達深度學習課程)-- 2018.11.02筆記

優化演算法(吳恩達深度學習課程)-- 2018.11.02筆記

優化演算法(吳恩達深度學習課程)

  1. batch梯度下降

    • 使用batch梯度下降時,每次迭代你都需要遍歷整個訓練集,可以預期每次成本都會下降,所以如果成本函式 J J 是迭代次數的一個函式,它應該會隨著每次迭代而減少,如果某次迭代中增加了,那肯定是出了問題,也許你的學習率太大
  2. mini-batch

    • 每次迭代下你都在訓練不同的樣本集或者說訓練不同的mini-batch,如果你要作出成本函式 J J 的圖,你很可能會看到如下圖的結果,沒有每次迭代都下降是不要緊的,但走勢應該向下,噪聲產生的原因在於也許 X
      1 X^1
      Y 1 Y^1
      是比較容易計算的mini-batch,因此成本會低一些。不過也許出於偶然, X 2 X^2 Y 2 Y^2 是比較難運算的mini-batch,或許你需要一些殘缺的樣本,這樣一來,成本會更高一些,所以才會出現這些擺動,因為你是在執行mini-batch梯度下降法作出成本函式圖。
      cost
    • mini-batch的大小問題(m是訓練集大小)如下圖
      • 如果mini-batch的大小是m(藍線),其實就是batch梯度下降法;
      • 如果mini-batch的大小是1(紫線),就有了新的演算法,叫做隨機梯度下降。
      • 如果mini-batch的大小是(1, m)之間的(綠線),則他不會總朝向最小值附近,但它比隨機梯度下降要更持續地靠近最小值的方向。
      • 如果mini-batch大小事2的n次方,程式碼會執行快一些,可以嘗試不同的值,64和512的mini-batch比較常見
        gradient descent
    • Stochastic gradient descent(隨機梯度下降)
      • 隨機梯度下降法是有很多噪聲的
      • 隨機梯度下降法永遠不會收斂,而是會一直在最小值附近被撥動,但它並不會在達到最小值並停留在此
    • X { t } X^{\{t\}} Y { t } Y^{\{t\}} 要符合CPU/GPU記憶體,否則不管用什麼方法處理資料,會使演算法的表現急轉直下變得慘不忍睹
  3. 加權平均數(指數加權移動平均)

    • v t = β v t 1 + ( 1 β ) θ t v_t = \beta v_{t-1} + (1-\beta) \theta_t
    • β = β 0 \beta = \beta_0 的時候,相當於平均了大約前面 1 ( 1 β 0 ) \frac{1}{(1-\beta_0)} 天的資料
  4. 偏差修正(指數加權平均的偏差修正)
    bias correction

    • 因為計算移動平均數的時候,初始化 v 0 = 0 v_0 = 0 , v 1 = 0.98 v 0 + 0.02 θ 1 v_1 = 0.98v_0 + 0.02\theta_1 ,但是 v 0 = 0 v_0 = 0 ,所以這部分沒有了( 0.98 θ 0 0.98\theta_0 ),所以 v 1 = 0.02 θ 1 v_1 = 0.02\theta_1 ,所以如果一天溫度是40華氏度,那麼 v 1 = 0.02 θ 1 = 0.02 × 40 = 8 v_1 = 0.02\theta_1 = 0.02 \times 40 = 8 ,因此得到的值會小很多,所以第一天溫度的估測不準。 v 2 = 0.98 v 1 + 0.02 θ 2 v_2 = 0.98v_1 + 0.02\theta_2 ,如果代入 v 1 v_1 ,然後相乘,所以 v 2 = 0.98 × 0.02 θ 1 + 0.02 θ 2 = 0.0196 θ 1 + 0.02 θ 2 v_2 = 0.98 \times 0.02\theta_1 + 0.02\theta_2 = 0.0196\theta_1 + 0.02\theta_2 ,假設 θ 1 \theta_1 θ 1 \theta_1 都是正數,計算後 v 2 v_2 要遠小於 θ 1 \theta_1 θ 2 \theta_2 ,所以 v 2 v_2 不能很好估測出這一年前兩天的溫度。
    • 偏差修正的辦法:在估測初期,不用 v t v_t ,而是用 v t 1 β t \frac{v_t}{1 - \beta^t} t t 就是現在的天數。舉個具體例子,當 t = 2 t = 2 時, 1 β t = 1 0.9 8 2 = 0.0396 1 - \beta^t = 1 - 0.98^2 = 0.0396 ,因此對第二天溫度的估測變成了 v 2 0.0396 = 0.0196 θ 1 + 0.02 θ 2 0.0396 \frac{v_2}{0.0396} = \frac{0.0196\theta_1 + 0.02\theta_2}{0.0396}