논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Dynamic Routing Between Capsules

1 Introduction

  • 인간의 다층 시각 체계가 각 시점에 대해 parse tree와 비슷한 구조를 만든다고 가정하자.
  • 그리고 여기서는 하나의 시점에 대해서 고정된 다층 신경망으로부터 parse tree가 생성되는 것으로 가정한다.
  • 각 층은 "캡슐"이라 불리는 뉴런으로 이루어지는 많은 그룹으로 나뉘어지며, parse tree의 각 노드는 활성화된 캡슐에 해당한다.
  • Iterative routing proccess를 통해 각 활성화된 캡슐은 트리의 부모에 해당하는 상위 레이어의 캡슐을 선택하게 된다.
  • 이 방법을 통해 전체의 각 파트를 할당하는 문제를 해결한다.
  • 캡슐에 의한 뉴런의 활성화는 이미지에 나타나는 어떤 entity의 여러 속성을 표현한다.
  • 이러한 속성은 자세, 모양 변화, 속도 등의 성질을 나타내는 instaniation parameter를 포함한다.
  • 한편 entity의 존재 여부(existance)는 별도의 logistic unit을 통해 확률로 표현하는 편이 자연스럽다.
  • 이 논문에서는 entity의 존재를 instantiation 파라미터 벡터의 길이로 나타내고, 벡터의 방향을 통해 entity의 속성을 나타내는 방법을 설명한다. 따라서 벡터의 길이는 1을 넘지 않도록 제한된다.
  • Dynamic routing 메커니즘은 캡슐의 출력이 상위 레이어의 알맞은 부모에게 전송되도록 동작시킨다.
  • 각 부모 캡슐에 대해서, 캡슐은 자신의 출력에 가중치 행렬을 곱해 "prediction vector"를 계산한다.
  • 만약 prediction vector가 한 부모에 대한 출력에 대해 큰 스칼라 곱을 가지면 coupling coefficient를 증가시키는 피드백을 아래로 보내고 그렇지 않으면 감소시키도록 한다.
  • 이러한 "routing-by-agreement"는 max-pooling과 같은 방법보다 더 효과적이다.
  • CNN의 learned feature detector를 이용하는 특징을 이어받기 위해 마지막 레이어의 캡슐은 convolutional로 만들엇다.
  • 하지만 max-pooling과는 다르게, 영역 내에서 entity의 위치에 대한 정보를 날려버리진 않는다.
  • 하위 캡슐의 경우, 위치 정보는 캡슐의 활성화 됨에 따른 "place-coded"되어있다.
  • 단계를 따라 올라감에 따라 위치 정보는 캡슐의 출력 벡터의 요소로 점점 "rate-coded"된다.

2 How the vector inputs and outputs of a capsule are computed

  • 앞에서 이야기 했듯, 캡슐의 출력 벨터의 길이를 entit가 현재 이미지에 존재하여 표현될 확률로 사용하고자 한다.
  • 이를 위해 비선형 "squashing" 함수를 사용한다. 이는 짧은 벡터를 0에 가깝도록, 긴 벡터는 1보다 살짝 작도록 만든다.

$$ \mathbf{v}_j = \frac{||\mathbf{s}_j||^2}{1+||\mathbf{s}_j||^2} \frac{\mathbf{s}_j}{||\mathbf{s}_j||} $$

  • 여기서 $\mathbf{v_j}$는 캡슐 $j$의 벡터 출력이며 $\mathbf{s}_j$는 그것의 전체 입력이다.
  • 첫번째 층을 제외한 모든 층의 캡슐에서 캡슐로 입력되는 $\mathbf{s}_j$는 하위 층의 캡슐의 출력 $\mathbf{u}_i$에 가중치 행렬 $\mathbf{W}_{ij}$를 곱하여 "prediction vector" $\hat{\mathbf{u}}_{j|i}$를 계산한 뒤, 이를 가중치 합을 하여 계산한다.

$$ \mathbf{s}_j = \sum_i c_{ij} \hat{\mathbf{u}}_{j|i}, \hat{\mathbf{u}}_{j|i} = \mathbf{W}_{ij} \mathbf{u}_i$$

  • 여기서 $c_{ij}$는 coupling coefficient로 iterative dynamic routing 과정에서 결정된다.
  • 캡슐 $i$와 연결된 상위 층의 모든 캡슐 간의 coupling coefficient의 합은 1이며, 이는 initial logits $b_{ij}$의 routing softmax에 의해 결정된다. 이는 캡슐 $i$와 연결되어야 하는 캡슐 $j$와의 log prior probability를 의미한다.

$$ c_{ij} = \frac{\exp(b_{ij})}{\sum_k \exp(b_{ik})} $$

  • log prior는 다른 가중치가 학습될 때에 함께 학습된다.
  • 초기 coupling coefficient는 그 뒤, 각 캡슐간 출력과 prediction간의 agreement를 측정하여 정교화된다.
  • Agreement는 단순히 스칼라 곱 $a_{ij} = \mathbf{v}_j \cdot \hat{\mathbf{u}}_{j|i}$ 으로 계산되며, 이는 마치 log likelihood처럼 취급된다. 또한 coupling coefficient의 새로운 값을 계산하기 전에 initial logit에 더해진다.
  • 컨볼루셔널 캡슐 층에서는 각 캡슐은 상위 층의 각 캡슐에게 벡터의 지역 격자를 ㅜㄹ력합니다.
  • Routing algorithm은 아래와 같다.
    • ROUTING($\hat{u}_{j|i}, r, l$)
      • 층 l의 모든 캡슐 i과 층 l +1의 모든 캡슐 j에 대해서: $b_{ij} \leftarrow 0$
      • 다음을 r번 반복한다.
        1. 모든 캡슐 i에 대해서 $c_i \leftarrow \text{softmax}(b_i)$
        2. 모든 캡슐 j에 대해서 $\mathbf{s}_j \leftarrow \sum(c_{ij} \hat{\mathbf{u}}_{j|i}) $
        3. 모든 캡슐 j에 대해서 $\mathbf{v}_j \leftarrow \text{squash}(\mathbf{s}_j) $
        4. 모든 캡슐 i와 j에 대해서 $b_{ij} \leftarrow b_{ij} + \hat{\mathbf{u}}_{j|i} \cdot mathbf{v}_j $
      • $\mathbf{v}_j$ 출력

3 Margin loss for digit existence

  • 여러 숫자를 한꺼번에 검출 하기 위해서 분리된 각 숫자 캡슐 k에 대해서 margin loss를 사용했다.

$$ L_k = T_k \max(0, m^+ -|\mathbf{v}_k||^2) + \lambda (1- T_k) \max (0, || \mathbf{v}_k || - m^-)^2$$

  • $k$ 클래스의 숫자가 존재하면 $T_k$는 1, 아니면 0이고, $m^+ = 0.9, m^- = 0.1$이다. $\lambda=0.5$로 사용하였고, 최종 loss는 모든 숫자 캡슐의 loss를 합한 것으로 하였다.

4 CapsNet architecture

  • 간단한 CapsNet의 구조를 살펴보자.
  • 2개의 컨볼루셔널 층과 fully connected 층으로 이루어져 있다.
  • Conv1은 256, 9x9 컨볼루셔널 커널, stride 1의 ReLU를 사용하였다.
  • 이 층은 픽셀 값을 지역 특징 디텍터의 활성값으로 변환하는 역할을 하며, 이것이 primary 캡슐의 입력이 된다.
  • Primary 캡슐은 두번째 층으로, 다차원 entity의 가장 하위 단계이다. 컨볼루셔널 캡슐 층으로 32개의 채널의 컨볼루셔널 8D 캡슐로 이루어져 있다. 커널은 9x9, stride 2로 이루어져 있다.
  • 각 primary 캡슐은 conv1의 256 x 81 출력을 입력으로 한다.
  • Primary 캡슐은 32 x 6 x 6 캡슐 출력을 가지며, 6 x 6 그리드내의 캡슐들은 그 가중치를 공유한다.
  • 마지막 층 DigiCaps는 숫자 하나당 16D 캡슐을 가지며 각 캡슐은 아래 층의 모든 캡슐로부터 입력을 받는다.
  • Primary 캡슐과 DigitCaps층 사이에서만 routing을 적용하고 Conv1과 Primary 캡슐 층 사이에는 적용하지 않았다. 모든 routing logits $b_{ij}$는 0으로 초기화하였다.

4.1 Reconstruction as a regularization method

  • Digit 캡슐의 instantiation 파라미터를 잘 인코드하도록 하기 위해 추가적으로 재구성 loss를 사용하였다.
  • 학습과정에서 정답 Digit 캡슐을 제외한 나머지는 마스킹해버린 뒤, 남은 활성값 벡터로 입력 이미지를 재구성하였다. Digit 캡슐은 3개의 fully connected 층으로 이루어진 모델로 입력되어 픽셀 값을 가지도록 디코딩 하였다.
  • 복원값과 원래의 이미지의 SSD 값을 loss로 사용했고, 0.0005로 스케일을 줄여 학습에 너무 많은 영향을 끼치지 않도록 하엿다.

5 Capsules on MNIST

6 Segmenting highly overlapping digits

7 Other datasets

8Discussion and previous work

 


Add a Comment Trackback