We need an init_fn for nonnegative factorization (this can simply be a wrapper to nnmf) and for nonnegative loadings (with arbitrary factors). (And similarly, for nonnegative factors.) For the latter, I have been running the default udv_si and then using either u and v or -u and -v depending on whether the negative or positive part of u is larger (in a L_2 sense, which seems to work better than L_1, but maybe L_\infty could also work well). I don't whether this is the best way to do it.