2015-02-03 2 views
3

나는 Theano의 구현에 대해 질문이있다. theano가 다음 함수 (T.grad)를 통해 모든 손실 함수의 그래디언트를 얻는 방법? 도와 줘서 고마워.theano는 모든 함수의 그라디언트를 어떻게 구현합니까?

gparams = T.grad(cost, self.params) 
+0

theano에서 사용할 수있는 거의 모든 연산자에는 자체 파생물에 대한 정보가 들어 있습니다. 귀하의 경우, '비용'은 아마 이러한 작업의 연결입니다. 그래디언트는 체인 규칙과 원자 연산의 파생어에 대한 지식을 간단히 적용하여 얻을 수 있습니다. – eickenberg

답변

1

최대 자동 차별화 봐 거기에 효율적으로 그라데이션을 평가하는 데 사용됩니다 모드 뒤로 .

Theano는 내가 알 수있는 한 코드 재 작성 및 운영자 기반 접근 방식 간의 하이브리드입니다. 파이썬에서 연산자 오버로딩을 사용하여 계산 그래프를 구성한 다음이를 최적화하고 해당 그래프 (최적화 된) 작업 시퀀스를 생성하여 필요한 파생 잉크를 평가합니다.

+0

역방향 모드 autodiff가 맞습니까? Theano의 문서는 함수를 나타내는 그래프를 "컴파일"하고 다른 그래프를 출력하는 것에 대해 언급합니다. 나에게 상징적 인 차별처럼 들리는가? – MiniQuark

+0

기호 차별화는 미분의 공식을 생성합니다. 자동/알고리즘 차별화는 파생 상품을 평가하는 절차를 만듭니다. 그래프는 파서의 결과이며 두 경우 모두 그래프입니다. 차이점은 출력의 크기입니다. AD는 평가 함수의 크기를 약 3 배 증가시킵니다. 기호 차별화는 문자열 길이가 기하 급수적으로 증가 할 수 있습니다. – LutzL

6

편집 : Theano는 Symbolic Differentiation을 사용한다고 잘못 말했습니다. 내 사과.

Theano는 autodiff 리버스 모드를 구현하지만 혼동 그들은 "상징적 차별화"를 호출합니다. 이것은 상징적 인 차별화가 전혀 다른 것이기 때문에 오해의 소지가 있습니다. 두 가지를 살펴 보겠습니다.

상징적 분화 : f(x) 함수를 나타내는 그래프가 주어, 그 f'(x) 함수의 도함수를 나타내는 새로운 그래프를 계산하기 위해 체인 규칙을 사용한다. 그들은 이것을 "컴파일"이라고합니다. f(x). 상징적 인 차별화의 한 가지 문제점은 매우 비효율적 인 그래프를 출력 할 수 있다는 것인데, Theano는 자동으로 출력 그래프를 단순화합니다.

예 :

""" 
f(x) = x*x + x - 2 
Graph = 
      ADD 
     / \ 
     MUL SUB 
    /\/\ 
     x x x 2 

Chain rule for ADD=> (a(x)+b(x))' = a'(x) + b'(x) 
Chain rule for MUL=> (a(x)*b(x))' = a'(x)*b(x) + a(x)*b'(x) 
Chain rule for SUB=> (a(x)-b(x))' = a'(x) - b'(x) 
The derivative of x is 1, and the derivative of a constant is 0. 

Derivative graph (not optimized yet) = 
      ADD 
     / \ 
     ADD SUB 
    /| | \ 
    MUL MUL 1 0 
/| | \ 
1 x x 1 

Derivative graph (after optimization) = 
      ADD 
     / \ 
     MUL 1 
    / \ 
    2  x 

So: f'(x) = 2*x + 1 
""" 

역방향 모드 autodiff : 연산 그래프를 통해 두 패스 작동은 제 거꾸로 체인 규칙을 사용하여 다음 (입력부터 출력까지) 그래프를 통해 앞으로 및 (만약 당신이 backpropagation에 익숙하다면 이것은 정확하게 그라데이션을 계산하는 방법입니다).

다양한 자동 차별화 솔루션에 대한 자세한 내용은 this great post을 참조하고 해당 전문가의 답변은 &입니다.

관련 문제