1

Caffe는 다중 손실을 지원합니다. 그런 다음 역 전파 단계에서 일부 얼룩은 서로 다른 손실로 인한 여러 그라디언트를 가질 수 있습니다. Caffe는이 얼룩의 그라데이션을 어떻게 처리합니까?Caffe는 하나 이상의 출력 브랜치가있는 얼룩의 그라데이션을 어떻게 업데이트합니까?

내가 아는 한, 이것은 네트워크를 설계 할 때 고려되지 않을 수도 있습니다. 그러나이 질문은 새로운 레이어를 쓰려고 할 때 정말로 혼란 스럽습니다. 어떤 아이디어 주셔서 감사합니다! enter image description here

답변

0

이것은 카페 또는 다른 심층 학습 도구의 문제가 아닙니다. 이것은 순전히 수학적인 질문입니다. 몇 가지 손실이있을 때 loss_weight이 각 손실에 배정되고 전체 손실은 모든 손실의 가중 합계입니다. 결과적으로 그물망에 대해 계산 된 그래디언트는 손실의 가중치 합계의 그래디언트입니다. 즉, 통합해야 할 손실률 그레디언트가 없으며 손실 레이어의 가중치 합계 인 단일 손실입니다. 여러 층으로 층의 "top" 연출 때

CAFFE 보통 (검색 "conv2" 예에서의 출력이 "auxiliary loss""bottom""ip1"-"Split"이다) "Split" 층을 사용한다.
역 전파 코드 "Split" layer을 보면 모두가 bottom.diff으로 합쳐져 있음을 알 수 있습니다.

+0

답변 해 주셔서 감사합니다. 각 손실의 무게를 제어하는'loss_weight'가 있다는 것을 알고 있습니다. 그러나 나는 아직도 Caffe이 그것을 어떻게 구현 하는지를 모른다. 나는 Caffe에서 각 레이어가 상위 블롭의 diff를 받아들이고, 계산을하고, 결과를'mutable_cpu_diff()'를 통해 아래쪽 블롭의 diff에 전달한다고 생각합니다. 위의 그림을 예로 들어 보겠습니다. 'conv2'의 top blob (규칙으로'conv2'라고 부름)은'auxiliary'와'pool2'의 맨 아래에 있습니다. 'auxiliary'와'pool2'는 모두 배경 화면에서 bottom blob의 diff를 바꿀 것입니다. 그렇다면'conv2' blob의'diff'는 어떻게 업데이트 될까요? –

+0

@ C.Li 그라디언트 체인 규칙이 – Shai

+0

을 지시하므로 그라디언트 체인 규칙에 대한 아이디어를 얻습니다. 그러나 Caffe이 언제 어디에서 그것을 구현하는지 명확하지 않습니다. 어떤 생각? 고마워요! –