나는 Theano의 구현에 대해 질문이있다. theano가 다음 함수 (T.grad)를 통해 모든 손실 함수의 그래디언트를 얻는 방법? 도와 줘서 고마워.theano는 모든 함수의 그라디언트를 어떻게 구현합니까?
gparams = T.grad(cost, self.params)
나는 Theano의 구현에 대해 질문이있다. theano가 다음 함수 (T.grad)를 통해 모든 손실 함수의 그래디언트를 얻는 방법? 도와 줘서 고마워.theano는 모든 함수의 그라디언트를 어떻게 구현합니까?
gparams = T.grad(cost, self.params)
최대 자동 차별화 봐 거기에 효율적으로 그라데이션을 평가하는 데 사용됩니다 모드 뒤로 .
Theano는 내가 알 수있는 한 코드 재 작성 및 운영자 기반 접근 방식 간의 하이브리드입니다. 파이썬에서 연산자 오버로딩을 사용하여 계산 그래프를 구성한 다음이를 최적화하고 해당 그래프 (최적화 된) 작업 시퀀스를 생성하여 필요한 파생 잉크를 평가합니다.
역방향 모드 autodiff가 맞습니까? Theano의 문서는 함수를 나타내는 그래프를 "컴파일"하고 다른 그래프를 출력하는 것에 대해 언급합니다. 나에게 상징적 인 차별처럼 들리는가? – MiniQuark
기호 차별화는 미분의 공식을 생성합니다. 자동/알고리즘 차별화는 파생 상품을 평가하는 절차를 만듭니다. 그래프는 파서의 결과이며 두 경우 모두 그래프입니다. 차이점은 출력의 크기입니다. AD는 평가 함수의 크기를 약 3 배 증가시킵니다. 기호 차별화는 문자열 길이가 기하 급수적으로 증가 할 수 있습니다. – LutzL
편집 : 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을 참조하고 해당 전문가의 답변은 &입니다.
theano에서 사용할 수있는 거의 모든 연산자에는 자체 파생물에 대한 정보가 들어 있습니다. 귀하의 경우, '비용'은 아마 이러한 작업의 연결입니다. 그래디언트는 체인 규칙과 원자 연산의 파생어에 대한 지식을 간단히 적용하여 얻을 수 있습니다. – eickenberg