|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef _MIRA_OPTIMISER_H_ |
|
#define _MIRA_OPTIMISER_H_ |
|
|
|
#include <vector> |
|
|
|
#include "moses/ScoreComponentCollection.h" |
|
|
|
|
|
namespace Mira |
|
{ |
|
|
|
class Optimiser |
|
{ |
|
public: |
|
Optimiser() {} |
|
|
|
virtual size_t updateWeightsHopeFear( |
|
Moses::ScoreComponentCollection& weightUpdate, |
|
const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesHope, |
|
const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesFear, |
|
const std::vector<std::vector<float> >& bleuScoresHope, |
|
const std::vector<std::vector<float> >& bleuScoresFear, |
|
const std::vector<std::vector<float> >& modelScoresHope, |
|
const std::vector<std::vector<float> >& modelScoresFear, |
|
float learning_rate, |
|
size_t rank, |
|
size_t epoch, |
|
int updatePosition = -1) = 0; |
|
}; |
|
|
|
class Perceptron : public Optimiser |
|
{ |
|
public: |
|
virtual size_t updateWeightsHopeFear( |
|
Moses::ScoreComponentCollection& weightUpdate, |
|
const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesHope, |
|
const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesFear, |
|
const std::vector<std::vector<float> >& bleuScoresHope, |
|
const std::vector<std::vector<float> >& bleuScoresFear, |
|
const std::vector<std::vector<float> >& modelScoresHope, |
|
const std::vector<std::vector<float> >& modelScoresFear, |
|
float learning_rate, |
|
size_t rank, |
|
size_t epoch, |
|
int updatePosition = -1); |
|
}; |
|
|
|
class MiraOptimiser : public Optimiser |
|
{ |
|
public: |
|
MiraOptimiser() : |
|
Optimiser() { } |
|
|
|
MiraOptimiser(float slack) : |
|
Optimiser(), |
|
m_slack(slack), |
|
m_scale_margin(false), |
|
m_scale_update(false), |
|
m_boost(false), |
|
m_normaliseMargin(false), |
|
m_sigmoidParam(1.0) { } |
|
|
|
MiraOptimiser(float slack, bool scale_margin, bool scale_update, |
|
bool boost, bool normaliseMargin, float sigmoidParam) : |
|
Optimiser(), |
|
m_slack(slack), |
|
m_scale_margin(scale_margin), |
|
m_scale_update(scale_update), |
|
m_boost(boost), |
|
m_normaliseMargin(normaliseMargin), |
|
m_sigmoidParam(sigmoidParam) { } |
|
|
|
size_t updateWeights( |
|
Moses::ScoreComponentCollection& weightUpdate, |
|
const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValues, |
|
const std::vector<std::vector<float> >& losses, |
|
const std::vector<std::vector<float> >& bleuScores, |
|
const std::vector<std::vector<float> >& modelScores, |
|
const std::vector< Moses::ScoreComponentCollection>& oracleFeatureValues, |
|
const std::vector< float> oracleBleuScores, |
|
const std::vector< float> oracleModelScores, |
|
float learning_rate, |
|
size_t rank, |
|
size_t epoch); |
|
virtual size_t updateWeightsHopeFear( |
|
Moses::ScoreComponentCollection& weightUpdate, |
|
const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesHope, |
|
const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesFear, |
|
const std::vector<std::vector<float> >& bleuScoresHope, |
|
const std::vector<std::vector<float> >& bleuScoresFear, |
|
const std::vector<std::vector<float> >& modelScoresHope, |
|
const std::vector<std::vector<float> >& modelScoresFear, |
|
float learning_rate, |
|
size_t rank, |
|
size_t epoch, |
|
int updatePosition = -1); |
|
size_t updateWeightsAnalytically( |
|
Moses::ScoreComponentCollection& weightUpdate, |
|
Moses::ScoreComponentCollection& featureValuesHope, |
|
Moses::ScoreComponentCollection& featureValuesFear, |
|
float bleuScoreHope, |
|
float bleuScoreFear, |
|
float modelScoreHope, |
|
float modelScoreFear, |
|
float learning_rate, |
|
size_t rank, |
|
size_t epoch); |
|
|
|
void setSlack(float slack) { |
|
m_slack = slack; |
|
} |
|
|
|
private: |
|
|
|
float m_slack; |
|
|
|
|
|
|
|
bool m_scale_margin; |
|
|
|
|
|
bool m_scale_update; |
|
|
|
|
|
bool m_boost; |
|
|
|
|
|
bool m_normaliseMargin; |
|
|
|
|
|
float m_sigmoidParam ; |
|
}; |
|
} |
|
|
|
#endif |
|
|