2017-09-06 2 views
0

이 질문은 다음과 같습니다. Does slice or index of chainer.Variable to get item in chainer has backward ability? 일반적인 예제 질문을 생각해보십시오. 길쌈 레이어 + FC 레이어가 있고, 마지막 FC 레이어가 벡터를 출력한다고 가정 해보십시오.chainer.functions.get_item은 전파를 어떻게 정확히 전달합니까?

어떤 경우에는 손실 함수를 계산하기 위해 벡터를 조각 내야하기 때문에 예를 들어 다중 레이블 분류에서 지상 진실 레이블 벡터의 대부분 요소는 0이고 그 중 소수만이 1입니다.이 경우 직접 F .sigmoid_cross_entropy는 라벨의 불균형 문제를 일으킬 수 있으므로, 손실 함수를 계산하기 위해 특정 요소를 조각 내기 위해 [0, 1] (마지막 FC 레이어에 의한 chainer.Variable 출력)을 사용하기로 결정했습니다.

이 상황에서 그라디언트 흐름 (BP)에 대한 마지막 FC 계층은 어떻게됩니까? 해당 가중치 행렬을 업데이트하는 방법은 무엇입니까 ?? 당신이 변수 a 및 분할 index에 대한 b = a[index] (fancy 목록 수 있습니다)을 쓸 때

답변

0

는이 작업을 통해 backpropagating 것은 다른 요소를 떠나, b.grada.grad[index]의 값을 설정 a.grad 제로 (a의 해당 요소가 손실에 영향을주지 않기 때문에 값). 마지막 FC 레이어의 배경 화면은 그래디언트 w.r.t를 계산합니다. 이 a.grad으로 평소와 같이 가중치 행렬 및 바이어스 벡터.

+0

나는 실험을한다. mnist dataset의 단일 레이블 문제를 다중 레이블 문제로 변환 한 다음 chainer.Variable 슬라이스 메서드를 사용하여 positve/negative = 1/3을 제어한다. 그런 다음 F.sigmoid_cross_entropy를 사용한다. . 나는이 접근법을 발견했다. 어큐뮬레이션 증가는 가변 슬라이스가없는 F.softmax_cross_entropy를 직접 사용하는 것보다 훨씬 느리다. 이 접근 방식은 대부분의 grad = 0마다 반복되므로 매번 반복되므로 훈련이 느립니다. – machen

+0

w와 x 모양이 다르면 dw와 dx 모양이 다르기 때문에 요소 계층의 dx에이 이전 계층의 w 변경에 영향을주는 이전 계층의 dw를 어떻게 곱할 수 있습니까? – machen