R:执行梯度下降
R: Performing Gradient Descent
我正在使用 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中有没有梯度下降优化的标准函数?有人可以告诉我怎么做吗?
谢谢!
参考文献:
如评论中所述,(我刚刚了解到)“梯度下降”与“最速下降”相同:
library(pracma)
> steep_descent(c(1, 1), Rastrigin)
$xmin
[1] 0.9949586 0.9949586
$fmin
[1] 1.989918
$niter
[1] 3
我正在使用 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中有没有梯度下降优化的标准函数?有人可以告诉我怎么做吗?
谢谢!
参考文献:
如评论中所述,(我刚刚了解到)“梯度下降”与“最速下降”相同:
library(pracma)
> steep_descent(c(1, 1), Rastrigin)
$xmin
[1] 0.9949586 0.9949586
$fmin
[1] 1.989918
$niter
[1] 3