1 #ifndef OPTIMIZER_ADAGRAD_H_ 2 #define OPTIMIZER_ADAGRAD_H_ 6 #include "../Optimizer.h" 7 #include "../Utils/sparsepp.h" 20 typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1> Vector;
21 typedef Eigen::Array<Scalar, Eigen::Dynamic, 1> Array;
22 typedef Vector::ConstAlignedMapType ConstAlignedMapVec;
23 typedef Vector::AlignedMapType AlignedMapVec;
25 spp::sparse_hash_map<const Scalar*, Array> m_history;
32 m_lrate(Scalar(0.01)), m_eps(Scalar(1e-7))
35 void reset() { m_history.clear(); }
37 void update(ConstAlignedMapVec& dvec, AlignedMapVec& vec)
40 Array& grad_square = m_history[dvec.data()];
42 if(grad_square.size() == 0)
44 grad_square.resize(dvec.size());
45 grad_square.setZero();
48 grad_square += dvec.array().square();
50 vec.array() -= m_lrate * dvec.array() / (grad_square.sqrt() + m_eps);
void update(ConstAlignedMapVec &dvec, AlignedMapVec &vec)