【发布时间】:2022-01-21 01:13:51
【问题描述】:
我正在使用 R 编程语言。
我正在尝试了解有关优化算法的更多信息,并且作为学习练习 - 我想尝试使用 R 编程语言使用(著名的)梯度下降算法优化数学函数。
例如,我想尝试“优化”(即找出产生“y”的最小可能值的“x1 和 x2”的值)以下函数(此函数称为 Rastrign 函数,由于其不规则和复杂的形状,是一种流行的用于测试优化算法的函数):
我首先在R中定义了这个函数:
Rastrigin <- function(x)
{
return(20 + x[1]^2 + x[2]^2 - 10*(cos(2*pi*x[1]) + cos(2*pi*x[2])))
}
然后,我尝试做一些研究,看看 R 中是否有任何标准和常见的梯度下降实现。例如,我发现了 (base) R 中的“optim()”函数,它提供了很多选择流行的优化算法,例如“BFGS”、“模拟退火”和“Nelder-Meade”。例如,下面我使用“BFGS”算法的一个变体来优化 Rastrign 函数:
#run BFGS optimization algorithm:
optim(par = c(2,2), Rastrigin, lower = c(-5,-5), upper = c(5,5), method = "L-BFGS-B")
$par
[1] 5.453531e-15 5.453531e-15
$value
[1] 0
$counts
function gradient
7 7
$convergence
[1] 0
$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
根据上述代码的结果,BFGS 算法似乎能够通过返回非常接近真实最小值的 x1 和 x2 值成功找到该函数的最小值(使用三角函数,我们可以看到如果 "x1 = x2 = 0", f(x1,x2) = 20 + 0 + 0 - 10*(cos(0) + cos(0)) = 20 - 10*2 = 20 - 20 = 0 )。
我的问题:我尝试在 R 中寻找一个允许您执行梯度下降优化的标准函数,但我找不到任何东西。
有谁知道 R 中是否有用于梯度下降优化的标准函数?有人可以告诉我怎么做吗?
谢谢!
参考资料:
【问题讨论】:
-
使用 google 并查看 cran.r-project.org/web/views/Optimization.html 请注意,包推荐被视为基于意见,因此与 SO 无关。
-
感谢您的回复!我的问题与其说是包装推荐,不如说是如何在 R 中完成?我查看了您发布的链接,似乎有一个精确的梯度下降算法......除非它在列表中使用不同的名称?非常感谢!
-
最速下降是梯度下降的一种特殊情况,因此您也可以寻找它。同时搜索 SO 的 R 标签。
标签: r algorithm optimization