Dynamic Routings Between Capsules(CapsNet) - 1
얼마 전 딥러닝의 아버지라고 불리우는 제프리 힌튼(Geoffrey Hinton)이 간만에 새로운 논문을 발표했습니다. 캡스넷(CapsNet) 또는 캡슐 네트워크(Capsule NetworK)라고 불리우는 이 네트워크는 논문이 나오자마자 엄청난 관심을 받게 됩니다. 저는 개인적으로는 논문에 나온 네트워크 구조보다는 과연 현재 CNN이 가지고 있는 문제점을 어떻게 풀었는가에 초점을 맞추고 싶어 유튜브에 올라온 제프리 힌튼의 강의 “What is wrong with convolutional neural network?”도 같이 들었습니다. 하지만 생각보다 저분이 정말 강의를 못하셔서 듣는 내내 굉장히 힘들었습니다. 쉬운 내용을 어떻게 어렵게 가르칠 수 있나 궁금하시면 이 강의를 들으시면 됩니다.
그래서 이번 포스트에서는 네트워크 구조보다는 CNN의 문제점 그리고 캡슐의 개념에 대해 먼저 자세히 알아보도록 하겠습니다.
Typical CNN
우리가 흔히 볼 수 있는 CNN 네트워크 구조입니다. 이 구조를 통해서 이미지 분류, 디텍션 등 굉장히 많은 분야에서 좋은 성능을 냈습니다. 이미지 픽셀 하나하나를 mapping out시킨다는건 계산복잡도 측면에서 매우 비효율적이기 때문에 CNN은 콘볼루션 필터를 여러개 사용하면서 풀링(위 그림에서는 subsampling)도 같이 사용하게 됩니다. 여기서 풀링의 개념을 정리해보면 아래와 같습니다.
- Creates “summaries” of each sub-region
- Give you a little bit of positional and translational invariance
- Via a classifier like softmax : classification
즉 각각의 sub-region을 요약하고 위치 정보 관련해서는 invariance를 줄 수 있다는게 풀링의 핵심 개념입니다. 하지만 이러한 CNN에는 문제가 있습니다.
Problems of CNN
Convolution filter의 한계
CNN은 콘볼루션 필터들은 이미지 픽셀에서 중요한 부분이 무엇인지 디텍트를 합니다. 처음에는 간단한 특징(simple feature - edge, color, …)들을 포착하지만 점점 higher level로 갈수록 더욱 복잡한 특징(complex feature)들을 잡게 됩니다. 그리고 가장 최상위에 위치한 top layer에서 분류를 하게됩니다. 그러나 higher layer은 단순히 lower layer들의 가중합(weighted sum)이라는게 가장 큰 문제점입니다. 이러한 가중합은 simple feature와 complex feature간의 위치 관계를 전혀 고려하지 않다는 것입니다.
Max-pooling
그래서 CNN은 이런 문제점을 풀기 위해 max pooling이라는 방법을 도입합니다. 이 방법은 피쳐맵들의 spatial size를 줄여주어 higher layer들의 시야각(field of view)을 넓혀주는 역할을 합니다. 이게 무슨말인지 이해가 안되시는 분들은 왼쪽 위 그림을 보시면 됩니다. 저는 개인적으로 FPS 게임을 좋아하는데 보통 FPS 게임의 옵션에 들어가보면 FOV(field of view)옵션이 있습니다. 이 옵션을 높여주면 시야각이 넓어져서 한 눈에 볼 수 있는 공간이 커집니다. 즉, FOV값을 가장 낮게 설정하면 노란색 직사각형이 시야가 되는 것이고, FOV 값이 크다면 파란색 직사각형 이상의 시야로 볼 수 있다는 말이죠.
풀링을 활용하면 저렇게 한 눈에 보는 시야가 넓어지고 어느 정도 spatial한 정보들을 가져갈 수 있습니다. 이렇게 인간을 뛰어넘는 성능을 보여주게 되었지만, 여전히 중요한 정보들은 놓치고 있습니다. 가장 활성화되는 feature detector의 위치 정보들은 계속 던져버리고 있다는 말입니다. 위 오른쪽 그림은 같은 얼굴이지만 눈 코 입 위치가 다릅니다. CNN같은 경우는 둘 다 얼굴이라고 인식을 하게됩니다.
Equivariance vs. Invariance
딥러닝의 1세대이기도 한 얀 리쿤(Yann LeCun)은 맥스 풀링이 invariance를 보존한다는 장점이 있다고 주장했습니다. 하지만 힌튼은 강의에서 맥스 풀링이 잘못된 방법이며 “invariance”가 아닌 “equivariance”가 필요하다고 주장합니다. 처음 들었을 때는 상당히 세게 얘기해서 잘못 들은줄 알았는데 정말 단호한 어조로 얘기하더군요. 레딧에서도 big mistake, disaster 등 매우 강경한 어조로 max-pooling을 공격합니다. 이쪽 딥러닝 시초들끼리는 매우 사이좋게 지내는 줄 알았는데 레딧에서 이 글을 보고 절대 그렇지 않음을 깨달았습니다.
Four arguments against pooling
강의에서 힌튼은 풀링이 좋지 않은 4가지 이유를 다음과 같이 설명합니다.
- 인지 심리학 관점에서 CNN은 맞지 않다
인지심리학 관점(신경과학, 인지과학, 심리학 모두에서 쓰입니다) 에서 아직도 풀리지 않은 문제점으로 binding problem이라는게 있습니다. 결합 문제라고도 불리는 이 문제는 우리가 어떤 사물을 보고 과연 그것을 어떻게 인지하는가?에 관한 것입니다.
예를 들어 위 그림을 봤을 때 사람들은 “자전거 선수가 매우 빠른 속도로 자전거를 타고있다”라고 인식을 합니다. 우리가 보는건 간단히 얘기해도 사람, 사이클 복장, 자전거, 도로 등인데 어떻게 이를 조합해서 “자전거 선수가 매우 빠른 속도로 자전거를 타고있다”라고 인식을 하는지는 여전히 인지심리학에서도 풀리지 않은 문제입니다. 확실한건 사람, 사이클 복장, 도로, 자전거 등을 보고 저런 방식으로 인식을 한다는 점입니다. Pooling은 이를 전혀 설명하지 못하고 있습니다.
- 잘못된 문제를 풀고 있음
아까도 설명했던 invariance가 아닌 equivariance가 필요하다는 것입니다. 영어로 표현하자면 “discarding”이 아니라 “disentangling”이 필요합니다.
- 내재되어있는 선형적인 구조를 사용하지 않는다(Fails to use underlying linear structure)
같은 물체를 보더라도 여러 방면에서 봤을 때 이 물체는 pixel intensity 공간에서 매우 비선형적입니다. 이를 globally linear한 곳으로 변환시킨다면 대량의 extrapolation이 가능합니다. 즉, 물체의 다양한 모습을 추정이 가능하다는 말과 같습니다. 하지만 pooling에는 이러한 과정이 없습니다.
- Dynamic routing과는 어울리지 않음
풀링에는 아직 설명드리지 않은 캡스넷의 가장 큰 특징 중 하나인 dynamic routing을 사용할 수 없습니다.
결국 CNN의 주요한 문제점은 다음과 같이 정리할 수 있습니다.
CNN 내부 데이터의 간단한 오브젝트와 복잡한 오브젝트 사이의 spatial hierarchies(공간적인 계층 - 번역하면 더 이상하군요)를 고려하지 않는다는 겁니다.
Capsules
그래서 나온게 캡슐이라는 개념입니다. 우리가 세상을 이해할 때 “entity”와 “entity의 property”로 이해한다고 할 수 있습니다. 위에서 설명드린 자전거 그림을 다시 생각해 보시면 entity는 “자전거를 타고 있는 사람”이고 property는 “자전거, 도로위에서 넘어질 듯 달리는 모습, 속도, 사이클복장을 입은 사람, 텍스쳐 등등”입니다.
CNN은 이러한 entity들을 표현하기에는 너무나도 구조의 수가 부족합니다. CNN의 neuron과 layer들로는 entity를 표현을 할 수 없다는 것이죠. 다이나믹 루팅을 거친다면 최종적은 캡슐은 다음과 같은 것들을 나타 낼 수 있습니다.
- The probability of entity exists
- Property of entity(type, scale, position, velocity…)
아마도 논문의 저자들은 위 그림의 캡슐 모양을 생각하고 캡슐이라고 이름짓지 않았나 생각이 듭니다. 캡슐이 하나의 entity가 되는 것이고 그 안의 내용물은 그 entity의 property라고 보면 이해가 쉽습니다.
Advantage of capsules
캡슐은 “고차원 공간에서의 우연의 일치는 매우 적다” 라는 가정을 가지고 시작합니다. 저도 처음 이 말을 들었을 때 도대체 무슨 말인가 싶었는데 천천히 설명드리도록 하겠습니다. 아래 그림에서 왼쪽 얼굴 그림을 보시면, 눈, 코, 입이 제자리에 붙어있는 얼굴이랑 따로 놀고있는 얼굴이 있습니다. CNN의 경우 설사 눈, 코, 입이 있다는 사실을 포착하더라도 이들의 부위를 따로 따로 인식을 하지 다같이 공간적인 - 계층적인 관계를 고려하지 않습니다. 제대로 된 얼굴 데이터만 가지고 학습하더라도 이목구비가 따로 노는 얼굴도 얼굴로 인식하는 문제점이 생기게 됩니다. 오른쪽 그림에서도 거꾸로 된 돛단배를 같은 돛단배로 인식하는 문제가 생기게 되죠.
하지만 고차원 공간에서 바라본다면 이 말은 달라지게 됩니다. 캡스넷(CapsNet)의 경우 이러한 entity를 고차원 공간에서 바라보게 되는데, 이렇게 바라보면 눈, 코, 입의 공간적인 관계까지 고려하게 됩니다. 고차원 공간에서조차 제대로 된 얼굴이 나왔다면 이건 얼굴이 맞다고 판단할 수 있다는 뜻입니다.
또한 맥스 풀링은 학습 가능한 파라미터가 존재하지 않으며 단순히 가장 큰 특징적인 값만 뽑아내서 FOV를 넓히는 것 밖에 못한다는 것입니다. 하지만 캡슐은 벡터로 이루어져 있기에 다이나믹 루팅(dynamic routing)을 통해 오브젝트 파트(눈,코,입 등)들의 상대적 위치까지 조합할 수 있습니다.
Better optimization chance
위 그림에서 왼쪽으로 네트워크 internal data가 흐른다면 합리적이라고 할 수 있습니다. 하지만 오른쪽처럼 눈과 바퀴와 손이 얼굴로 연결된다면 이는 네트워크 학습 입장에서 혼란을 야기하게 됩니다. 즉, 최적화 알고리즘이 길을 제대로 찾기를 바라면서 기다리는 수 밖에 없습니다. 하지만 캡슐을 사용한다면 최적화 알고리즘이 기존 방법보다 더욱 좋으면서도 빠른 길을 찾아낼 수 있습니다.
특징 정리
캡슐의 특징을 정리해보자면 다음과 같습니다.
- 하위 캡슐은 다이나믹 루팅 과정을 통해 이를 가장 잘 처리할 수 있는 상위 캡슐로 연결됩니다.
- 하위 캡슐에서는 local information이 “place-coded”(유지 된다 정도로 보시면 될 것 같습니다) 됩니다.
- 상위 캡슐에서는 훨씬 더 많은 positional information이 “rate-coded”(조합 된다)됩니다.
- 다이나믹 루팅 과정을 통해서 캡슐은 더 복잡한 entity를 훨씬 자유롭게 표현이 가능합니다.
이렇게 CNN의 단점과 캡스넷(CapsNet)의 구성요소인 캡슐(capsule)에 대하여 알아보았습니다. 다음 포스트에서는 캡스넷의 구조에 대해 자세히 알아보도록 하겠습니다.
Reference
- Sabour, Sara, Nicholas Frosst, and Geoffrey E. Hinton. “Dynamic routing between capsules.” Advances in Neural Information Processing Systems. 2017.