오늘은 2019 NIPS에서 발표된 논문 Self-Routing Capsule Networks를 리뷰하도록 하겠습니다. 서울대에서 발표한 논문인데요, 간단한 아이디어로 Capsule Network의 구조적인 문제점을 해결하고자 했습니다.

 

Capsule Network

Self-Routing Capsule Network에 앞서 먼저 Capsule Network에 대해 간략히 설명하겠습니다. Capsule Network는 "Dynamic Routing Between Capsules"라는 논문에서 처음으로 제안한 모델입니다. Geoffrey E. Hinton이 오랜만에 발표한 논문이라 더욱 주목을 받았습니다. 

 

딥러닝 모델이 실제 사람처럼 "일반화"되기 위해서는 아직도 갈 길이 멉니다. 이미지의 단지 몇 픽셀을 조정함으로써 잘 훈련된 딥러닝 모델을 속일 수 있습니다. 의도적으로 속이는 경우가 아니더라도, 구분하고 싶은 물체의 방향, 크기 등이 달라지면 딥러닝 모델은 이를 잘 구분하지 못합니다.

 

이러한 관점에서 Capsule Network는 invariance가 아니라 equivariance를 추구합니다. 기존 CNN 모델의 max pooling 방식으로는 feature가 존재하는지 안 하는지의 정보만 얻을 수 있습니다 (invariance). 하지만 이를 넘어서서 entity의 variation을 보존할 수 있어야 한다는 겁니다(equivariance). 이로써 feature들 간의 공간적인 관계를 더 잘 찾아낼 수 있고 더 나은 일반화가 가능해집니다. 예를 들어, 얼굴 이미지를 보고 눈, 코, 입이 각각 있는지뿐만 아니라 각각이 어디에 위치하는지도 고려해야 한다는 것입니다.

 

Capsule Network의 골자는 Capsule과 Routing-by-agreement입니다. Capsule은 관심있는 entity의 여러 정보를 벡터에 저장합니다. 그 후 각각의 capsule은 transformation 행렬을 거쳐서 다음 layer의 capsule의 pose를 예측합니다. 이렇게 예측한 결과가 적절한지 평가하고, 파라미터를 업데이트하는 과정이 Routing-by-agreement입니다. Routing-by-agreement 방식은 캡슐들을 반복적으로 클러스터링함으로써, 가장 가깝게 모여있는 쪽으로 (agreement) 다음 레이어의 파라미터를 업데이트합니다.

 

Capsule Network에 대한 자세한 설명은 이 블로그유튜브 강의 1, 유튜브 강의 2를 참고해 주세요. 

 

Self-Routing Capsule Network

Motivation

본 논문으로 다시 돌아와 보겠습니다. 본 논문에서는 routing-by-agreement을 아예 제거해 버리고, 다음 레이어의capsule로 가는 Routing Network를 정의했습니다. 이 아이디어는 Unsupervised Clustering 방식이 고차원 공간에서는 너무 불확실하고 비싸다는 motivation에서 출발합니다. 일단 routing-by-agreement 방식이 반복적으로 mean을 계산하고 prediction vector를 업데이트하기 때문에 연산이 비싸고, prediction vector의 분포를 인위적으로 가정해야 하기 때문에 noise에 잘 대응하지 못한다는 것입니다.

 

따라서 본 논문에서는 Routing-by-Agreement 방식 대신, Capsule별로 다른 파라미터를 가지는 Routing Network를 사용합니다. 아래 그림을 보시죠.

 

이렇게 되면 Capsule Network를 Mixture of Experts(MOE)의 관점에서 해석할 수 있습니다. 각 Capsule이 entity를 검출하는 expert의 역할을 담당합니다. 아래 그림을 보면, Capsule network와 MOE가 submodule들을 앙상블 한다는 점에서 상당히 비슷함을 알 수 있습니다. 다만 Capsule들은 MOE의 Experts와 달리 feature space를 공유하지 않습니다. 

본 논문은 Capsule Network의 두 가지 특성 중, entity의 공간적인 관계를 파악하는 것 보다는, 개별 entity에 특화된 Capsule의 특성에 더 집중했습니다. 하지만 output의 분산을 완화시키기 위한 routing-by-agreement 방식을 사용하지 않고도 안정적인 결과를 낼 수 있음을 실험적으로 보여줬습니다. 

 

Method

이 논문에서는 매우 간단한 single-layer perceptron을 제안합니다. Self-Routing은 두 개의 학습 파라미터 $\textbf{W}^{route}$$\textbf{W}^{pose}$ 를 가지고 있습니다. 각각은 routing coefficients $c_{ij}$와 prediction vector $\hat{\mathbf{u}}^{j|i}$를 구하는 데에 사용됩니다. 

 

더 자세히 들어가 보겠습니다. 먼저 현재 레이어의 capsule vector $\hat{\mathbf{u}}$ 에 가중치 $\mathbf{W}^{route}$를 곱하고 softmax를 취해서 routing coefficient $c_{ij}$를 계산합니다. 그 다음 $c_{ij}$를 capsule의 activation scalar $a_i$와 곱하여 가중합을 한 것을 그 다음 레이어의 j번째 capsule의 activation scalar $a_j$로 사용합니다. 

 

이후 레이어의 capsule을 구하기 위해 $a_j$를 가중치로 사용합니다.

 

 

Experiments

실험 결과에 따르면 SR-CapsNet 모델은 기존의 Routing-by-agreement 방식 두 가지 (Dynamic Routing과 EM Routing) 보다 더 좋은 이미지 분류 성능을 보였다고 합니다. 뿐만 아니라 Adversarial Example과 Affine Transformation에도 잘 대응했는데요, Routing-by-agreement를 사용하지 않고도 일반화가 가능하다는 것을 실험으로 보여줬습니다. 아래에 실험 결과가 제시되어 있습니다.

1. Image Classification

 

2. Robustness to Adversarial Examples

 

3. Robustness to Affine Transformation

 

여기까지 Self Routing Capsule Network 논문을 정리해 보았습니다. 자세한 내용은 논문을 참고해 주세요. 감사합니다.

 

이번에 소개해 드릴 논문은 데이터 없이 트레이닝된 모델만 있을 때, 우리가 knowledge distilling을 통해서 새로운 모델을 얻을 수 있을까하는 문제를 다루고 있습니다. 여러가지 문제 - 보안 레벨이라든지, 개인 정보 보호라든지 - 때문에 원 모델을 학습시킨 데이타가 접근 가능 하지 않을 경우를 가정해본다면, 충분히 생길 수 있는 문제일 것 같습니다.

 

일단, 원 모델을 학습시킨 데이타가 접근 가능하지 않기 때문에, 다음과 같은 상황에 유사하다고 할 수 있겠습니다. 선생님과 학생이 있는데, 사용가능한 교재가 없는 것이죠. 다음과 같은 문제들을 해결해야, 학생을 가르칠 수 있을 겁니다.

  1. 교재를 어떻게 준비할까요? (우리가 데이타 포인트들을 만들 수 있을까요?)
  2. 교재의 양이 충분치 않을 경우, 어떻게 잘 가르칠 수 있을까요?

이와 같은 문제를 해결하기 위해, 저자들은 다음과 같은 구조의 뉴럴 네트워크를 제안합니다.

M은 학습된 모델입니다. (따라서 고정되어있습니다) 학습되는 부분은 G와 D인데, 다음과 같이 동작합니다.

  • D는 z hat 을 x hat으로 부터 생성하는 역할입니다. z hat은 x hat의 dimensional representation이라고 볼 수 있습니다. z bar 와 z hat, y bar 와 y hat의 차로부터 네트워크를 업데이트 할 loss function을 구합니다.
  • 위 네트워트 (저자들은 KegNet 이라고 이름 붙였습니다)가 학습이 끝나면, 이젠 학생 네트워크를 학습시킬 수 있습니다. G는 학생 네트워크를 학습시킬 데이타 포인트들을 만들어네는 네트워크 역할을 하게 됩니다.
  • 학생 네트워크는 M에서 tensor decomposition을 통해서 만들어냅니다. 저자들은 많은 방법 중에서 Tucker decomposition을 선택했구요. Tensor decomposition을 통해서 만들어낸 경량화된 모델은 fine tuning이 필요한데, fine tuning을 위한 데이터를 KegNet을 통해서 만들겠다는 것입니다.
  • 만들어지는 데이타 포인트들이 너무 유사해 지는 것을 방지하기 위해, loss function에 diversity를 고려한 항이 추가되어 있습니다.
  • KegNet을 y와 z를 만들기 위한 auto-encoder의 형태를 하고 있다고 이해할수 있다고 합니다.
  • 또한, 학습시키기위한 데이타 포인트들을 만들기 위한 Generative Adversarial Network (GAN)의 형태로 볼 수도 있다고 합니다.

생성된 이미지들을 보면 저자들이 의도한대로 구현된 것을 보실 수 있습니다. 물론, 사용한 데이터셋이 다른 데이터셋들에 비해 상대적으로 작은 편을 감안하면, 발전시킬 여지가 많은 것이 아닐까 추측해봅니다.

 

정량적으로 성능 분석한 결과 일부를 발췌해 보았습니다. Tucker decomposition후에 생긴 성능 손실을 상당한 수준으로 복구하신 것을 볼 수 있습니다. 괄호 안의 숫자는 Tucker decomposition후에 얼마나 모델 사이즈가 줄었나하는 것을 표시하기 위한 scaler입니다.

 

더 자세한 부분을 알고 싶은 분들을 위해 원문 링크를 첨부합니다.

본 게시물은 필자가 2019년 12월 8일부터 진행되었던 NeurIPS 논문중에서 인상깊었던 논문 및 아이디어를 포스팅 한 것입니다. 본 포스팅은 논문에 첨부된 그림을 첨부했으며 문제가 될 시 삭제하도록 하겠습니다. 또한 본 포스팅은 Deep Q Network에 대한 기본 지식을 가지고 있다는 전제하에 작상된 포스팅입니다. Deep Q-Network에 대한 내용은 아래의 링크를 참조하시길 바랍니다. 논문 링크는 이곳을 클릭해주세요.

 

Sample-Efficient Deep Reinforcement Learning via Episodic Backward Update


 

강화학습을 실제 환경에 적용하기에는 쉽지 않습니다. Aracade Learning 환경에서 Deep Q-Network를 사용하여 학습을 시킬 시 2억개의 프레임을 사용하며 이는 실제로 39일동안 이루어집니다. 이는 사람이 실제로 게임에서 높은 점수를 받기까지와의 시간차이가 많음을 의미합니다. 본 논문에서는  Deep Q-Network에서 랜덤하게 한스텝 이동에 대한 샘플을 추출하는 샘플링 방법에 효율성이 떨어지는 이유를 다음과 같이 2가지 제시했습니다.  

  • sparsity하게 보상을 갖는 환경에서 의미있는 reward 값을 가지는 한 스텝에 대한 샘플을 뽑을 확률이 적습니다. 
  • 학습 초기에는 학습이 되지 않아 모든 reward의 값이 0이므로 한스텝 이동으로 Q 값을 업데이트 하는것으로는 학습을 할 수 없습니다. 따라서 0이 아닌 reward 값이 나올때까지 전혀 학습이 되지 않는 현상을 가지게 됩니다. 

위의 문제를 아래의 간단한 예시를 통해 표현할 수 있습니다. 현재 agent가 s1에서 시작하여 s4에 도착하기까지 총 5번의 step을 가지게 됩니다. 이때 5번째 스텝이 agent의 목표인 terminal state에 도달했으므로 reward 1점을 얻고 한번의 에피소드가 끝나게 됩니다. 기존의 Deep Q Network는 에피소드가 끝난 후 얻어진 5개의 샘플을 replay memory에 저장한 후 uniform random 샘플링을 수행합니다. 이 과정에서 가장 최대의 값을 가지는 reward에 해당하는 샘플이 우선적으로 샘플링 되지 않습니다. 또한 모든 terminal state를 제외한 모든 state의 reward 값이 0이므로 한스텝으로 학습이 불가능합니다. 따라서 본 논문에서는 하나의 에피소드가 끝나면 terminal state에서부터 순차적으로 backward 하며 샘플링 하는 방식을 사용하여 학습 시 최적의 path를 찾는것을 목표로 Episodic Backward Update 방식을 제안했습니다.  아래의 b 그래프에서는 Uniform random하게 샘플링 하는 방식보다는 EBU 방시을 사용하였을때 바로 최적의 path를 찾는 결과를 보여줍니다. 

 

uniform sampling 방식과 EBU 방식의 비교 

본 논문에서는 Episodic Backward Update (EBU) 방식을 제안했습니다. EBU 방식은 기존 Deep Q Network에서 사용하는 replay memory로부터 전체 에피소드를 샘플링하고 샘플링 된 에피소드 전체를 backward 방식으로 순차적으로 전파합니다. EBU 방식을 사용하면 에피소드 내 모든 트랜지션을 업데이트함으로써 reward 전파 속도를 높일 수 있습니다. 위의 예시에서는 오직 5번의 업데이트 후에 최적의 path를 찾게 됩니다. 아래는 Q table을 사용하는 Q-learning 방식에 EBU를 적용한 수도코드 입니다. 

Tabular Q-learning Pesudo code

하지만 실제상황에서는 state와 action의 수가 많으므로 Q table을 사용하는 방식을 사용하는 데 한계가 있습니다. 따라서 신경망을 사용하여 Q value를 근사하는 Deep Q Network를 사용하고 있으며 DQN에 EBU를 적용한 수도코드는 아래와 같습니다. 코드의  beta 파라미터는 (0,1) 값을 가지며 "backwardness' 의 정도를 의미합니다. beta 0으로 설정할 시 아무런 값도 전파하지 않겠다는 뜻이 되며 1로 설정하면 리워드를 전파 하겠다는 의미로 해석할 수 있습니다. 

Deep Q Network pesudo code 

아래의 그림은 replay memory를 시각화 하여 EBU의 원리를 보여주는 그림입니다. 계산 효율적인 재귀 알고리즘을 통해, sparsitiy한 reward가 샘플링된 에피소드의 모든 스텝에 직접 전달되는 것을 알 수 있습니다. 

EBU를 적용했을때 기존의 DQN 대비 성능개선이 얼마나 되었는지를 보여주는 결과를 아래에 제시했습니다. 49개의 Atari 게임 도메인에서 39개의 게임에서 기존 DQN보다 좋은 성능을 보였습니다. 또한 약 20배 적은 수의 샘플 수 (200M -> 10M)로 기존 DQN의 성능과 유사한 성능을 보임을 알 수 있었습니다. 

Atari 도메인에서의 기존 DQN 대비 EBU의 성능 개선