DenseNet은 ResNet이 나오고 2년 후에 나온 Skip-connection을 base로 작성된 논문이다.
ResNet보다 적은 파라미터, (Skip-connection을 이해하였다는 가정하에) 쉽게 이해되는 모델 구조로 인해 리뷰할 두번째 논문으로 선택하였다.
DenseNet 논문 리뷰
DenseNet은 말 그대로 CNN의 채널을 Dense하게 연결한 네트워크이다.
논문의 앞 부분부터 천천히 살펴보며 어째서 이러한 구조를 선택하였고 왜 좋은지에 대한 Discussion도 알아보겠다.
DenseNet 구조를 제안한 이유
리뷰한 논문이 많지 않기에 이 논문 역시 읽고 나서 블로그에서 여러개의 리뷰를 읽어보았다. 대다수의 블로그에서 아래 글에 대한 언급은 없었는데 이 문구를 보고 Xception, SeNet과 유사한 insight를 가지고 구현한 모델이라 생각하였다.
Each layer reads the state from its preceding layer and writes to the subsequent layer.
It changes the state but also passes on information that needs to be preserved.
ResNets [11] make this information preservation explicit through additive identity transformations.
각 계층이 이전 층의 상태를 받고 이어진 층으로 넘기는 역활을 한다. 이때 상태를 변화시키기도 해야하지만 동시에 보존되어야할 정보도 다음 층으로 넘겨주는 두가지 역확을 수행해야한다. ResNet은 이러한 보존을 추가적인 identity transforamtion(항등 함수)을 이용하여 변환과 별도로 가능하게 하였다. 논문에서는 펼쳐진 RNN과 유사하다 하였다(개인적으로 LSTM과 더욱 유사하다 생각한다).
An advantage of ResNets is that the gradient can flow di-rectly through the identity function from later layers to the earlier layers.
However, the identity function and the output of H' are combined by summation, which may impede the information flow in the network
ResNet은 항등 함수를 이용하여 이전층의 gradient를 그래도 넘길 수 있으나 이러한 항등 함수는 덧셈 연산을 통해 구현되기 때문에 네트워크에서 정보의 흐름을 방행할 수 있다고 한다.(솔직히 이 부분은 이해가 안된다)
DenseNet 구조
To further improve the information flow between layers we propose a different connectivity pattern: we introduce direct connections from any layer to all subsequent layers
저자는 정보 흐름을 개선하기 위하여 다른 종류의 연결 패턴을 제안하였다. 바로 모든 층에서 이후 층까지 직접 연결하는 방법이다.
Consequently, the ㅣth layer receives the feature-maps of all preceding layers,x0,...,x−1, as input:x=H([x0,x1,...,x−1]),(2)where[x0,x1,...,x−1] refers to the concatenation of the feature-maps produced in layers0,...,−1. Because of its dense connectivity we refer to this network architecture as Dense Convolutional Network (DenseNet).
위와 같은 형태를 통해 L번째 층은 모든 이전 층과 연결되므로
위와 같은 입력을 받게 되며 이는 이전 모든 층의 특성맵을 concat한 결과이다. 이러한 연결이 마치 Dense connectivity와 유사하여 네트워크를 DenseNet으로 이름지었다 한다.
이러한 Dense connenctivity는 하나의 모듈 안에서만 이루어지며 모듈 간에 다운 샘플링을 위하여 1x1 conv연산과 2x2 avg pool 연산을 거친다.
f each function H produces k feature-maps, it follows that theㅣthlayer hask0+k×(ㅣ−1)input feature-maps, where k0 is the number of channels in the in-put layer.
An important difference between DenseNet and existing network architectures is that DenseNet can have very narrow layers,e.g.,k= 12.
L번째 층은 이전 층으로 부터 k + k(l -1)개의 특성맵을 연결로 받는다. 다른 모델 구조와의 중요한 차이점은 DenseNet은 기존의 모델보다 매우 낮은 필터 수 k=12를 가진다는 것이다.
One explanation for this is that each layer has access to all the preceding feature-maps in its block and, therefore,to the network’s “collective knowledge"
저자는 DenseNet이 기존 sota를 뛰어넘는 성능을 보여주는 이유 중 하나로 각각의 블록 내의 특성맵이 모든 이전 맵의 특성 맵에 대해 접근 가능하여 "집약적 지식"을 얻기 때문이라 설명하였다.
Discussion
- Model compactness: DenseNet은 기존 ResNet보다 채널 개수가 적기 때문에 모델이 가볍다.
- Implicit Deep Supervision: 상층의 분류기 결과가 2,3 개의 transition layer까지 정확한 supervision을 제공할 수 있다(처음 보는 개념이라 자세히는 모르겠다)
- Stochastic vs deterministic connection: Skip-connection 덕분에 각 층이 무작위적으로 직접 연결될 가능성을 가져 일종의 규제 역활을 함.
- Featuer Reuse: 같은 블록 내의 모든 층이 연결되어 있기 때문에 초기에 추출한 특성이 네트워크 내에서 계속 사용된다. 아래 그림은 한 모듈 내에서 층 사이 가중치의 L1norm이다. 이때 Transition을 거친 이 후 첫번째 층에서 이후 층으로 넘기는 가중치는 거의 변하지 않는걸 확인할 수 있다. 이는 이전 층의 특성을 충분히 학습하여 모델에서 사용할 수 있다는 뜻이며 이후 층에서는 새로운 고차원 특성만을 추출하기 때문에 모델 학습에 용이할 수 있다.
처음 ResNet을 봤을때 신선한 구조와 간단한 연산만으로 기존 모델의 성능을 크게 뛰어넘은 것에 놀랐었다. 이번 모델은 기존의 좋은 성능을 보이는 네트워크 형태와 저자의 insight를 적절히 통합하여 다시 한번 sota급 성능을 냈다.
정보를 처리하는 기능과 보내는 기능을 하기에 이를 위와 같은 네트워크 형태를 이용하여 두가지 기능을 분리시켜 학습하는 모델을 만들어냈다는 점을 보고 insight를 구현해내는 방식이 신선했다.
DenseNet논문링크: https://arxiv.org/pdf/1608.06993v5.pdf