2016-05-26 27 views
11

我有一個非常簡單的人工神經網絡,使用Tensorflow和AdamOptimizer進行迴歸問題,現在我正在調整所有超參數。我們應該以什麼順序調整神經網絡中的超參數?

現在,我看到了,我必須調整很多不同的超參數:

  • 學習率:初始學習速率,學習速率衰減
  • 的AdamOptimizer需要4個參數(學習率,β1,β2 ,ε),所以我們需要對其進行調整 - 至少小量
  • 批量大小
  • 迭代NB
  • LAMBDA L2-調整參數
  • 數目的神經元,層數
  • 什麼隱藏層激活函數的種類,輸出層
  • 輟學參數

我有2個問題:

1)你看到我可能已經忘記的任何其他超參數? 2)現在,我的調整是相當「手動」,我不知道我沒有以正確的方式做所有事情。 是否有特殊的順序來調整參數?先學習率,然後批量大小,然後... 我不確定所有這些參數是獨立的 - 事實上,我很確定其中有些參數是不相關的。哪些顯然是獨立的,哪些顯然不獨立?我們應該一起調整它們嗎? 是否有任何文章或文章談論正確調整特定順序的所有參數?

編輯: 下面是我得到不同初始學習率,批量大小和正則化參數的圖表。紫色的曲線對我來說是完全不可思議的......因爲成本以其他方式慢慢下降,但是它陷入了較低的準確率。模型是否可能陷入局部最小值?

Accuracy

Cost

對於學習率,我用的衰減: LR(T)= LRI /開方(時代)

感謝您的幫助! Paul

+0

嗨保羅,我想知道你爲什麼使用'LRI/sqrt(epoch)'作爲學習率衰減?我使用'LRI/max(epoch_0,epoch)',在那裏我設置了'epoch_0'到我想要開始衰減的時期,但是如果你把分母的平方根作爲你做。你是否有任何關於這種學習速率衰減的參考,或者你是否自己提出了或多或少的想法? – HelloGoodbye

+0

嗨@HelloGoodbye! 在介紹Adam Optimizer的文章(https://arxiv.org/pdf/1412.6980.pdf)中,他們使用平方根衰減來學習速率來證明定理4.1的收斂性。 –

回答

2

對於不太重要的參數,您可以選擇一個合理的值並堅持下去。

就像你說的那樣,這些參數的最佳值都相互依賴。最簡單的做法是爲每個超參數定義合理的值範圍。然後從每個範圍隨機採樣一個參數,並用該設置訓練一個模型。重複這一堆,然後選擇最好的模型。如果幸運的話,您將能夠分析哪些超參數設置最有效,並從中得出一些結論。

+0

感謝您的回答! 因此,最好隨機選擇所有超參數的值並調整它們,而不是單獨調整每個超參數的值。 –

+0

是的。除非你知道一些超參數並不重要。對於那些你可以選擇一個價值,並優化其餘的。例如,人們可能會隨意決定使用兩層和S形激活,但會優化每層的大小。 – Aaron

+0

謝謝!我添加了從隨機選擇的值中獲​​得的圖表,用於初始學習率,正則化參數和批量大小。我無法弄清楚爲什麼模型會陷入如此低的精確度...... –

3

獲取Tensorboard運行。在那裏畫錯誤。您需要在TB查找要繪製的數據的路徑中創建子目錄。我在腳本中創建該子目錄。所以我改變腳本中的一個參數,在那裏給試用一個名稱,運行它,並將所有的試驗放在同一個圖表中。您很快就會感受到圖形和數據的最有效設置。

+0

謝謝!我不知道我們可以在同一個Tensorboard窗口中顯示不同的圖形。即使它不完全回答我最初的問題,也會這樣看待。 –

5

我一般的順序是:

  1. 批量大小,因爲這將在很大程度上影響未來實驗的訓練時間。
  2. 架構網絡的:
    • 網絡中的神經元的數量的層
  3. 休息(漏失,L2 REG等)

依賴關係:

我會假設最佳VA的

  • 梅毒學習速率和批量大小
  • 學習率和細胞數
  • 數目的神經元和層

的數量強烈地依賴於彼此。雖然我不是這方面的專家。

至於你的超參數:

  • 對於亞當優化: 「在論文推薦值爲EPS = 1E-8,β1的= 0.9,β2 = 0.999。」 (source
  • 對於Adam和RMSProp的學習率,我發現大約0.001的值對於大多數問題都是最優的。
  • 作爲Adam的替代方案,您還可以使用RMSProp,從而將內存佔用減少多達33%。有關更多詳情,請參閱this answer
  • 您也可以調整初始重量值(請參閱All you need is a good init)。雖然,Xavier初始化器似乎是防止不得不調整重量的好方法。
  • 我不會將迭代次數作爲超參數來調整。我訓練網直到驗證錯誤收斂。但是,我給每個運行一次預算。
+0

RMSprop幾乎等同於使用'beta1 = 0'的AdamOptimizer。 (AdamOptimizer最初糾正了RMS項中的偏差,但在足夠的訓練步驟之後,偏差和校正都趨近於零。) –

+0

@CharlesStaats感謝您的輸入!搜索Adam和RMSprop之間的區別,我發現這是:http://cs231n.github.io/neural-networks-3/#ada 「請注意,更新看起來與RMSProp更新完全一樣,除了」平滑「版本的梯度m被用來代替原始的(也許是有噪聲的)梯度矢量dx。在這篇論文中推薦的值是eps = 1e-8,beta1 = 0.9,beta2 = 0.999。使用,並且經常比RMSProp更好地工作。「 所以你是對的。我從現在開始用亞當。 –

0

我不知道任何特定於tensorflow的工具,但最好的策略是首先從基本超參數開始,例如學習率爲0.01,0.001,weight_decay爲0.005,0.0005。然後調整它們。手動操作會花費很多時間,如果您使用caffe,以下是將從一組輸入值中提取超參數並將給出最佳設置的最佳選項。

https://github.com/kuz/caffe-with-spearmint

獲取更多信息,您可以按照本教程中還有:

http://fastml.com/optimizing-hyperparams-with-hyperopt/

對於層數,我建議你所要做的就是先較小的網絡,提高了數據,並在有足夠的數據後,增加模型的複雜性。