MachineIntelligenceCore:NeuralNets
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
RMSProp.hpp
Go to the documentation of this file.
1 
25 #ifndef RMSPROP_HPP_
26 #define RMSPROP_HPP_
27 
29 
30 namespace mic {
31 namespace neural_nets {
32 namespace optimization {
33 
38 template <typename eT=float>
39 class RMSProp : public OptimizationFunction<eT> {
40 public:
41 
47  RMSProp(size_t rows_, size_t cols_, eT decay_ = 0.9, eT eps_ = 1e-8) : decay(decay_), eps(eps_) {
48  EG = MAKE_MATRIX_PTR(eT, rows_, cols_);
49  delta = MAKE_MATRIX_PTR(eT, rows_, cols_);
50  // Reset EG and delta.
51  EG->zeros();
52  delta->zeros();
53  }
54 
61  mic::types::MatrixPtr<eT> calculateUpdate(mic::types::MatrixPtr<eT> x_, mic::types::MatrixPtr<eT> dx_, eT learning_rate_) {
62  assert(x_->size() == dx_->size());
63  assert(x_->size() == EG->size());
64 
65  // Update decaying sum of squares of gradients - up to time t.
66  for (size_t i=0; i<(size_t)x_->size(); i++) {
67  (*EG)[i] = decay *(*EG)[i] + (1.0 - decay) * (*dx_)[i] * (*dx_)[i];
68  assert(std::isfinite((*EG)[i]));
69  }
70 
71  // Calculate updates - and store as previous (already) = - RMS(ED)/(RMS(G) * dx
72  for (size_t i=0; i<(size_t)x_->size(); i++){
73  (*delta)[i] = (learning_rate_ / std::sqrt((*EG)[i] + eps)) * (*dx_)[i];
74  assert(std::isfinite((*delta)[i]));
75  }
76 
77  // Return the update.
78  return delta;
79  }
80 
81 protected:
83  eT decay;
84 
86  eT eps;
87 
89  mic::types::MatrixPtr<eT> EG;
90 
92  mic::types::MatrixPtr<eT> delta;
93 };
94 
95 } //: optimization
96 } //: neural_nets
97 } //: mic
98 
99 #endif /* RMSPROP_HPP_ */
mic::types::MatrixPtr< eT > calculateUpdate(mic::types::MatrixPtr< eT > x_, mic::types::MatrixPtr< eT > dx_, eT learning_rate_)
Definition: RMSProp.hpp:61
mic::types::MatrixPtr< eT > delta
Calculated update.
Definition: RMSProp.hpp:92
Abstract class representing interface to optimization function.
mic::types::MatrixPtr< eT > EG
Decaying average of the squares of gradients up to time t ("diagonal matrix") - E[g^2].
Definition: RMSProp.hpp:89
RMSProp(size_t rows_, size_t cols_, eT decay_=0.9, eT eps_=1e-8)
Definition: RMSProp.hpp:47
eT decay
Decay ratio, similar to momentum.
Definition: RMSProp.hpp:83
eT eps
Smoothing term that avoids division by zero.
Definition: RMSProp.hpp:86
Update using RMSProp - adaptive gradient descent with running average E[g^2].
Definition: RMSProp.hpp:39