func (m *OWLQNMinimizer) fixDirSign(dir *core.Vector, steepestDescDir *core.Vector) { if m.l1reg == 0 { return } for key, val := range dir.Data { if val*steepestDescDir.GetValue(key) <= 0 { dir.SetValue(key, 0) } } }
// Description: assume all the features in x also appears in grad func (m *OWLQNMinimizer) updateGrad(x *core.Vector, grad *core.Vector) { if m.l1reg == 0 { return } for key, val := range grad.Data { xval := x.GetValue(key) if xval < 0 { grad.SetValue(key, val-m.l1reg) } else if xval > 0 { grad.SetValue(key, val+m.l1reg) } else { if val < -m.l1reg { grad.SetValue(key, val+m.l1reg) } else if val > m.l1reg { grad.SetValue(key, val-m.l1reg) } } } return }
// Description: assume all the features in x also appears in grad // all the features in dir must be in grad func (m *OWLQNMinimizer) updateGradForNewPos(x *core.Vector, grad *core.Vector, dir *core.Vector) { if m.l1reg == 0 { return } for key, val := range grad.Data { xval := x.GetValue(key) if xval < 0 { grad.SetValue(key, val-m.l1reg) } else if xval > 0 { grad.SetValue(key, val+m.l1reg) } else { dirval := dir.GetValue(key) if dirval < 0 { grad.SetValue(key, val-m.l1reg) } else if dirval > 0 { grad.SetValue(key, val+m.l1reg) } } } return }