首页 > 解决方案 > 在 R 中实现梯度下降时的问题

问题描述

我在 R 中为指数函数实现梯度下降时遇到问题。

比方说

foo <- function(x) {
  y = -2 + 2.5 * exp(0.1*x^2-0.7*x)
  return(y) }

那是我的指数函数

 grad <- function(x) {
     y = 2.5*exp(0.1*x^2-0.7*x)*(0.2*x-0.7)
     return(y) }

是 foo(x) 的梯度函数。

任务是实现一个名为

gdescent <- function(x0, fc, grd, diff, step) {}

在哪里

该函数的结果应该是一个列表,其中包含

每次迭代后的更新规则为:

xi+1 = xi - step * grd(xi) # i didn't understand this at all

我如何在 R 中实现它?

到目前为止我对梯度下降法的理解:

  1. 选择一个随机初始值 x0 在梯度函数 grd(x) 中插入 x0
  2. 如果 grd(x0) < 0,则将 x0 减少“步”(x0+1=x0-步);
  3. 如果 grd(x0) > 0,则将 x0 增加“步长”(x0+1=x0+步长);并返回 2) 以 x0+1 作为初始值

到目前为止我的解决方案:

gdescent <- function(x0, fc, grd, diff, step) {
x = x0
x_history = vector("numeric", iter)    
for(i in 1:iter) {
   x = x - step * grad(x)
   if( x > diff ) {                 #not sure how to proceed here
  }                                 
}

如果没有固定数量的迭代,我该如何解决这个问题?所以没有初始化iter

标签: r

解决方案


推荐阅读