[
https://issues.apache.org/jira/browse/SYSTEMML-1437?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16090445#comment-16090445
]
Mike Dusenberry commented on SYSTEMML-1437:
-------------------------------------------
[~return_01] Thanks for working on this! It will be awesome to have FM models
in SystemML! I've copied the below message from GitHub:
Since FM models can be used for several types of ML tasks, as seen in section
III.B, I would suggest we integrate the FM model in a modular way. I'm a bit
biased, but I think the modular framework used for neural nets is quite
powerful, and I think we could make use of it here. Basically, in that
framework, each module exposes a `forward/backward/init` API, and modules can
be mixed together. An FM model exposing this API could then be mixed with an
L2 loss layer in the `nn` library for regression problems, or with `sigmoid`
and `log_loss` layers for binary classification problems. Basically, we would
have an FM module, and then separate algorithm files for training a regression
FM, a binary-classification FM, etc.
If we go that route, I would suggest having a core `FM` module (i.e., `fm.dml`)
that has the `forward/backward/init` API that the neural net layers have. This
module would be for the core FM model, i.e., the equations in section III.A, as
you've been implementing. The `forward` function would accept the input data
`X`, and the parameters `w0`, `W`, and `V`, and would return the FM outputs
`y`, which is a vector containing a single output for each example. The
`backward` function would accept the upstream gradients w.r.t. `y` (i.e.,
`dloss/dy`, the gradient of the loss function w.r.t. `y`), which is the same
shape as `y`, as well as `X`, `w0`, `W`, and `V`, and would return the
gradients of the loss w.r.t. the parameters, i.e., `dw0`, `dW`, and `dV`. The
`init` function would accept the number of features `n` (or `d` if we update
the notation to be more common, where `d` would not be the same as the "degree"
from the paper) and the factorization dimensionality `k`, and would return
initialized `w0`, `W`, and `V` values. Thus, the core FM model would be
modularized.
Given this modularized FM model in `fm.dml`, we could then have separate files
for training specific types of FM models, such as a regression FM (maybe in
`fm_regression.dml`) that has a `train` (or `fit`) function, and uses the
`forward/backward/init` API from `fm.dml` and `nn/layers/l2_loss.dml` to build
a regression FM. We could then optimize it with the Adam optimizer. That file
could have a `train` (or `fit`) function, as well as `predict` and `eval`
functions for training, prediction, and accuracy evaluation (and other
metrics). We could also create another file for binary classification FM
models that uses `nn/layers/sigmoid/dml` and `nn/layers/log_loss.dml`.
If you like this approach, I would suggest looking at the layers in
[`nn/layers`](https://github.com/apache/systemml/tree/master/scripts/nn/layers)
for the `forward/backward/init` API for inspiration for the core FM module, and
the [MNIST LeNet
example](https://github.com/apache/systemml/blob/master/scripts/nn/examples/mnist_lenet.dml)
for the `train/predict/eval` API for the specific types of FM models.
The modularized implementation will allow others to build DML scripts that
import the FM models and train them within a larger DML script that perhaps
does preprocessing, etc. For command line training of the specific FM models
only, you could create separate scripts, similar to the
[train](https://github.com/apache/systemml/blob/master/scripts/nn/examples/mnist_lenet-train.dml)
and
[predict](https://github.com/apache/systemml/blob/master/scripts/nn/examples/mnist_lenet-predict.dml)
LeNet scripts, which just call functions in the main MNIST LeNet file.
> Implement and scale Factorization Machines using SystemML
> ---------------------------------------------------------
>
> Key: SYSTEMML-1437
> URL: https://issues.apache.org/jira/browse/SYSTEMML-1437
> Project: SystemML
> Issue Type: Task
> Reporter: Imran Younus
> Labels: factorization_machines, gsoc2017, machine_learning,
> mentor, recommender_system
>
> Factorization Machines have gained popularity in recent years due to their
> effectiveness in recommendation systems. FMs are general predictors which
> allow to capture interactions between all features in a features matrix. The
> feature matrices pertinent to the recommendation systems are highly sparse.
> SystemML's highly efficient distributed sparse matrix operations can be
> leveraged to implement FMs in a scalable fashion. Given the closed model
> equation of FMs, the model parameters can be learned using gradient descent
> methods.
> This project aims to implement FMs as described in the first paper:
> http://www.algo.uni-konstanz.de/members/rendle/pdf/Rendle2010FM.pdf
> We'll showcase the scalability of SystemML implementation of FMs by creating
> an end-to-end recommendation system.
> Basic understanding of machine learning and optimization techniques is
> required. Will need to collaborate with the team to resolve scaling and other
> systems related issues.
> Rating: Medium
> Mentors: [~iyounus], [~nakul02]
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)