nabla-xp: improvements, + test
This commit is contained in:
parent
11e8ff59e4
commit
4b20e4ef0c
2 changed files with 17 additions and 6 deletions
22
decons.lisp
22
decons.lisp
|
@ -72,6 +72,15 @@
|
||||||
(lambda (theta)
|
(lambda (theta)
|
||||||
(nabla-xp obj theta))))
|
(nabla-xp obj theta))))
|
||||||
|
|
||||||
|
;;;; optimization by revision (= gradient descent)
|
||||||
|
|
||||||
|
(defvar *revisions* 10)
|
||||||
|
(defvar *alpha* 0.01)
|
||||||
|
|
||||||
|
;;;; experimental differentiation
|
||||||
|
|
||||||
|
(defvar *diff-variation* 0.01)
|
||||||
|
|
||||||
(defun nabla-xp (fn args)
|
(defun nabla-xp (fn args)
|
||||||
"Determine gradients by experiment: vary args and record changes."
|
"Determine gradients by experiment: vary args and record changes."
|
||||||
(let ((base (funcall fn args))
|
(let ((base (funcall fn args))
|
||||||
|
@ -82,12 +91,13 @@
|
||||||
(reverse res)))
|
(reverse res)))
|
||||||
|
|
||||||
(defun diff (fn vargs ix base)
|
(defun diff (fn vargs ix base)
|
||||||
(let* ((vx 0.01) argsx r+ r-)
|
(let* ((vdiff *diff-variation*)
|
||||||
(setf argsx (copy-seq vargs))
|
(val (svref vargs ix))
|
||||||
(setf (svref argsx ix) (+ (svref vargs ix) vx))
|
(argsx (copy-seq vargs)) r+ r-)
|
||||||
(setf r+ (/ (- (funcall fn (map 'list #'identity argsx)) base) vx))
|
(setf (svref argsx ix) (+ val vdiff))
|
||||||
(setf (svref argsx ix) (- (svref vargs ix) vx))
|
(setf r+ (/ (- (funcall fn (map 'list #'identity argsx)) base) vdiff))
|
||||||
(setf r- (/ (- base (funcall fn (map 'list #'identity argsx))) vx))
|
(setf (svref argsx ix) (- val vdiff))
|
||||||
|
(setf r- (/ (- base (funcall fn (map 'list #'identity argsx))) vdiff))
|
||||||
;(util:lgi base r+ r-)
|
;(util:lgi base r+ r-)
|
||||||
(/ (+ r+ r-) 2)))
|
(/ (+ r+ r-) 2)))
|
||||||
|
|
||||||
|
|
|
@ -71,4 +71,5 @@
|
||||||
(setf decons:*trials* nil)
|
(setf decons:*trials* nil)
|
||||||
(decons:try objective '(0.0 0.0))
|
(decons:try objective '(0.0 0.0))
|
||||||
(decons:try objective '(0.0099 0.0))
|
(decons:try objective '(0.0099 0.0))
|
||||||
|
(== (decons:nabla-xp objective '(0.0 0.0)) '(-62.999725 -21.0001))
|
||||||
))
|
))
|
||||||
|
|
Loading…
Add table
Reference in a new issue