I have revised Zeno's algorithm, try to incorporate Xu2011's scaling
technique into SGD and update every elements of P and Q in each
iteration. The old SGD MF article (Tacaks2009JMLR) only updates one row
and column in each iteration, which is not optimal in terms of convex
SGD since the gradient of the regularization is always known regardless
of stochastic oracle (and it has no zero in every row and column!)
However, as the problem is non-convex, its effect is still unknown.

The revision is incomplete, the bias factor should use another scaling
factor as its stepsize is different from others, but now it's just using
old updating rule. This may drastically decrease performance, as shown
in unit tests.

Still no multithreading here