CapsNet(Capsule Network)

Capsule Network란 무엇입니까?  Capsule이란 무엇입니까? CapsNet은 Convolutional Neural Network (CNN)보다 나은가요? 이 글에서는 Hinton이 발표한 CapsNet 또는 Capsule Network에 관한 위의 모든 질문에 대해 설명합니다.

이 글을 읽는 분은 CNN에 대해 알고 있어야합니다. 그렇지 않다면 Hackernoon에 대한 기사를 우선 읽으십시오. 다음으로는 CNN의 관련 요지를 간략히 정리해 보겠습니다.

CNN은 본질적으로 많은 뉴런을 쌓는 시스템입니다. 이러한 네트워크는 이미지 분류 문제를 처리할 때 탁월한 것으로 입증되었습니다. 그러나 계산상으로 매우 비싸기 때문에 이미지의 모든 픽셀을 신경망으로 맵핑하는 것은 어려울 것입니다. 따라서 convolution은 데이터의 본질을 잃지 않고 계산을 단순화하는 데 도움이 되는 방법입니다. convolution은 기본적으로 많은 행렬 곱셈과 그 결과의 합계입니다.

이미지가 네트워크에 공급되면 커널이나 필터의 세트를 스캔하여 convolution 작업을 수행합니다. 이로 인해 네트워크 내부에 feature map이 생성됩니다. 이러한 기능은 다음에 activation layer 및 pooling layer를 차례로 통과한 다음 네트워크의 레이어 수를 기반으로 계속됩니다. activation layer는 네트워크에서 비선형성 을 유도해야 합니다(예 : ReLU).  Pooling(예 : max pooling)은 학습 시간을 줄이는 데 도움이됩니다. Pooling의 개념은 각 하위 영역의 “요약”을 작성한다는 것입니다. 또한 물체 감지에서 약간의 위치나 translational invariance을 제공합니다. 네트워크 끝 부분에서는 softmax classifier와 같은 분류기를 통해 전달되어 클래스를 제공합니다. 학습은 일부 라벨 데이터와 일치하는 오류의 back propagation을 기반으로 발생합니다. 비선형성은이 단계에서 vanishing  gradient를 해결하는데도 도움이됩니다.

CNN의 문제점은 무엇입니까?

CNN은 데이터세트에 매우 근접한 이미지를 분류할 때 탁월한 성능을 발휘합니다. 이미지가 약간 회전하거나 기울어지거나 다른 방향일 경우 CNN 자체로 감지를 처리할 수 ​​없습니다. 이 문제는 학습 도중 동일한 이미지의 다양한 변형을 추가하여 해결합니다. CNN에서 각 레이어는 훨씬 더 세부적인 수준의 이미지를 이해합니다. 예를 들어 이해할 수 있습니다. 배(ship)와 말(horse)을 분류하려고 하는 경우. 가장 안쪽 레이어 또는 첫번째 레이어는 작은 곡선과 모서리를 이해합니다. 두번째 레이어는 배의 돛대 또는 전체 꼬리의 곡률과 같이 직선 또는 작은 모양을 이해할 수 있습니다. 상위 레이어는 전체 꼬리 또는 선체와 같은 복잡한 모양을 이해하기 시작합니다. 최종 레이어는 전체 배나 전체 말과 같은 전체적인 그림을 보려고합니다. 합리적인 시간 프레임에서 계산하기 위해 각 레이어 다음에 pooling을 사용합니다. 그러나 본질적으로 그것은 positional data를 잃어버립니다.

 

 

pooling은 위치 불변의 원인을 만드는 데 도움을줍니다. 그렇지 않으면 CNN이 훈련 세트에 매우 근접한 이미지나 데이터에만 적합합니다. 이 불변성은 배의 구성 요소를 가지고 있지만 정확한 순서가 아닌 이미지에 대해 오탐지를 유발합니다. 따라서 시스템은 위의 이미지에서 왼쪽과 일치시킬 수있는 권한을 트리거 할 수 있습니다. 관찰자로서 당신은 그 차이를 분명히 알 수 있습니다. pooling layer는 이러한 정렬 또는 불변성을 제거합니다.

 

 

이것은 결코 레이어를 모으기 위한 의도가 아니었습니다. pooling은 위치, 방향, 비례 또는 회전 불변성을 제거하는 것으로 되어 있습니다. 그러나 우리가 이 용도를 얻는데 사용하는 방법은 매우 조잡합니다. 실제로 모든 종류의 위치 불변성이 제거됩니다. 따라서 [그림 2.0]에서 올바른 배를 우측의 배로 탐지하는 딜레마가 발생합니다. 우리가 필요로했던 것은 불변성이 아니라 동일성이었습니다. 불변 상태는 CNN이 관점의 작은 변화에 대해 관대하게 만듭니다. Equivariance는 CNN이 회전 또는 비율 변화를 이해하고 그에 따라 적응하여 이미지 내부의 공간적 위치가 손실되지 않도록합니다. 배는 여전히 ​​작은배이지만 CNN은 이를 감지하기 위해 크기를 줄입니다. 이것이 Capsule Network의 최근 발전으로 이어집니다.

Capsule Network란 무엇입니까?

며칠 단위로 뉴럴 네트워크 분야의 발전이 진행되고 있습니다. Sara Sabour, Nicholas Frost, Geoffrey Hinton은 “Dynamic Routing Between Capsules” 이라는 제목의 논문을 발표했습니다. 이 논문은 Capsule, CapsNet, MNIST에서의 실행에 대해 이야기합니다. MNIST는 태그가 있는 필기체 숫자 이미지의 데이터베이스입니다. 중복된 숫자의 경우 성능이 크게 향상되었습니다. 이 논문은 현재의 최첨단 CNN과 비교됩니다. 이 논문에서 저자들은 인간의 뇌는 “캡슐(capsule)”이라는 모듈을 가지고 있다고 주장합니다. 이 캡슐은 자세(위치, 크기, 방향), 변형, 속도, 반사계수, 색조, 텍스처 등 다양한 유형의 시각적 자극과 인코딩을 처리 할 때 특히 유용합니다. 뇌는 낮은 수준의 시각 정보를 “routing”하는 메커니즘을 가져야 합니다. 이것이 이미지를 처리하기위한 최고의 capsule이라고 믿는 것입니다.

 

capsule은 신경층의 중첩 세트입니다. 따라서 일반적인 신경망에서는 더 많은 레이어를 계속 추가합니다. CapsNet에서는 단일 레이어 안에 더 많은 레이어를 추가 할 수 있습니다. 또는 다른 말로하면 다른 내부에 신경층을 중첩시킵니다. capsule 내부 신경의 상태가 화상 안에 하나의 엔티티의 특성을 포착하여 엔티티의 존재를 나타내는 vector를 출력합니다. vector의 방향은 엔티티의 속성을 나타냅니다. vector는 신경망의 모든 가능한 부모에게 전송됩니다. 가능한 모든 parents에 대해 capsule은 prediction vector를 찾을 수 있습니다. prediction vector는 자신의 weight와 weight matrix을 곱하여 계산됩니다. 어느 parents가 largest scalar prediction vector product가 capsule 결합을 증가시킵니다. parents의 나머지는 그들의 결합을 줄입니다. 이 routing by agreement는 max-pooling과 같은 현재 메커니즘보다 우수합니다. Max pooling route는 하위 계층에서 탐지된 가장 강력한 피처를 기반으로 합니다. dynamic routing 외에도 CapsNet은 캡슐에 squashing 추가에 대해 말합니다. squashing은 비선형 입니다. 따라서 CNN에서와 같이 각 레이어에 squashing 처리를 추가하는 대신 중첩된 레이어 집합에 squashing 처리를 추가 할 수 있습니다. squashing 함수는 각 capsule의 vector 출력에 적용됩니다.

 

 

이 논문은 새로운 squashing 함수를 소개합니다. [그림 3.1]에서 볼 수 있습니다. ReLU 또는 유사한 비선형 함수는 단일 뉴런과 잘 작동합니다. 그러나 이 논문은 이 squashing 함수가 capsule에서 가장 잘 작동함을 발견했습니다. 이것은 capsule의 출력 vector의 길이를 찌부러 트리려고 시도합니다. 작은 vector인 경우 0으로 채우고 vector 길면 출력 벡vector를 1로 제한하려고합니다. dynamic routing은 약간의 계산 비용이 추가됩니다. 그러나 확실히 장점이 있습니다.

이제 우리는 이 논문이 거의 새롭고 capsule의 개념이 완전히 테스트되지 않았다는 것을 깨달을 필요가 있습니다. 그것은 MNIST 데이터에서 작동하지만 여전히 다양한 클래스에 걸쳐 훨씬 더 큰 데이터세트에 대해 검증되어야합니다. 이 논문에 다음과 같은 우려 사항을 제기한 업데이트가 이미 있습니다.

1. 이것은 pose vector의 길이를 사용하여 capsule이 나타내는 개체가 존재할 확률을 나타냅니다. 길이를 1 미만으로 유지하려면 반복적인 routing 절차에 의해 최소화되는 합리적인 objective function이 되는 것을 방지하는 정립되지 않은 비선형성이 필요합니다.

2. 두개의 pose vector 사이 각의 cosine을 사용하여 agreement for routing를 측정합니다. Gaussian cluster의 log variance과는 달리, cosine은 좋은 합의와 아주 좋은 합의를 구별하는데 능숙하지 못합니다.

3. pose를 나타 내기 위해 n개의 요소가 있는 행렬이 아닌 길이가 n인 vector를 사용하므로 변환 행렬은 n이 아니라 n개의 파라미터를 갖습니다.

capsule의 현재 구현에는 개선의 여지가 있습니다. 그러나 우리는 Hinton의 논문의 앞부분에 다음과 같이 말하고 있음을 명심해야합니다.

“이 논문의 목적은 이 전체 공간을 탐색하는 것이 아니라 간단한 구현이 효과적이며 dynamic routing이 도움이된다는 것을 보여주는 것입니다.”

CapsNet을 만들어 보겠습니다. MNIST 데이터를 위한 기본 CapsNet을 설정하는 몇가지 코드를 살펴 보겠습니다. 코드 내에서 주석을 달아서 한줄씩 따라갈 수 있고 어떻게 작동하는지 이해할 수 있습니다. 코드에서 중요한 두부분을 살펴 보겠습니다. 나머지는 repo에 가서 fork하고 작업을 시작할 수 있습니다 :

예제 : capsLayer.py

위의 예제는 전체 capsule layer 입니다. 이것은 이제 Capsule Network를 만들기 위해 스택됩니다. CapsNet에 대한 코드는 다음과 같습니다.

예제 : CapsNet.py

학습 및 평가 모듈과 함께 전체 코드는 여기에 있습니다 . 이것은 아파치 2.0 라이센스 하에 있습니다. 자유롭게 사용할 수 있습니다.

원문

https://hackernoon.com/what-is-a-capsnet-or-capsule-network-2bfbe48769cc

논문

https://arxiv.org/abs/1710.09829

Tags:

Hinton

CapsNet

Capsule Network

Capsule

squashing

agreement for routing

CNN

pooling

Dynamic Routing