1 #ifndef OPTIMIZER_RMSPROP_H_ 2 #define OPTIMIZER_RMSPROP_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;
33 m_lrate(Scalar(0.001)), m_eps(Scalar(1e-6)), m_decay(Scalar(0.9))
36 void reset() { m_history.clear(); }
38 void update(ConstAlignedMapVec& dvec, AlignedMapVec& vec)
41 Array& grad_square = m_history[dvec.data()];
43 if(grad_square.size() == 0)
45 grad_square.resize(dvec.size());
46 grad_square.setZero();
49 grad_square = m_decay * grad_square + (Scalar(1) - m_decay) * dvec.array().square();
51 vec.array() -= m_lrate * dvec.array() / (grad_square + m_eps).sqrt();
void update(ConstAlignedMapVec &dvec, AlignedMapVec &vec)