【问题标题】:R: Performing Gradient DescentR:执行梯度下降
【发布时间】: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


【解决方案1】:

如 cmets 所示,(我刚刚了解到)“梯度下降”与“最速下降”相同:

library(pracma)

> steep_descent(c(1, 1), Rastrigin)

$xmin
[1] 0.9949586 0.9949586

$fmin
[1] 1.989918

$niter
[1] 3

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 2011-09-27
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2021-12-18
    • 2018-02-21
    相关资源
    最近更新 更多