2015-01-18 4 views
0

처음으로 Theano를 사용하여 대규모 통계 모델을 작성했습니다. 나는 확률 적 인 그라디언트 디센트를 수행하고 있지만, minibatch의 각 샘플에 대해 그라데이션을 계산하기 위해 샘플링 절차를 수행해야합니다. Minibatch에서 각 데이터 포인트에 대한 샘플링 절차를 수행하는 동안 그래디언트를 풀링하는 방법이 있습니까? 그 후에 만 ​​그래디언트 업데이트를 수행하십시오.Theano에서 어떻게 그라디언트를 풀 수 있습니까?

답변

1

나는 "수영장"이 무슨 뜻인지 이해하지 못합니다. 일부 변수의 비용 그라디언트를 계산할 때 비용은 스칼라 여야합니다. 따라서 minibatch를 사용할 때는 minibatch의 예제에 대한 개별 비용을 결합해야합니다. 그것은 합계, 평균, 가중치로 할 수 있습니다 ... 그리고 그 비용은 역 전파됩니다. 해당 비용 wrt 매개 변수의 그래디언트는 (각 예에서) 개별 그라디언트의 합/평균/가중 합계에 (수학적으로) 대응되지만 계산 방법이 아닙니다.입력 값 (숨겨진 표현 등)의 함수 인 해당 비용 wrt 중간 변수의 그래디언트는 원본 행 바코드와 동일한 형식을 가지며 다른 행에있는 각 미니 바의 그라디언트를 사용합니다.

그래서 원하는 것은 샘플링 절차의 결과로 최종 비용을 표현한 다음 해당 비용의 그라디언트를 역 전파하는 것입니다. 아니면 실제 비용의 그라데이션을 백 프로 퍼 게이트하고 싶지 않고 대신 그라데이션에 의존하는 무언가를 역 전파하십시오. 이 경우, 당신은 같은 것을 수행 할 수 있습니다

# 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 sampled_grad하는 그라데이션 WRT의 inter_result을 변경 한 다음 매개 변수를 향해 역 전파를 완료 역 전파의 일부를 수행 할 수 있습니다.

관련 문제