해석을 과신하지 않기 위한 비교 실험
예측 class뿐 아니라 정답 class와 관련 없는 class의 지도를 만든다. 모든 class가 같은 영역을 밝힌다면 class별 gradient가 제대로 바뀌는지, 모델이 공통 배경에 의존하는지 살펴본다. Score가 매우 낮은 class 지도도 같은 의미로 해석하지 않는다.
같은 이미지를 조금 crop하거나 밝기를 바꿔 prediction과 지도를 함께 비교한다. Class가 유지되는데 지도만 크게 흔들리면 단일 그림을 안정적인 설명으로 제시하기 어렵다. 여러 sample에서 반복되는 패턴을 봐야 한다.
Layer를 바꾸면 해상도와 의미 수준이 달라진다. 앞 layer의 선명한 가장자리가 더 정확한 설명이라는 뜻은 아니고, 마지막 layer의 거친 지도가 쓸모없다는 뜻도 아니다. 질문이 texture인지 object 위치인지에 따라 비교 목적을 정한다.
Target class를 명시하지 않으면 구현이 현재 최고 확률 클래스의 gradient를 사용해, 사용자가 설명하려던 정답 클래스와 다른 히트맵을 만들 수 있습니다. 정답과 예측이 다른 표본에서는 두 클래스의 Grad-CAM을 나란히 계산하면 모델이 무엇을 놓쳤는지 더 잘 보입니다. Backward 전에 남은 gradient를 정리하고, hook이 매 호출마다 중복 등록되지 않는지도 확인해야 반복 실행 결과를 신뢰할 수 있습니다.
Layer 선택은 분해능과 의미 수준의 교환입니다. 앞쪽 층은 위치가 세밀하지만 클래스 의미가 약하고, 뒤쪽 층은 의미가 강하지만 공간 크기가 작습니다. 마지막 convolution 하나만 정답으로 고정하지 말고 인접한 층 몇 곳에서 결과가 일관되는지, 입력을 조금 바꾸었을 때 강조 영역이 갑자기 뒤집히지 않는지 비교해야 합니다.