def _rmsprop(self, grads, cache=None, decay_rate=<NUM_LIT>):
if cache is None:<EOL><INDENT>cache = np.zeros_like(grads)<EOL><DEDENT>cache = decay_rate * cache + (<NUM_LIT:1> - decay_rate) * grads ** <NUM_LIT:2><EOL>step = -grads / np.sqrt(cache + K.epsilon())<EOL>return step, cache<EOL>
Uses RMSProp to compute step from gradients.

        Args:
            grads: numpy array of gradients.
            cache: numpy array of same shape as `grads` as RMSProp cache
            decay_rate: How fast to decay cache

        Returns:
            A tuple of
                step: numpy array of the same shape as `grads` giving the step.
                    Note that this does not yet take the learning rate into account.
                cache: Updated RMSProp cache.