大規模なデータセットに対して勾配降下が非効率なのはなぜですか?


12

データセットに100万の例、つまりおり、勾配降下を使用してこれらのデータセットでロジスティック回帰または線形回帰を実行するとします。x1,,x106

非効率にする勾配降下法とは何ですか?

時間での勾配降下ステップは次の式で与えられることを思い出してください。t

wt+1=wt+ηtf(x)

ここで、fは損失関数です。

上記の手順でアルゴリズムが非効率になる原因となる異常は見当たりません。の計算ですか?この操作は事前に計算できませんでした。つまり、各すでに計算されていて、各データポイントで単純に評価できませんでしたFf(x) XIfxxi?


に比べて効率が悪い...?大きなデータセットの場合、最小二乗でも非効率的です。がアルゴリズム何を行うかについて有意義なアイデアを得るには、大きなO表記が必要です。すべてのGDアルゴリズムに同じ大きなOがあるわけではありません(そうですか?)n
AdamO

回答:


6

勾配降下が非効率的であるという主張にコンテキストを提供すると役立ちます。何に対して非効率ですか?

ここで欠けているコンテキストは、機械学習における確率的またはバッチ勾配降下法との比較だと思います。このコンテキストで質問に答える方法は次のとおりです。ハイパーパラメーターも含め、モデルのパラメーターを最適化しています。したがって、コスト関数があります。ここで、データ、およびパラメータのベクトル、および -損失関数です。このコストを最小化するには、パラメーター勾配降下法を使用しますX I Θ L θのjはi=1nL(xi|Θ)xiΘL() θj

θji=1nL(Θ|xi)

したがって、すべてのデータの合計を取得する必要があることがわかります。残念ながら、これは勾配降下の各ステップでデータをループし続けるためです。これが、バッチおよび確率的勾配降下法です。データセットからサンプリングし、完全なセットではなくサンプルの勾配を計算した場合はどうでしょうか。 ここで、はサンプル観測数です。したがって、サンプルが合計セットの100分の1であれば、計算を100倍高速化できます!明らかに、これは学習を長引かせるノイズを導入しますが、ノイズは割合で減少しますxi=1,,nNSS

θjk=1nsL(Θ|xk)
nss nnで計算量が増加するため、このトリックが機能する場合があります。n

代わりに、合計が計算されるまで待つ代わりに、これをバッチに分割し、各バッチにステップを実行することもできます。これにより、データセット全体の合計が計算されるまでにMステップを実行できます。これらはノイズの多いステップですが、ノイズは時間の経過とともにキャンセルされます。M s = 1n s i s = 1i=1ns=1Mis=1ns


19

勾配降下が非効率になる可能性のある方法は2つあります。興味深いことに、それらはそれぞれ独自の修正方法につながりますが、これはほぼ反対の解決策です。2つの問題は次のとおりです。

(1)勾配降下の更新が多すぎます。

(2)各勾配降下ステップは非常に高価です。

(1)に関して、勾配降下法を2次導関数に関する情報を考慮した方法と比較すると、勾配降下法は各反復での損失の改善に関して非常に非効率になる傾向があります。非常に標準的な方法であるニュートン法は、一般に収束するのにはるかに少ない反復を必要とします。つまり、ロジスティック回帰の場合、ニュートン法の10回の反復は、勾配降下の5,000回の反復によって提供されるソリューションよりも損失が少ないことがよくあります。線形回帰の場合、これはさらに極端です。閉じた形式のソリューションがあります!ただし、予測子の数が非常に多くなると(つまり500 +)、Newtonの方法/線形回帰の直接解法は、反復ごとに非常に高価になる可能性があります。 必要な行列演算の量により、勾配降下は反復あたりのコストがかなり低くなります。

(2)に関しては、勾配降下の各反復が計算するには高すぎるほど大きなデータセットを持つことが可能です。勾配の計算には操作が必要です( =サンプルサイズ、 =共変量の数)。ながらの値について現代のコンピュータ上のすべてに問題ではありませんのような確かに、、あろう。この場合、確率的勾配降下法など、データの小さなサブセットに基づいて導関数を近似する方法がより魅力的ですnO(nk)nkn=106k<100n=1012k=103

これらの修正はほぼ正反対で、ニュートンの方法のようなものは更新ごとに費用がかかりますが(損失の変化の観点から)より効率的であり、一方、確率的勾配降下は実際には効率的ではありませんが、更新ごとにはるかに計算的に安価です。


すばらしい答えをありがとう。 =共変量の数とはどういう意味ですか?私はこの用語に慣れていませんk
カルロス-マングース-危険

2
@Learningonepageatatime:共変量=予測変数。
クリフAB

9

まず、表記法の改善を提案させてください。特に、損失関数をf x ではなくで示しましょう。文字Lを使用することは、私がL oss を扱っていることを思い出させるので、単に私の個人的な好みです。より実質的な変化は、損失がデータxではなく重みwの関数であることを明確にしていることです。重要なのは、勾配がxではなくwを基準にしていることです。そう L W = LL(w)f(x)LwxwxDはあなたのデータの次元です。

L(w)=(Lw1,,LwD),
D

wx

L(w)=i=1N(yiwTxi)2.
L(w)wNxN=106

3

簡単な答え:勾配を計算するには、すべてのデータポイントを合計する必要があります。大量のデータがある場合、時間がかかります。

ここに詳細な回答があります。

確率的勾配降下は、標準の勾配降下と比較して、どのように時間を節約できますか?


一方、反復法(勾配まとも)に加えて直接法があることに常に留意してください。最小二乗問題を解決したい場合、直接法は非常に効率的です。たとえば、QR分解。機能が多すぎない場合は、非常に高速です。

検証すると、驚かれるかもしれません。2つの機能を備えた500万のデータポイント、線形回帰/最小二乗を解くには数秒かかります。

x=matrix(runif(1e7),ncol=2)
y=runif(5e6)
start_time <- Sys.time()
lm(y~x)
end_time <- Sys.time()
end_time - start_time
# Time difference of 4.299081 secs

1

あなたが言及した2つの例は通常凸型ですが、非凸問題について1点追加します。私の意見では、(バッチ)勾配降下が「非効率的」と見なされる主な理由は2つあります。関数の「大きな」合計の勾配を計算する計算の労力に関する最初のポイントは、他の回答ですでに非常に明確に概説されています。ただし、凸でない問題の場合、GDには通常、「近い」ローカルミニマムで立ち往生するという問題があります。この最小値は、グローバルな最小値と比較して非常に悪い場合があります。SGDまたはミニバッチGDには、(少なくとも部分的に)ランダムに歩き回る「利点」があるため、より良いローカルミニマムを見つける可能性があります。こちらのこの履歴書の回答をご覧ください。またはこの他の履歴書投稿 ランダム性がどのように有益であるかを概説します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.