我想为 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);
最后一个更容易实现,但是如果我要不断分配/释放内存,恐怕我会失去很多速度。
我的问题是:
- 你会选择哪一个?
- 如果你曾经实现过梯度下降,你是如何处理这种情况的?