Sep 062007

This demo was written by me about three months ago when I was illustrating the algorithm of “Gradient Descent” in the class of “Data Mining & Machine Learning”. I like to combine iterations (or loopings) with animated pictures, because it’s simple and heuristic, and of course, it’s easy in R: just use Sys.sleep() to control the time of steps of your demonstration and some low-level graphics functions such as lines(), points(), rect(), polygon() and segments(), etc to illustrate the process of your algorithm. To understand the figure below, you need to be clear about what’s contour plot.

Process of Minimization by Gradient Descent (2D)

The code for the above example is as follows:

Downdload the file here
op = par(pty = "s", mar = c(2, 1, 2, 0), cex.axis = 0.75,
    cex.main = 0.85)
x2 = x1 = seq(-2 * pi, 2 * pi, 0.1)
f = function(x, y) x^2 + 3 * sin(y)
contour(x1, x2, outer(x1, x2, f), col = "red", main = "")
mtext(side = 3, expression(z == x[1]^2 + 3 * sin(x[2])))
for (i in 1:3) {
    x = unlist(locator(1))
    s = 0.05
    newx = x - s * c(2 * x[1], 3 * cos(x[2]))
    eps = 0.001
    gap = abs(f(newx[1], newx[2]) - f(x[1], x[2]))
    while (gap > eps) {
        arrows(x[1], x[2], newx[1], newx[2], length = 0.075,
            col = "blue")
        x = newx
        newx = x - s * c(2 * x[1], 3 * cos(x[2]))
        gap = abs(f(newx[1], newx[2]) - f(x[1], x[2]))
        Sys.sleep(gap/3)
    }
}
par(op)

Nothing special, huh?

Related Posts

2 Responses to “Process of Minimization by Gradient Descent (2D)”

Comments (2)
  1. wkdenny says:

    刚好在看最速下降法,谢谢

Leave a Reply

(required)

(required)

WWW.YIHUI.NAME XIE@YIHUI.NAME © 2007 - 2012 by Yihui Xie