Source: https://people.engr.tamu.edu/huangrh/Spring16/papers_course/matrix_factorization.pdf