need to filter out annotated samples, for example by task_t::filter(anotated|label) and maintain a [begin, end) set of iterators updated by std::remove_if
new idea: construct a new criteria that has as parameters the targets of the unlabelled samples besides the model parameters. The loss becomes L(theta) -> L(theta, targets). We can start with targets = 0 (no preference for the class).