티스토리 뷰

이번에 살펴 볼 논문은 아래의 세편이다.

1) Deconvolutional Networks - 2010

2) Adaptive Deconvolutional Networks for Mid and High Level Feature Learning - 2011

3) Visualizing and Understanding Convolutional Networks - 2013

모두 뉴욕대의 Matthew D. Zeiler가 대학원시절에 쓴 논문들이며 이 중에서도 특히 3번 논문이 ImageNet classification에서 우승한 네트워크에 대해 다뤄서 아주 유명하다.


본문에서는 ImageNet에서 우승한 CNN 구조에 대해 다루기보다는 이 세편의 논문에서 지속적으로 등장하는 deconvolution에 대해  다룰 것이다(CNN구조에 대해서는 라온피플 블로그를 참고). Zeiler는 deconvolution을 통해 CNN을 visualize하는 방법을 제안한다, 흔히들 딥러닝은 black-box라고 이야기하는데 그 박스를 조금이라도 더 잘이해하기 위해 그 내부를 들여다보자는 것이다.. deconvolution이 무엇이길래 이를 통해 시각화를 할 수 있는걸까?




1.시각화?

일단 CNN을 시각화한다는건 CNN의 레이어들에 있는 필터들의 역할을 눈으로 볼 수 있게 만든다는 것이다. 아래 그림에서 왼쪽은 conv+pooling을 세번 반복하고 마지막에는 fully connected layer를 통해 최종적인 classification 결과를 얻는 간단한 CNN구조이다. 오른쪽에 있는 patch모음은 각 레이어의 특정 filter를 시각화한 것이다. 우리는 시각화 결과를 통해 레이어 1에서는 작은 특징들(edge,corner 등)을 인식하는구나, 레이어2에서는 레이어1에서의 특징을 조합하여 조금 더 큰 특징들(눈,코,입)등을 인식하는구나, 그리고 레이어3의 필터들은 그걸 다시 종합하여 얼굴의 전체적인 윤곽을 알아내는구나라고 알 수 있다. 원래 filter라는 것이 사람 입장에서는 단순한 matrix이기 때문에 이렇게 시각화를 해주면 CNN이 효과적으로 작동하는지를 관찰하는데 매우 유용하다.


그림1: CNN구조와 내부필터의 시각화



2.deconvolution?

deconvolution은 convolution의 반대과정이다. 나는 신호와 시스템을 배울 때 이 개념을 처음 만났다.

   

위의 식에서 *는 컨볼루션연산, f는 필터, g는 feature map(레이어의 인풋), h는 그 결과이다. convolution은 아시다시피 주어진 f와 g를 통해 h를 얻는 과정이다. 그렇다면 deconvolution은 주어진 f와 h를 통해 위의 식을 만족하는 g를 구하는 연산이다.

(사실 우리가 자주 쓰는 곱셈으로 생각해보면 더 간단하다. y=ax일 때 convolution은 주어진 a와 x를 통해 y를 구하는 것이라면,  deconvolution은 역으로 x=y/a를 통해 x를 구하는 것이다.)


그렇다면 위의 CNN구조를 다시 보자, 예를 들어 레이어3에서 어느 한 필터에 대응하는 feature map의 어떤 값이 상당히 크다(한개의 값). 이때 이 필터의 역할을 어떻게 알 수 있을까? 우리는 위에서 deconvolution이 convolution의 반대과정이라고 이야기했다. 그렇다면 이 deconvolution을 이용하여 feature map의 값이 계산되기까지 거쳐왔던 길을 역추적하여 처음의 인풋이미지까지 돌아간다면, 우리는 인풋이미지의 어떤 부분이 이 feature map을 크게 만들었는지(자극시켰는지) 알 수 있다. 그림1의 오른쪽 부분의 patch들이 바로 그 결과이다, 레이어2에서 어떤 값을 역추적했더니 눈이 나왔다는건 바로 사람의 얼굴에서 눈이 이 필터를 잘자극 시킨다는 것이고, 이 필터는 눈의 특징을 잡아내는 역할을 한다는 것을 의미한다. 


우리는 deconvolution을 통해 feature map을 역추적하면 특정 필터가 처음의 인풋이미지에서 담당하는 부분을 시각적으로 알 수 있다는 것을 알았다. 하지만 컨볼루션은 기본적으로 적분이 들어가는 연산이기에 g에 대한 정보가 없는 상태에서는 그 역연산이 쉽지가 않다(해가 하나가 아닌 경우도 많아서 보통은 estimation을 한다).  게다가 image 같이 차원이 크고 갯수까지 많은 데이터에 대해서 매번 deconvolution을 해주는건 연산량이 매우 부담스럽다.  그래서 딥러닝에서의 deconvolution은 정확한 연산을 한다기보다 그 개념만을 취한다.



2.1 논문:Deconvolutional Networks 에서의 deconvolution

여기서의 deconvolution은 최적화를 이용한다. 논문에서 이 간단한 식이 식(1)의 모습으로 나타난다. 하지만 인덱스때문에 식이 복잡해졌을 뿐 사실 의미는 완전히 같다. z는 feature map을 f는 필터를, y는 해당 레이어의 아웃풋을 의미한다. sigma에 달려있는 K1은 레이어1의 feature map 갯수, z,y의 위 첨자에 있는 i는 아웃풋이미지의 갯수이며 아래 첨자에 있는 c는 channel(혹은 depth)의 index를 의미한다. 



cost function을 (2)와 같이 정하고 이 식을 작게 만들기 위해(Gradient descent 같은 방법을 사용) z와 f를 번갈아가면서 update해준다. 식을 보면 알수 있다싶이 이 cost function을 작게 만들려면 (1)번식의 등호 양쪽에 있는 식들의 값이 최대한 비슷하면서 z의 값이 작으면 된다.  cost function은 결국 Cost=L2 norm+Lp norm 이라는 간단한 형식이다. 컨볼루션 기호는 결국 적분이기에 당연히 미분도 가능하기에 이 식은 최적화가 가능하다.


다만 여기서 최적화를 위해 업데이트 해야하는 파라미터가 z와 f 두개이기 때문에 해가 여러개 나올 수 있는데 그 중에서 위해 가장 sparsity한 해 한개를 구하기 위해 Lp norm을 더 해주었다. 논문에서는 이를 두고 sparsity 제한을 둔다고 이야기한다. 이 제한으로 인해 feature map은 0이 많은 matrix가 될 가능성이 커지고 결국 해가 한개로 수렴하게 된다. 


이 네트워크는 결국 이 논문에서는 sparsity prior라는 조건 하에서의 optimization을 이용하여 식(1)을 최대한 만족하는 해를 얻었다. 그 해가 의미적으로는 deconvolution의 해이기 때문에 deconvolutional network라고 칭하고 있다. 


주의:  여기서는 deconvolution을 CNN을 visualization하는 목적으로 사용한게 아니라 논문제목 그대로 deconvoluional network라는 하나의 네트워크를 제안한다. CNN을 feature extractor로 사용하는 것처럼 이 네트워크도 feature extractor로 사용이 가능하며 그 성능이 논문에 입증되어 있다.

또한 이 네트워크는 얼핏 CNN과 비슷해보이지만 저자는 사실 상당히 다르다고 이야기한다. CNN은 데이터를 가지고 트레이닝을 해야하는 supervised learning이며, 작은 특징을 조합하여 큰 특징을 찾아내어 마지막의 latent representation을 찾는 bottom-up방식이다. 하지만 DeconvNet은 학습데이터 없이, 최적화기법을 통해 필터를 찾아내는 unsupervised learning 이며, 최적화가 완료 된 네트워크는 latent representation에서 image를 만들어낼 수 있는(generative), top-down방식의 네트워크라고 이야기한다.



2.2 논문: Adaptive Deconvolutional Networks for Mid and High Level Feature Learning에서의 deconvolution

이 부분이 사실 이 글을 쓰려는 목적이었는데 배경설명이 너무 길었다. 이 논문에서 등장하는 deconvolution이 현재 segmentation에서도 많이 쓰이는 deconvolution이다. 여기서의 deconvoltuion은 인풋-conv-아웃풋에서 아웃풋을 인풋으로 완전히(혹은 최대한) 되돌리는 것이 아니라 적당히 근사치를 reconstruction(특히 해상도)하는데 목적을 둔다. 예를 들어서 아래와 같은 행렬과 필터의 연산이 있다고 하자. 등호 왼쪽의 3x3행렬에 2x2 필터를 빨,파,녹,노순서로 컨볼루션을 한 결과가 등호의 오른쪽 행렬이다. 그렇다면 deconvolution을 통해 기존의 3x3행렬을 복구 할 수 있을까?



우리는 2.1의 상황과는 다르게 필터까지 알고있지만 못한다.  예를 들어 아래의 세 행렬도 위의 필터와 함께 등호 오른쪽의 행렬을 만들어 낼 수 있다, 그렇다면 무슨 근거를 가지고 deconvolution 결과를 결정 할 것인가? 이를 해결하기 위해 무엇을 그 결과로 삼을지에 대한 약속을 한다.



약속은 이렇다, 예를 들어서 위의 행렬 [5,2;3,4;]에서 5를 만드는 요소는 필터의 4개의 수다, 그렇다면 이 5를 각 element를 곱해준 후 원래 자리로 돌려 놓으면 가장 공평하지 않겠는가? 아래에서 ?를 5를 한쪽에 올인한 형태, 혹은 필터의 element가 0이여서 정보가 없는 위치에 100이 있는 형태 혹은 갑자기 -10이 나오는 등의 형태가 아니라, 마지막처럼, element의 비율에 따라 균등하게 배분하자는 것이다. 이는 결국 숫자 5를 각각의 위치에 wx형태로 weight를 곱하여 복사해주는 형태라 연산도 매우 간단하다.




그림으로 표현하자면 아래와 같다.  위에 있는 초록색 행렬의 각 원소가 아래 파란색 행렬의 9칸으로 필터의 element 값에 따라 복사된다고 생각하면 된다(여러개가 복사되면 그 합이 행렬에서 해당 위치의 값이 된다). 요즘 논문에서 말하는 deconvolution은 보통 이 과정을 말한다.



본문을 통해 우리는 deconvolution을 이해했다, 그렇다면 이 연산을 네트워크에서 어떻게 수행 할 것인가? 복사연산자를 정의할건가? 논문에서는 deconvolution을 해야하는 위치에서 기존 필터의 transpose형태로 convolution을 한다. 그렇다면 왜 convolution filter transpose의 convolution이 deconvolution을 대체 할 수 있는건가? 검색을 조금만 해보면 이를 두고 transposed convolution이라고 한다. 다음 글에서는 어떻게 convolution이 위에서 설명한 deconvolution을 대체 할 수 있으며 왜 transposed convolution이라고 부르는지 알아 볼 것이다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함