Сделать нулевую производную в Теано

Я пытаюсь реализовать оптимизатор LSTM из этой статьи: https://arxiv.org/pdf/1606.04474v1.pdf

Они делают предположение о производной градиента w.r.t. Параметры LSTM равны нулю:

изображение

Глядя на мой код, я думаю, что когда я оптимизирую функцию потерь, это предположение не используется, потому что Theano может вычислить этот градиент, и он это делает. Как я могу предотвратить это?

Вот код:

def step_opt(cell_previous, hid_previous, theta_previous, *args):
    func = self.func(theta_previous)

    grad = theano.grad(func, theta_previous)
    input_n = grad.dimshuffle(0, 'x')

    cell, hid = step(input_n, cell_previous, hid_previous, *args) # function that recomputes LSTM hidden state and cell 

    theta = theta_previous + hid.dot(self.W_hidden_to_output).dimshuffle(0)
    return cell, hid, theta, func

cell_out, hid_out, theta_out, loss_out = theano.scan(
         fn=step_opt,
         outputs_info=[cell_init, hid_init, theta_init, None],
         non_sequences=non_seqs,
         n_steps=self.n_steps,
         strict=True)[0]

loss = loss_out.sum()

1 ответ