Paper : B-CNN: Branch Convolutional Neural Network for Hierarchical Classification (Xinqi Zhu, Michael Bain / arxiv)
CNN classification에서는 대부분 마지막 layer의 feature를 이용해서 분류를 수행한다. 하지만 hieracical한 category를 가지는 데이터의 경우에는 그렇게 "flat"한 방식으로 분류하기보다는 그러한 hierarchy를 고려해주는 것이 더욱 효율적일 수 있다.
예를 들어, "개"나 "고양이"는 "동물"이라는 상위 category에 속할 수 있고, "사과"나 "오렌지"는 "과일"에 속할 수 있다. 이를 모두 관련없는 각각의 output branch로 학습시키는 것보다는 네트워크로 하여금 이를 인지할 수 있도록 해주면 더욱 효과적일 것이라는 것이 이 논문의 핵심
특히 CNN architecture는 기본적으로 hierarchical한 특성을 가지고 있다. 예를 들어서 CNN의 lower layer에서는 이미지의 전체적인 모양이나 색 등의 정보를, higher layer에서는 더욱 abstract한 정보를 담게 된다.
이러한 동기를 바탕으로 본 논문의 저자들은 CNN의 중간 layer에서 branch를 달아 coarse -> fine prediction을 hierarchical한 label과 매칭시켜 학습시켜 좋은 성능을 얻었다.
위 그림은 전반적인 B-CNN (Branch Convolutional Neural Network)의 구조이다. 여러개의 CNN layer를 갖는 어떠한 CNN에도 적용이 가능하며, (b)와 같이 hierarchical한 label이 정의된 상태에서 CNN의 coarse한 branch에서는 더욱 상위 category를 구분할 수 있도록, fine한 branch에서는 더욱 하위 category를 구분할 수 있도록 학습시킨다.
Loss function은 아래와 같이 정의된다.
여기서 는 sample, 는 label tree의 coarse level 수이고, 는 각 level의 weight이다.
예를 들어, 쥐가 있는 그림의 label은 [natural, small mammals, mouse]일 것이고, 위 그림의 (a)에서 Coarse 1 branch에서는 "natural", Coarse 2에서는 "small mammals", 그 다음은 "mouse"를 output으로 내도록 학습이 된다.
분류 문제를 푸는데는 label structure를 이해하는 것이 매우 중요하다고 생각한다. 그리고 이러한 label의 상관관계에 대한 정보를 네트워크에 넣어준다면 훨씬 더 문제를 풀기 쉬워질 것이라 생각한다. 매우 simple한 아이디어이지만 잘 설계한다면 효과적일 것 같다.