00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _MIRA_OPTIMISER_H_
00020 #define _MIRA_OPTIMISER_H_
00021
00022 #include <vector>
00023
00024 #include "moses/ScoreComponentCollection.h"
00025
00026
00027 namespace Mira
00028 {
00029
00030 class Optimiser
00031 {
00032 public:
00033 Optimiser() {}
00034
00035 virtual size_t updateWeightsHopeFear(
00036 Moses::ScoreComponentCollection& weightUpdate,
00037 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesHope,
00038 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesFear,
00039 const std::vector<std::vector<float> >& bleuScoresHope,
00040 const std::vector<std::vector<float> >& bleuScoresFear,
00041 const std::vector<std::vector<float> >& modelScoresHope,
00042 const std::vector<std::vector<float> >& modelScoresFear,
00043 float learning_rate,
00044 size_t rank,
00045 size_t epoch,
00046 int updatePosition = -1) = 0;
00047 };
00048
00049 class Perceptron : public Optimiser
00050 {
00051 public:
00052 virtual size_t updateWeightsHopeFear(
00053 Moses::ScoreComponentCollection& weightUpdate,
00054 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesHope,
00055 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesFear,
00056 const std::vector<std::vector<float> >& bleuScoresHope,
00057 const std::vector<std::vector<float> >& bleuScoresFear,
00058 const std::vector<std::vector<float> >& modelScoresHope,
00059 const std::vector<std::vector<float> >& modelScoresFear,
00060 float learning_rate,
00061 size_t rank,
00062 size_t epoch,
00063 int updatePosition = -1);
00064 };
00065
00066 class MiraOptimiser : public Optimiser
00067 {
00068 public:
00069 MiraOptimiser() :
00070 Optimiser() { }
00071
00072 MiraOptimiser(
00073 float slack, bool scale_margin, bool scale_margin_precision,
00074 bool scale_update, bool scale_update_precision, bool boost, bool normaliseMargin, float sigmoidParam) :
00075 Optimiser(),
00076 m_slack(slack),
00077 m_scale_margin(scale_margin),
00078 m_scale_margin_precision(scale_margin_precision),
00079 m_scale_update(scale_update),
00080 m_scale_update_precision(scale_update_precision),
00081 m_precision(1),
00082 m_boost(boost),
00083 m_normaliseMargin(normaliseMargin),
00084 m_sigmoidParam(sigmoidParam) { }
00085
00086 size_t updateWeights(
00087 Moses::ScoreComponentCollection& weightUpdate,
00088 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValues,
00089 const std::vector<std::vector<float> >& losses,
00090 const std::vector<std::vector<float> >& bleuScores,
00091 const std::vector<std::vector<float> >& modelScores,
00092 const std::vector< Moses::ScoreComponentCollection>& oracleFeatureValues,
00093 const std::vector< float> oracleBleuScores,
00094 const std::vector< float> oracleModelScores,
00095 float learning_rate,
00096 size_t rank,
00097 size_t epoch);
00098 virtual size_t updateWeightsHopeFear(
00099 Moses::ScoreComponentCollection& weightUpdate,
00100 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesHope,
00101 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesFear,
00102 const std::vector<std::vector<float> >& bleuScoresHope,
00103 const std::vector<std::vector<float> >& bleuScoresFear,
00104 const std::vector<std::vector<float> >& modelScoresHope,
00105 const std::vector<std::vector<float> >& modelScoresFear,
00106 float learning_rate,
00107 size_t rank,
00108 size_t epoch,
00109 int updatePosition = -1);
00110 size_t updateWeightsHopeFearSelective(
00111 Moses::ScoreComponentCollection& weightUpdate,
00112 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesHope,
00113 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesFear,
00114 const std::vector<std::vector<float> >& bleuScoresHope,
00115 const std::vector<std::vector<float> >& bleuScoresFear,
00116 const std::vector<std::vector<float> >& modelScoresHope,
00117 const std::vector<std::vector<float> >& modelScoresFear,
00118 float learning_rate,
00119 size_t rank,
00120 size_t epoch,
00121 int updatePosition = -1);
00122 size_t updateWeightsHopeFearSummed(
00123 Moses::ScoreComponentCollection& weightUpdate,
00124 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesHope,
00125 const std::vector<std::vector<Moses::ScoreComponentCollection> >& featureValuesFear,
00126 const std::vector<std::vector<float> >& bleuScoresHope,
00127 const std::vector<std::vector<float> >& bleuScoresFear,
00128 const std::vector<std::vector<float> >& modelScoresHope,
00129 const std::vector<std::vector<float> >& modelScoresFear,
00130 float learning_rate,
00131 size_t rank,
00132 size_t epoch,
00133 bool rescaleSlack,
00134 bool makePairs);
00135 size_t updateWeightsAnalytically(
00136 Moses::ScoreComponentCollection& weightUpdate,
00137 Moses::ScoreComponentCollection& featureValuesHope,
00138 Moses::ScoreComponentCollection& featureValuesFear,
00139 float bleuScoreHope,
00140 float bleuScoreFear,
00141 float modelScoreHope,
00142 float modelScoreFear,
00143 float learning_rate,
00144 size_t rank,
00145 size_t epoch);
00146
00147 void setSlack(float slack) {
00148 m_slack = slack;
00149 }
00150
00151 void setPrecision(float precision) {
00152 m_precision = precision;
00153 }
00154
00155 private:
00156
00157 float m_slack;
00158
00159
00160 bool m_scale_margin, m_scale_margin_precision;
00161
00162
00163 bool m_scale_update, m_scale_update_precision;
00164
00165 float m_precision;
00166
00167
00168 bool m_boost;
00169
00170
00171 bool m_normaliseMargin;
00172
00173
00174 float m_sigmoidParam ;
00175 };
00176 }
00177
00178 #endif