1

私は現在、機械学習アルゴリズムに取り組んでいますが、Matlabを使用するfminuncと、パラメーターを手動で更新した場合と比較して、アルゴリズムが非常に高速に(数回の反復で)グローバル最小値に収束することに気付きました。

thetas[j] = thetas[j] - (alpha*gradient)/sampleNum;

alpha素朴に(ステッププロポーション)は一定だと思っているからだと思います。

fminuncでは、 Cのようなものをどのように実装するのでしょうか?

alpha現在のコストが以前のコストよりも大きいことが判明した場合は、大きいものから始めて調整しようとしました。これに伴う問題は、最小化された関数の形状が線形でない場合に発生します。これは、alpha最初は非常に小さい値を取得し、関数の形状が「フラット」になる傾向がある場合(そしてより大きなステップを踏む可能性がある場合)に大きな値に戻らない可能性があるためです。 。

4

1 に答える 1

4

Matlabfminuncは実際には最急降下法を使用しませんが、ニュートンのような方法(BFGSベースの準ニュートン法または問題のサイズに応じた信頼領域)を使用します。これは、ステップをどのように選択しても、一般に最急降下法よりも大幅に高速です。サイズ。

より高速な収束が必要な場合は、この種の方法を検討する必要があります。

于 2012-12-22T01:33:43.967 に答える