当两次迭代“非常相似”时终止梯度下降算法

时间:2018-04-20 02:31:08

标签: r terminate gradient-descent

我在R中实现了梯度下降算法以找到函数f(x)= 1-xe-x的最小值,它非常有效并且给出了[1] 1作为输出,但是一直迭代直到所有30.000次迭代结束,即使迭代之间只有微小的变化(小数点后面有许多数字)。

如何在代码中添加一些函数,一旦最后两次迭代非常相似就会终止它?

这是我的代码:

# learning rate
epsilon = 0.02

# set up a number of iteration
iter = 30000

# define the gradient of f(x) with given f'(x)
gradient = function(x) return(-exp(-x) + x * exp(-x))

# randomly initialize the x
x = 8

# create a vector to contain all xs for all steps
x.All = vector("numeric",iter)

# gradient descent method to find the minimum
for(i in 1:iter){
  x = x - epsilon*gradient(x)
  x.All[i] = x
  print(x)
}

我试过添加以下内容而没有效果。

round (x, digits = 3)
if (x == x - epsilon*gradient) {
break}

我认为浮点数x永远不等于x - epsilon *渐变?

1 个答案:

答案 0 :(得分:0)

您考虑的停止规则存在问题:

if (x == x - epsilon*gradient) break

只有当epsilon * gradient正好为零时才会满足条件,但是当该数量足够接近零时,循环应该停止。例如,如果espilon=1和定义eps2是一个小数字(0.0001),那么

if (abs(gradient(x)) < eps2) break

会奏效。

相关问题