Andrew Ngのスタンフォードでの無料のオンライン機械学習コースのビデオを見ていきます。彼は線形回帰を解決するアルゴリズムとして勾配降下法を議論し、それを実行するためにOctaveで関数を記述します。おそらくこれらの関数をRで書き換えることができますが、私の質問はlm()関数が線形回帰の出力をすでに与えていないかということです。なぜ独自の勾配降下関数を書きたいのですか?いくつかの利点がありますか、それとも純粋に学習演習としてですか?lm()は勾配降下を行いますか?
Andrew Ngのスタンフォードでの無料のオンライン機械学習コースのビデオを見ていきます。彼は線形回帰を解決するアルゴリズムとして勾配降下法を議論し、それを実行するためにOctaveで関数を記述します。おそらくこれらの関数をRで書き換えることができますが、私の質問はlm()関数が線形回帰の出力をすでに与えていないかということです。なぜ独自の勾配降下関数を書きたいのですか?いくつかの利点がありますか、それとも純粋に学習演習としてですか?lm()は勾配降下を行いますか?
回答:
勾配降下法は、実際には、線形回帰の問題を解決するのにかなり貧弱な方法です。lm()
R の関数は内部的にQR分解の形式を使用します。これはかなり効率的です。ただし、勾配降下法は一般に有用な手法であり、この単純なコンテキストで紹介する価値があるため、より複雑な問題で勾配降下法を適用する方法が明確になります。学習演習として独自のバージョンを実装する場合、それは価値のあることlm()
ですが、線形回帰を実行するツールだけが必要な場合はより良い選択です。
オンライン勾配が有用な理由は、大規模アプリケーション向けです。いずれにせよ、今ではそれを実装するライブラリがあるので、プログラムする必要はありません。それは物事がどのように機能するかを学ぶ良い方法です。
レオン・ボットーの言葉:
大規模な機械学習は、エンジニアリングの問題として最初にアプローチされました。たとえば、より大きなトレーニングセットを活用するために、並列コンピューターを使用して既知の機械学習アルゴリズムを実行したり、既知の機械学習目的関数を最適化するために、より高度な数値手法を適用したりできます。そのようなアプローチは、統計的側面を機械学習問題の計算的側面から切り離すことができるという魅力的な仮定に依存しています。
この研究は、この仮定が間違っていること、そしてそれを断念することで学習アルゴリズムがより効果的になることを示しています。新しい理論的フレームワークでは、学習アルゴリズムに対する近似最適化の影響が考慮されます。
この分析は、小規模および大規模な学習問題の場合の明確なトレードオフを示しています。小規模な学習問題は、通常の近似と推定のトレードオフの影響を受けます。大規模な学習問題は、自明でない方法で基礎となる最適化アルゴリズムの計算の複雑さを含む定性的に異なるトレードオフの影響を受けます。たとえば、確率的勾配降下(SGD)アルゴリズムは平凡な最適化アルゴリズムのように見えますが、大規模な学習問題で非常にうまく機能することが示されています。