constructor(opt) {
        this.update(opt || {});
        this.uuid = ++Optim.INDEX
    }
How to use this optimizer:

1. First initialize with options e.g.
    var optimizer = new Optim({
        method: 'adadelta',
        regularization: { l2: 1e-2 },
        clip: 5
    })
2. Then create a (weight) tensor:
    var toOptimize = new Tensor(100)
3. And prepare the tensor for optimization
    optimizer.initialize(toOptimize)
4. Then add a gradient to the tensor (not practical like this, but you get the hang of it)
    toOptimize.dw[50] = 1.0
5. Accumulate gradient (do this n-times if n is your batch count)
    optimizer.accumulate(toOptimize)
6. Finally apply gradient optimization via
    optimizer.apply(toOptimize)