C++ で 5 つのパラメーターを持つ関数の単純な勾配降下法を書きたいと考えています。ここで、実装モデルの問題に出くわしました。引数をベクトル/配列に折りたたむために速度を犠牲にする必要があります。これが私の言いたいことです。次のように関数値と勾配計算を実装できます。
double function(double arg1, double arg2, ..., double arg5);
double functionGradient1(double arg1, double arg2, ..., double arg5);
double functionGradient2(double arg1, double arg2, ..., double arg5);
...
double functionGradient5(double arg1, double arg2, ..., double arg5);
また:
double function(double * args);
double functionGradientAt(double * args, int i);
後者の方が実装が簡単ですが、メモリを常に割り当てたり解放したりすると、速度が大幅に低下するのではないかと心配しています。
私の質問は次のとおりです。
- どちらを選びますか?
- 勾配降下法を実装したことがある場合、そのケースをどのように処理しましたか?