Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. library(Deriv)
  2. library(tidyverse)
  3. library(stringr)
  4. library(latex2exp)
  5. library(glue)
  6.  
  7. # test function
  8. f <- function(x) ((x^2-4*x+4)*(x^2+4*x+2))
  9.  
  10. # plotting the test function
  11. library(ggplot2)
  12. p <- ggplot(data = data.frame(x = 0), mapping = aes(x = x))
  13. p + stat_function(fun = f) +
  14. xlim(-4,4)
  15.  
  16. # derivative of the test function
  17. f_prime <- Deriv(f)
  18.  
  19. # run a gradient descent
  20. x = 3.5
  21. x_initial = x
  22. x_updated_values <- numeric(0)
  23. learning_rate = 0.005
  24.  
  25. vdx = 0
  26. beta = 0.9
  27. for (i in 1:240) {
  28. if (i==1) {x_updated_values[i] = x}
  29. if (i==1) {next}
  30.  
  31. dx = f_prime(x)
  32. vdx = beta*vdx+dx
  33. x = x-learning_rate*vdx
  34. x_updated_values[i] = x
  35. }
  36.  
  37. df <- data_frame(x = x_updated_values,
  38. y = f(x_updated_values))
  39.  
  40. # plotting the parameter updates
  41. x_on_iteration_i <- df$x[i]
  42. y_on_iteration_i <- df$y[i]
  43. p + stat_function(fun = f) +
  44. xlim(-4,4)+
  45. geom_point(data = df, aes(x, y))+
  46. geom_point(x = x_on_iteration_i, y = y_on_iteration_i, color = 'blue', size = 4, alpha = 0.5)+
  47. theme(legend.position="none")+
  48. ylab("f(x)")+
  49. ggtitle(TeX('$f(x) = (x^2-4x+4)(x^2+4x+2)$'),
  50. subtitle = glue("Gradient Descent with Learning Rate: {learning_rate} and beta: {beta}"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement