context("Nesterov Momentum")
# From the table in https://jlmelville.github.io/mize/nesterov.html
# Uses R code, but nothing from mize
test_that("classical momentum with constant step size", {
res <- mize(rb0, rosenbrock_fg,
method = "MOM", line_search = "constant",
step0 = 0.001, mom_schedule = 0.95, max_iter = 5,
store_progress = TRUE, use_init_mom = TRUE
)
expect_equal(res$progress$f, c(24.20, 5.35, 25.54, 22.49, 4.32, 18.83),
tol = 1e-3
)
})
# Use Nesterovized momentum (useful if method is e.g. DBD)
test_that("nesterov momentum with constant step size", {
res <- mize(rb0, rosenbrock_fg,
method = "MOM", line_search = "constant",
step0 = 0.001, mom_type = "nesterov", mom_schedule = 0.95,
max_iter = 5, store_progress = TRUE, use_init_mom = TRUE
)
expect_equal(res$progress$f, c(24.20, 34.96, 7.04, 5.02, 3.85, 3.75),
tol = 1e-3
)
})
# Use NAG method directly
test_that("NAG with constant step size", {
res <- mize(rb0, rosenbrock_fg,
method = "NAG", line_search = "constant",
step0 = 0.001, mom_schedule = 0.95,
max_iter = 5, store_progress = TRUE, use_init_mom = TRUE
)
expect_equal(res$progress$f, c(24.20, 34.96, 7.04, 5.02, 3.85, 3.75),
tol = 1e-3
)
})
test_that("classical momentum using initial momentum should make no difference", {
res <- mize(rb0, rosenbrock_fg,
method = "MOM", line_search = "constant",
step0 = 0.001, mom_schedule = 0.95, max_iter = 5,
store_progress = TRUE, use_init_mom = FALSE
)
expect_equal(res$progress$f, c(24.20, 5.35, 25.54, 22.49, 4.32, 18.83),
tol = 1e-3
)
})
# Use Nesterovized momentum
test_that("nesterov momentum with constant step size force gradient descent first iteration", {
res <- mize(rb0, rosenbrock_fg,
method = "MOM", line_search = "constant",
step0 = 0.001, mom_type = "nesterov", mom_schedule = 0.95,
max_iter = 5, store_progress = TRUE, use_init_mom = FALSE
)
expect_equal(res$progress$f, c(24.20, 5.35, 5.26, 4.13, 4.10, 4.07),
tol = 1e-3
)
})
# Use NAG method directly
test_that("NAG with constant step size force gradient descent first iteration", {
res <- mize(rb0, rosenbrock_fg,
method = "NAG", line_search = "constant",
step0 = 0.001, mom_schedule = 0.95,
max_iter = 5, store_progress = TRUE, use_init_mom = FALSE
)
expect_equal(res$progress$f, c(24.20, 5.35, 5.26, 4.13, 4.10, 4.07),
tol = 1e-3
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.