深層学習で行検索方法が使用されていますか?何故なの?


18

多くのオンラインチュートリアルで勾配降下について説明し、それらのほとんどすべてで固定ステップサイズ(学習率)を使用しています。行検索(バックトラック行検索や正確な行検索など)を使用しないのはなぜですか?α


5
「そして、それらのほとんどすべてが固定のステップサイズを使用しています」-確かですか?「学習率」ハイパーパラメータは、ステップサイズを条件に適合させるためのものです。非常に人気のあるAdamアルゴリズムは、ステップサイズを調整します
Aksakal

1
うーん、実際には適応可能なステップサイズ勾配法は少なくとも2011年から存在しており、Wikipediaの確率勾配降下法ページでも引用されています。まさにホットなニュースではありません。バニラSGDでさえ、ほとんどの場合、反復回数(スケジュール)によって変化する学習率で使用されます。さて、非常に良い質問は次のとおりです。なぜ、非常に多くの適応勾配降下法があったとしても、SGDは依然としてディープラーニングの世界を支配していますか?質問は見かけよりもささいなものではありません。
DeltaIV

1
バックトラッキング行検索は方向を修正し、関数を削減する方法を探します。したがって、検索する方向をインテリジェントに選択する方法がない限り、面倒な最適化が必要になります。
アレックスR.

1
([バッチ]勾配降下とは対照的に)行探索がSGDに意味があるとは思わないので、それが理由だと思います。
seanv507

3
行検索があまり一般的ではない理由は、勾配降下でのバッチ処理にあると思われます。バッチを取得してから、勾配を計算します。勾配にノイズがあるため、ラインを前後に移動することはあまり意味がありません。ステップサイズをアニーリングしながら、次のバッチを続行することをお勧めします。
アクサカル

回答:


14

バニラ勾配降下は、ライン検索を使用してより信頼性の高いものにすることができます。これを行うアルゴリズムを作成しましたが、非常に安定したアルゴリズムになります(必ずしも高速ではありません)。

ただし、確率的勾配法に対してライン検索を行うことはほとんど意味がありません。私がこれを言う理由は、完全な損失関数を最小化することに基づいてライン検索を行うと、確率的方法を実行する主な動機の1つをすぐに失ってしまうからです。ここで、更新ごとに完全な損失関数を計算する必要があります。通常、完全な1次導関数の計算に匹敵する計算コストがかかります。計算コストのために完全な勾配の計算を避けたいと考えると、完全な損失関数の計算で大丈夫になることはほとんどありそうにないようです。

編集

@DeltaIVは、これが個々のサンプルだけでなく、ミニバッチにも適用されることを指摘しています。


4
非常に良い(+1)ですが、最後の例で単一のサンプルについて話す理由がわかりません。ミニバッチに基づいてラインサーチを計算することは意味がありませんが、ミニバッチにはまだ512サンプルが含まれていることに同意します(通常、およびImageNetについて話すとき):もちろん、ミニのサンプル数に固定値はありません-バッチですが、1つのサンプルミニバッチは少し極端に感じます。あなたのポイントをより明確にするためだけにそれらを使用しましたか?
DeltaIV

2
@DeltaIV:単一のサンプルは、ほとんどの場合、非常に単純な問題に対してどれだけ悪いのかを指摘するためのものです。512以上の共変量を使用したロジスティック回帰で512個のサンプルを使用してミニバッチを実行すると、同じ問題が発生します。
クリフAB

10

チュートリアルでは、勾配降下について説明します。これは、最適化に使用される最も単純なアルゴリズムの1つであるため、説明が簡単だからです。このようなチュートリアルのほとんどはかなり簡潔であるため、単純な内容に焦点を当てています。深層学習に使用される単純な勾配降下以外にも、少なくともいくつかの一般的な最適化アルゴリズムがあります。実際、人々は通常、より速く収束するため、異なるアルゴリズムを使用してから勾配降下を使用することがよくあります。それらのいくつかは、一定ではない学習率を持っています(例えば、時間とともに減少します)。このようなアルゴリズムのレビューについては、Sebastian Ruder(またはarXivedの論文)が投稿した「勾配降下最適化アルゴリズムの概要」を参照してください。


2
@DeltaIV:すべての「その他の」派手な方法は、SGDの上に構築されています。主な問題は、勾配を計算するためにポイントをランダムにサンプリングするだけでなく、他の方法がローカルの知識を利用してより効率的なジャンプを行うことです。しかし、SGDは非常にシンプルで高速であり、単独では完全にひどいわけではありません。
アレックスR.

2
@AlexR。ポイントは、SGDが単純または高速であることではありません。すべての適切なライブラリはSGD、Adam、AdaGrad、およびRMSProp(およびその他の場合もあります)を実装しているため、単純さは重要ではありません。たとえば、Adamがパラメータレベルの更新を計算するのに費やす時間は、ResNetなどのモデルの全体的なトレーニング時間と比較して無限であるため、速度はさらに重要ではありません。唯一のポイントは、何らかの理由で今日は完全には理解されていないが、SGDはそれらよりも一般化されていることです。だから、基本的にはSOTAを破っしたい場合は、しばしばしている強制的にそれを使用する、または少なくとも訓練中に、後でそれに切り替えます。
DeltaIV

3
@DeltaIVとても興味深い。リンク先の論文を開きました。SGDがAdamなどよりも一般化するという主張については、Wilson et al 2017のプレプリントを参照しています。それが「有名」だと言うとき、あなたは約半年前からよく知られていることを意味しますよね?
アメーバは、モニカを復活させる

2
@DeltaIVありがとう。私は自分自身でディープラーニングの大部分を行っておらず、それをまったく意識していませんでした。2012年頃、私がヒントンのCourseraの講義を見ていたとき、彼は主にRMSpropを支持していました。昨年オートエンコーダー遊んでいたとき、AdamはSGDよりもはるかに高速で動作することを認識し、それ以来、Adamが今日のデフォルトの選択肢であると仮定しました。
アメーバは、モニカを復活させる

3
@CliffABはい、勾配の降下が固有値ベースで動作し、小さな固有値が収束する最後のものである場合、早期停止と正則化の関係は最小二乗で明確に見ることができます。一方、リッジペナルティは小さな固有値にもペナルティを科します。私は今ウィルソンらを一目見ただけでした。上記にリンクされていますが、少なくともそれらの最小二乗の例では、SGDとアダムの違いは、早期停止と後期停止で説明されていません。彼らは、異なるソリューションに収束すると主張しています。
アメーバは、モニカを復活させる
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.