Beispiel #1
0
  public void train() {
    double mu;
    int qid, i, j, pSize;
    for (int n = 0; n < m_maxIter; n++) {
      Utils.shuffle(m_order, m_trainingSize);
      qid = 0;
      while (qid < m_trainingSize) {
        pSize = 0;
        Arrays.fill(m_g, 0.0);

        for (j = 0; j < m_windowSize; j++) { // collect the gradients in mini-batch
          pSize += gradientUpdate(m_queries.get(m_order[qid % m_trainingSize]));
          qid++;
        }

        // Step 4: gradient from regularization
        for (i = 0; i < m_weight.length; i++) m_g[i] = m_g[i] / pSize + m_lambda * m_weight[i];

        mu = Math.random() * m_step;
        for (i = 0; i < m_weight.length; i++) m_weight[i] -= mu * m_g[i];
      }

      m_step *= m_shrinkage;
    }
  }