Чем отличается обновление градиента импульса в Tensorflow и Theano?

Я пытаюсь использовать TensorFlow с моим проектом глубокого обучения.
Здесь мне нужно реализовать обновление градиента в этой формуле:

введите здесь описание изображения

Я также реализовал эту часть в Theano, и получился ожидаемый ответ. Но когда я пытаюсь использовать MomentumOptimizer TensorFlow, результат действительно плохой. Я не знаю, чем они отличаются.

Теано:

def gradient_updates_momentum_L2(cost, params, learning_rate, momentum, weight_cost_strength):
    # Make sure momentum is a sane value
    assert momentum < 1 and momentum >= 0
    # List of update steps for each parameter
    updates = []
    # Just gradient descent on cost
    for param in params:
        param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable)
        updates.append((param, param - learning_rate*(param_update + weight_cost_strength * param_update)))
        updates.append((param_update, momentum*param_update + (1. - momentum)*T.grad(cost, param)))
    return updates

ТензорФлоу:

l2_loss = tf.add_n([tf.nn.l2_loss(v) for v in tf.trainable_variables()])
cost = cost + WEIGHT_COST_STRENGTH * l2_loss
train_op = tf.train.MomentumOptimizer(LEARNING_RATE, MOMENTUM).minimize(cost)

person Peter Yang    schedule 18.02.2016    source источник


Ответы (1)


Если вы посмотрите на реализацию оптимизатора импульса в TensorFlow [ссылка], это реализовано следующим образом:

accum = accum * momentum() + grad;
var -= accum * lr();

Как видите, формулы немного отличаются. Масштабирование импульса по скорости обучения должно разрешить ваши разногласия.

Также очень легко реализовать такой оптимизатор самостоятельно. Полученный код будет похож на фрагмент в Theano, который вы включили.

person Rafał Józefowicz    schedule 28.02.2016
comment
Это не единственная разница. Формула, опубликованная OP, обновляет w(t), добавляя термин импульса \alpha v(t-1), в то время как код тензорного потока фактически вычитает его. Согласно этому код тензорного потока кажется более правильным. - person Tu Bui; 11.04.2017