<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能開發者 正文
      發私信給AI研習社
      發送

      0

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      本文作者: AI研習社 2017-06-19 14:22
      導語:Adam 優化器是最優選?

      雷鋒網按:本文作者楊熹,原文載于作者個人博客,雷鋒網已獲授權。

      在很多機器學習和深度學習的應用中,我們發現用的最多的優化器是 Adam,為什么呢?

      下面是 TensorFlow 中的優化器:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      詳情參見:https://www.tensorflow.org/api_guides/python/train

      在 keras 中也有 SGD,RMSprop,Adagrad,Adadelta,Adam 等,詳情:

      https://keras.io/optimizers/

      我們可以發現除了常見的梯度下降,還有 Adadelta,Adagrad,RMSProp 等幾種優化器,都是什么呢,又該怎么選擇呢?

      在 Sebastian Ruder 的這篇論文中給出了常用優化器的比較,今天來學習一下: 

      原文鏈接:https://arxiv.org/pdf/1609.04747.pdf

      本文將梳理:

      ● 每個算法的梯度更新規則和缺點

      ● 為了應對這個不足而提出的下一個算法

      ● 超參數的一般設定值

      ● 幾種算法的效果比較

      ● 選擇哪種算法

        優化器算法簡述

      首先來看一下梯度下降最常見的三種變形 BGD,SGD,MBGD, 

      這三種形式的區別就是取決于我們用多少數據來計算目標函數的梯度, 

      這樣的話自然就涉及到一個 trade-off,即參數更新的準確率和運行時間。

      1. Batch gradient descent

      梯度更新規則: 

      BGD 采用整個訓練集的數據來計算 cost function 對參數的梯度: 

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      缺點: 

      由于這種方法是在一次更新中,就對整個數據集計算梯度,所以計算起來非常慢,遇到很大量的數據集也會非常棘手,而且不能投入新數據實時更新模型

      for i in range(nb_epochs):

        params_grad = evaluate_gradient(loss_function, data, params)

        params = params - learning_rate * params_grad

      我們會事先定義一個迭代次數 epoch,首先計算梯度向量 params_grad,然后沿著梯度的方向更新參數 params,learning rate 決定了我們每一步邁多大。

      Batch gradient descent 對于凸函數可以收斂到全局極小值,對于非凸函數可以收斂到局部極小值。

      2. Stochastic gradient descent

      梯度更新規則: 

      和 BGD 的一次用所有數據計算梯度相比,SGD 每次更新時對每個樣本進行梯度更新, 

      對于很大的數據集來說,可能會有相似的樣本,這樣 BGD 在計算梯度時會出現冗余, 

      而 SGD 一次只進行一次更新,就沒有冗余,而且比較快,并且可以新增樣本。

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      for i in range(nb_epochs):

        np.random.shuffle(data)

        for example in data:

          params_grad = evaluate_gradient(loss_function, example, params)

          params = params - learning_rate * params_grad

      看代碼,可以看到區別,就是整體數據集是個循環,其中對每個樣本進行一次參數更新。

      缺點: 

      但是 SGD 因為更新比較頻繁,會造成 cost function 有嚴重的震蕩。

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      BGD 可以收斂到局部極小值,當然 SGD 的震蕩可能會跳到更好的局部極小值處。

      當我們稍微減小 learning rate,SGD 和 BGD 的收斂性是一樣的。

      3. Mini-batch gradient descent

      梯度更新規則: 

      MBGD 每一次利用一小批樣本,即 n 個樣本進行計算, 

      這樣它可以降低參數更新時的方差,收斂更穩定, 

      另一方面可以充分地利用深度學習庫中高度優化的矩陣操作來進行更有效的梯度計算。

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      和 SGD 的區別是每一次循環不是作用于每個樣本,而是具有 n 個樣本的批次

      for i in range(nb_epochs):

        np.random.shuffle(data)

        for batch in get_batches(data, batch_size=50):

          params_grad = evaluate_gradient(loss_function, batch, params)

          params = params - learning_rate * params_grad

      超參數設定值: 

      n 一般取值在 50~256

      缺點: 

      不過 Mini-batch gradient descent 不能保證很好的收斂性:

      1. learning rate 如果選擇的太小,收斂速度會很慢,如果太大,loss function 就會在極小值處不停地震蕩甚至偏離。

      (有一種措施是先設定大一點的學習率,當兩次迭代之間的變化低于某個閾值后,就減小 learning rate,不過這個閾值的設定需要提前寫好,這樣的話就不能夠適應數據集的特點)

      2. 此外,這種方法是對所有參數更新時應用同樣的 learning rate,如果我們的數據是稀疏的,我們更希望對出現頻率低的特征進行大一點的更新。

      3. 另外,對于非凸函數,還要避免陷于局部極小值處,或者鞍點處,因為鞍點周圍的error 是一樣的,所有維度的梯度都接近于0,SGD 很容易被困在這里。

      鞍點就是:一個光滑函數的鞍點鄰域的曲線,曲面,或超曲面,都位于這點的切線的不同邊。 

      例如下圖這個二維圖形,像個馬鞍:在x-軸方向往上曲,在y-軸方向往下曲,鞍點就是(0,0)

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      為了應對上述這三點挑戰,于是就有了下面這些算法。

      [應對挑戰 1]

      4. Momentum

      SGD 在 ravines 的情況下容易被困住, ravines 就是曲面的一個方向比另一個方向更陡,這時 SGD 會發生震蕩而遲遲不能接近極小值:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      梯度更新規則: 

      Momentum 通過加入 γv_t?1 ,可以加速 SGD, 并且抑制震蕩

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      當我們將一個小球從山上滾下來時,沒有阻力的話,它的動量會越來越大,但是如果遇到了阻力,速度就會變小。 

      加入的這一項,可以使得梯度方向不變的維度上速度變快,梯度方向有所改變的維度上的更新速度變慢,這樣就可以加快收斂并減小震蕩。

      超參數設定值: 

      一般 γ 取值 0.9 左右。

      缺點: 

      這種情況相當于小球從山上滾下來時是在盲目地沿著坡滾,如果它能具備一些先知,例如快要上坡時,就知道需要減速了的話,適應性會更好。

      5. Nesterov accelerated gradient

      梯度更新規則: 

      用 θ?γv_t?1 來近似當做參數下一步會變成的值,則在計算梯度時,不是在當前位置,而是未來的位置上

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      超參數設定值: 

      γ 仍然取值 0.9 左右。

      效果比較: 

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      藍色是 Momentum 的過程,會先計算當前的梯度,然后在更新后的累積梯度后會有一個大的跳躍。 

      而 NAG 會先在前一步的累積梯度上(brown vector)有一個大的跳躍,然后衡量一下梯度做一下修正(red vector),這種預期的更新可以避免我們走的太快。

      NAG 可以使 RNN 在很多任務上有更好的表現。

      目前為止,我們可以做到,在更新梯度時順應 loss function 的梯度來調整速度,并且對 SGD 進行加速。

      我們還希望可以根據參數的重要性而對不同的參數進行不同程度的更新。

      [應對挑戰 2]

      6. Adagrad

      這個算法就可以對低頻的參數做較大的更新,對高頻的做較小的更新,也因此,對于稀疏的數據它的表現很好,很好地提高了 SGD 的魯棒性,例如識別 Youtube 視頻里面的貓,訓練 GloVe word embeddings,因為它們都是需要在低頻的特征上有更大的更新。

      梯度更新規則:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      其中 g 為:t 時刻參數 θ_i 的梯度

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      如果是普通的 SGD, 那么 θ_i 在每一時刻的梯度更新公式為:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      但這里的 learning rate η 也隨 t 和 i 而變:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      其中 G_t 是個對角矩陣, (i,i) 元素就是 t 時刻參數 θ_i 的梯度平方和。

      Adagrad 的優點是減少了學習率的手動調節

      超參數設定值: 

      一般 η 就取 0.01。

      缺點: 

      它的缺點是分母會不斷積累,這樣學習率就會收縮并最終會變得非常小。

      7. Adadelta

      這個算法是對 Adagrad 的改進,和 Adagrad 相比,就是分母的 G 換成了過去的梯度平方的衰減平均值:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      這個分母相當于梯度的均方根 root mean squared (RMS) ,所以可以用 RMS 簡寫:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      其中 E 的計算公式如下,t 時刻的依賴于前一時刻的平均和當前的梯度:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      梯度更新規則:

      此外,還將學習率 η 換成了 RMS[Δθ],這樣的話,我們甚至都不需要提前設定學習率了:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      超參數設定值: 

      γ 一般設定為 0.9。

      8. RMSprop

      RMSprop 是 Geoff Hinton 提出的一種自適應學習率方法。

      RMSprop 和 Adadelta 都是為了解決 Adagrad 學習率急劇下降問題的,

      梯度更新規則: 

      RMSprop 與 Adadelta 的第一種形式相同:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      超參數設定值: 

      Hinton 建議設定 γ 為 0.9, 學習率 η 為 0.001。

      9. Adam

      這個算法是另一種計算每個參數的自適應學習率的方法。

      除了像 Adadelta 和 RMSprop 一樣存儲了過去梯度的平方 vt 的指數衰減平均值 ,也像 momentum 一樣保持了過去梯度 mt 的指數衰減平均值:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      如果 mt 和 vt 被初始化為 0 向量,那它們就會向 0 偏置,所以做了偏差校正, 

      通過計算偏差校正后的 mt 和 vt 來抵消這些偏差:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      梯度更新規則:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      超參數設定值: 

      建議 β1 = 0.9,β2 = 0.999,? = 10e?8

      實踐表明,Adam 比其他適應性學習方法效果要好。

        效果比較

      下面看一下幾種算法在鞍點和等高線上的表現:

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      上面兩種情況都可以看出,Adagrad, Adadelta, RMSprop 幾乎很快就找到了正確的方向并前進,收斂速度也相當快,而其它方法要么很慢,要么走了很多彎路才找到。

      由圖可知自適應學習率方法即 Adagrad, Adadelta, RMSprop, Adam 在這種情景下會更合適而且收斂性更好。

        如何選擇

      如果數據是稀疏的,就用自適用方法,即 Adagrad, Adadelta, RMSprop, Adam。

      RMSprop, Adadelta, Adam 在很多情況下的效果是相似的。

      Adam 就是在 RMSprop 的基礎上加了 bias-correction 和 momentum,

      隨著梯度變的稀疏,Adam 比 RMSprop 效果會好。

      整體來講,Adam 是最好的選擇。

      很多論文里都會用 SGD,沒有 momentum 等。SGD 雖然能達到極小值,但是比其它算法用的時間長,而且可能會被困在鞍點。

      如果需要更快的收斂,或者是訓練更深更復雜的神經網絡,需要用一種自適應的算法。

        參考:

      http://sebastianruder.com/optimizing-gradient-descent/index.html#fn:24 

      http://www.redcedartech.com/pdfs/Select_Optimization_Method.pdf 

      https://stats.stackexchange.com/questions/55247/how-to-choose-the-right-optimization-algorithm

      雷鋒網相關閱讀:

      谷歌開源計算機視覺模型MobileNets:專為不同級別移動設備優化

      OpenBLAS項目與矩陣乘法優化 | AI 研習社

      雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

      關于深度學習優化器 optimizer 的選擇,你需要了解這些

      分享:
      相關文章

      編輯

      聚焦數據科學,連接 AI 開發者。更多精彩內容,請訪問:yanxishe.com
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 永久免费看mv网站入口| 三级国产在线观看| 无码一区二区三区中文字幕| 好紧好湿太硬了我太爽了视频| 91手机在线视频| 超碰777| 国产欧美精品一区二区三区-老狼| 女厕偷窥一区二区三区| 精品人伦一区二区三区潘金莲| 日韩国产精品一本一区馆/在线| 推油少妇久久99久久99久久| 三级色网| 亚洲成人中文在线| 亚洲av无码牛牛影视在线二区| 欧美日韩一线| 香蕉久久国产AV一区二区| 日韩人妻无码一本二本三本| 人人妻人人插视频| 黄色不卡| 国产黄大片在线观看画质优化| 久久精品中文字幕| 在线亚洲人妻| 国产成人AV男人的天堂| 国产人妖ts在线视频观看| 久久精品亚洲精品国产色婷| 欧美日韩一区二区三区在线视频| 免费无遮挡无码视频网站| 插插射啊爱视频日a级| 国产乱人对白| 欧美黑吊大战白妞最新章节| 欧美日韩不卡合集视频| 国产精品123| 人妻超碰在线| 99久久国产精品无码| 99热这里只有成人精品国产| 成熟少妇XXXXX高清视频| 国产线播放免费人成视频播放| 天天综合天天做天天综合| 久久精品国产成人av| 伊人精品久久久大香线蕉| AV无码一区二区三区|