2015-01-18 3 views
0

Я использую Theano в первый раз, чтобы построить большую статистическую модель. Я выполняю своего рода стохастический градиентный спуск, но для каждого образца в мини-бассе мне нужно выполнить процедуру выборки для вычисления градиента. Есть ли способ в Theano для объединения градиентов, когда я выполняю процедуру выборки для каждого datapoint в мини-баре, и только после этого выполните обновление градиента?Как я могу объединить градиенты в Theano?

ответ

1

Я не понимаю, что вы подразумеваете под «пулом». Когда вы вычисляете градиент вашей стоимости по некоторым переменным, стоимость должна быть скаляром. Таким образом, при использовании мини-баров вам необходимо объединить отдельные затраты для примеров в мини-баре. Это может быть сделано суммой, средней, взвешенной суммой ... И тогда эта стоимость обратно распродажа. Градиент параметров этой стоимости будет соответствовать (математически) сумме/средней/взвешенной сумме отдельных градиентов (по каждому из примеров), но это не так, как это вычисляется. Градиент этой стоимости по промежуточным переменным, которые являются функциями входов (скрытые представления и т. Д.), Будет иметь тот же формат, что и исходная мини-камера, при этом градиент по каждому минибарабану в другой строке.

Итак, возможно, вы хотите выразить свою окончательную стоимость в результате вашей процедуры выборки, а затем назадпродвинуть градиент этой стоимости. Или, может быть, вы не хотите, чтобы backpropagate градиент истинной стоимости полностью, а backpropagate что-то, что зависит от градиента. В этом случае, вы можете сделать что-то вроде:

# minibatch of inputs 
inputs = tt.matrix() 
interm_result = f(input) 
cost = g(interm_result).sum() 
grad_wrt_interm_result = th.grad(cost, interm_result) 
sampled_grad = sampling_procedure(grad_wrt_interm_result) 
grad_wrt_params = th.grad(cost, params, 
          known_grads={inter_result: sampled_grad}) 

Таким образом, вы можете выполнить некоторые из прямого распространения на interm_result, а затем изменить градиент WRT inter_result к sampled_grad, а затем закончить в сторону обратного распространения параметров.

Смежные вопросы