[optimization] Stochastic gradient descent with gain schedule a la Leon Bottou

This commit is contained in:
Al
2016-01-08 00:54:17 -05:00
parent 6b164d263e
commit 8b70529711
2 changed files with 47 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
#include "stochastic_gradient_descent.h"
bool stochastic_gradient_descent(matrix_t *theta, matrix_t *gradient, double gamma) {
if (gradient->m != theta->m || gradient->n != theta->n) {
return false;
}
size_t m = gradient->m;
size_t n = gradient->n;
for (size_t i = 0; i < m; i++) {
for (size_t j = 0; j < n; j++) {
double grad_ij = matrix_get(gradient, i, j);
matrix_sub_scalar(theta, i, j, gamma * grad_ij);
}
}
return true;
}
inline bool stochastic_gradient_descent_scheduled(matrix_t *theta, matrix_t *gradient, float lambda, uint32_t t, double gamma_0) {
double gamma = gamma_0 / (1.0 + lambda * gamma_0 * (double)t);
return stochastic_gradient_descent(theta, gradient, gamma);
}