본문 바로가기

Machine Learning

[CS231n] 12. Visualizing and Understanding

0. 서론

이 강의의 목표는 여태까지 블랙박스(중간 과정에 대한 이해나 설명이 어려운 구조) 형태로 바라보았던 Convolutional Network의 내부가 어떻게 작동하는지에 대한 최소한의 이해를 가지는데에 있다. 물론 아직까지 딥러닝 구조를 완벽히 설명할 수는 없지만 특정 입력값을 변화시킨 후 이에대한 네트워크의 변화를 관찰함으로써 어느정도의 인과관계를 설명하고자 한다.


1. Convolutional Filters

각 Feature Map에서 필터가 찾고자 하는 정보는 어떤것인지에 대한 정보를 얻기 위해서 수많은 이미지를 이용해 훈련이 완료된 네트워크에서 weight 값을 시각화하는 방법을 채택할 수 있다. 일반적으로 이미지를 분류하는 경우 입력 값으로 3xHxW 형태의 Tensor가 들어오게 되고 이에 따라 Convolutional Filter(이하 필터) 또한 RGB 세개의 채널을 가지게 되므로 각 필터의 형상(?)을 시각화하는 것이 가능하다. 다음은 ImageNet 챌린지에서 사용된 몇개의 네트워크의 첫번째 층에서 특징을 추출하는 필터를 시각화한 모습이다.

첫번째 층의 필터를 시각화한 그림

사람이 어떤 물체를 인식할 때 물체의 윤곽과 같은 정보를 가장 먼저 처리하는 것으로 알려져있는데 기계학습을 통해 훈련된 모델 또한 이미지에서 윤곽 정보를 도출해내는 것을 확인할 수 있다. 필터의 모습으로부터 각각의 필터가 어떤 모양을 이미지로부터 찾고자 하는지를 알 수 있는 이유는 이미지의 일부와 필터의 모양이 유사할 때 활성화값이 커지기 때문이라고 생각할 수 있다.

첫 번째 층이 아닌 중간 계층의 필터에 대해서도 같은 분석을 할 수 있지만 3개의 채널을 가지는 것이 아니기 때문에 여러개의 Gray-Scale 이미지로 이를 시각화할 수 있다. 여기서부터는 필터의 형상으로부터 의미있는 정보를 도출해내기가 사람으로써는 어려워진다.


2. 마지막 FC Layer

마지막 FC 층은 이미지의 전반적인 알짜 특성을 담고 있을 것으로 기대되는 층이다. 이전 강의에서 CIFAR-10 데이터셋을 사용하여 단순 픽셀값을 이용한 Nearest Neighbor 전략으로 비슷한 이미지를 추출하는 것과 AlexNet의 마지막 4096 차원의 FC 벡터값을 이용한 NN 전략을 비교해보면 어떤 통찰을 얻을 수 있다.

단순 픽셀 값 비교 NN / 마지막 FC 층(4096 차원 벡터) 비교 NN

단순 픽셀 값을 이용하여 이미지를 비교할 때는 비슷한 색이나 형태를 가진 다른 물체가 2-3번 째부터 등장하는 반면 FC 층의 데이터를 비교함으로써 얻어낸 이미지들은 방향이나 배경의 색이 달라도 같은 사물에 대한 이미지를 정확히 추출해내는 것을 확인할 수 있다. 이를 통해 우리는 ConvNet이 이미지 전반의 특성 뿐 아니라 이미지내에 존재하는 특정 물체를 지역화하여 찾아낼 수 있다는 것을 유추해볼 수 있다.

더불어 마지막 FC 층의 정보를 2차원 공간으로 차원을 축소시켜 시각화 하면 다음과 같이 자연스럽게 N개의 군집(Cluster)을 발견할 수 있다. 이미지 내에 있는 물체를 효과적으로 분류하기 위한 방법이 사용된다는 것을 알려주는 반증이라고 생각할 수 있다.

마지막 FC 층의 표현을 이용해 t-SNE 방식으로 시각화한 자료 (예를 들어 왼쪽 아래에는 식물들의 이미지가 군집화 되어있는 것을 확인할 수 있다)


3. 분류 결정에 영향을 주는 요소 찾기

다음으로는 분류 결정에 영향을 주는 요소를 이미지로부터 찾기 위해 크게 세가지 방법을 소개한다. 첫 번째 방법은 특정 계층의 활성화 값을 최대화(Maximize)하는 이미지 패치들(Patches)을 찾는 방법으로 여러 이미지를 네트워크의 입력 값으로 제공한 다음 미리 결정한 특정 활성화 채널의 값에 영향을 많이 주는 이미지를 걸러내는 것이다. 다음 그림은 이를 시각화 한 것으로 이는 실제로 특정 뉴런이 특정 형태에 반응한다는 사실을 우리에게 알려준다.

예를들어 첫번째 실험의 경우 해당 채널이 둥근 모양의 물체(주로 눈)에 반응한다는 사실을 우리에게 알려준다

두 번째 전략은 이미지의 특정 부분을 마치 Convolution Filter를 이미지에 슬라이딩 하듯이 순차적으로 가린 뒤 분류를 진행하여 특정 부분을 가렸을 때 얼마나 분류의 결정에 영향을 미치는 지를 계산하고 시각화하는 것이다. 이 방법은 네트워크 구조가 분류에 대한 결정을 내리기 위해 이미지의 지역적인 형태에 집중할 것이라는 가정이 전제되어 있으며 heatmap을 이용해 이를 시각화 해보면 실제로 이 가정이 꽤 신뢰성을 가진다는 것을 발견할 수 있다.

붉은 부분을 중점으로 본다는 의미로 해석할 수 있다 (잘못 분류할 가능성이 높다는 의미)

마지막은 Saliency Map이라는 구조를 이용하는 것으로 이미지의 특정 부분보다는 구체적으로 각 픽셀들이 얼마나 분류에 영향을 미치는지를 조사하는 방법이다. 이는 단순히 분류한 Class 스코어의 입력 이미지 픽셀에 대한 미분값을 구함으로써 알 수 있다. 다시말해 입력 이미지의 특정 픽셀하나를 조절할 때마다 이가 최종 분류 결정에 얼마나 영향을 미치는지에 대한 정도를 알 수 있으며 이는 다시 말해 네트워크가 어떤 픽셀에 특히 반응하는지를 알려주는 지표로 생각할 수 있다.

네트워크가 집중하는 픽셀들을 알려줌으로써 Label이 주어지지 않은 상태에서 이미지 Segmentation을 할 수 있는 방법으로도 연구되었다


4. Gradient Ascent

경사 상승법(Gradient Ascent)는 반대로 특정 활성화 계층의 값을 향상시키기 위해 입력 이미지의 픽셀 값 자체를 변조시키기 위해 고안된 기법이다. 먼저 생성하고자 하는 이미지를 특정 값으로 초기화 한뒤(특정 분포나 노이즈를 사용) 이미 훈련이 완료된 네트워크를 통해 순전파를 한다. 이후  Maximize 하고자 하는 계층에 도달하기 위한 미분값을 계산하여 이미지를 갱신하는 것을 반복함으로써 특정 이미지를 생성할 수 있게 된다. 이때 이미지의 L2 norm을 통해 페널티를 줌으로써 입력값에 이상치가 생기지 않도록 정규화하는 과정을 추가한다. 다음은 해당 방법을 이용해 특정 Class label로부터 이미지를 생성한 결과를 보여준다.

달마시안 같은 경우 검은 점들을 볼 수 있다는 점에서 꽤 잘 동작함을 알 수 있다

이때 regluarizer에 약간의 과정을 추가해 조금 더 실물에 가까운 이미지를 생성하고자 한 시도가 있었다. Gaussian Blur를 적용하고 작은 값을 가지는 픽셀이나 미분값을 0으로 세팅함으로써 지역적인 노이즈를 조금 더 없앤 결과 다음과 같이 조금 더 향상된 이미지를 얻을 수 있음이 알려져있다.

이전보다 이미지가 조금 더 실물에 가까워진것을 확인할 수 있다

참고로 완전 새로이 초기화된 이미지가 아닌 이미 존재하는 이미지를 비슷한 방법을 이용해 Amplify 시켜 새로운 이미지를 생성하고자 하는 Deep Dream과 같은 시도가 있었으며 다음과 같은 이미지를 생성해내는 것을 확인할 수 있다. 이미지넷의 경우 개와 관련된 Label이 많았기 때문에 유난히 특이한 모습의 개들이 나타나는 것을 확인할 수 있다.

하늘 이미지를 넣었을 때 생성되는 지역적인 패턴들

위와 같은 특성을 잘 생각해보면 특정 이미지로부터 시작해 완전 다른 라벨에 대한 활성값을 최대화하고자 하는 노력을 반복하면 이미지에 사람이 해석하기는 어려운 노이즈가 추가되어 훈련된 이미지넷으로서는 완전히 다른 이미지로 인식하게끔 만들수가 있다. 아래는 실제로 특정 이미지로부터 시작해 다른 Class Label의 활성도를 향상시키도록 재훈련을 시켰을 때 네트워크가 다른 사물로 인식하는 모습을 보여준다.

코끼리를 코알라로 인식하고 배를 아이팟으로 인식하는 모습


5. Texture Synthesis

컴퓨터 그래픽을 많이 다루는 분야에서는 특정 질감을 생성하기 위해 사용하는 알고리즘이 있다. 대표적으로는 Nearest Neighbor 전략이 있으며 기존에 주어진 작은 질감 이미지로부터 가장 가까운 픽셀 값을 시시각각 찾아 채우고자 하는 필드를 채우는 것이다. 이는 나름 잘 동작하지만 특정 질감에 대해서는 어느정도 깨지는 현상이 나타난다.

Nearest Neighbor 방식을 이용한 Texture Synthesis

하지만 인공신경망 구조를 통해 Texture Synthesis의 성능을 조금 더 향상시킬 수 있다는 연구가 발표되었다. 해당 연구는 질감에 대한 정보를 ConvNet의 입력으로 제공한 뒤 질감을 설명하기 위한 추상적인 구조인 Gram-Matrix를 생성함으로써 목표를 달성할 수 있다고 주장한다. ConvNet의 특청 층으로부터 계산한 Gram Matrix의 차이를 이용해 Loss Function을 제작한 뒤 손실을 최소화 하기 위해 생성하고자 하는 입력 이미지 층으로 미분값을 역전파 했을 때 어느정도 주어진 질감에 해당하는 이미지를 생성할 수 있음을 보여준다.

또한 더 깊은 층으로부터 손실을 계산할 수록 더욱 주어진 질감과 유사한 이미지를 얻을 수 있다는 것을 관찰함으로써 ConvNet의 깊은 층이 이미지에 대한 전반적인 정보를 처리하고 있음을 다시 한번 확인할 수 있다.

깊은 층에서 얻은 정보가 더욱 처음 주어진 이미지와 유사한 형태를 만들어낸다

완전 새로운 이미지로부터 질감을 생성하기 보다 두 개의 이미지에 대한 질감 차이를 최소화 하는 방법을 사용함으로써 특정 이미지의 분위기를 합성하는 것도 가능하다. 이는 Style Transfer(스타일 변환)이라고도 잘 알려져있는 기법이며 두 이미지에서 각각 생성되는 Gram Matrix의 값을 최소화함으로써 이미지를 생성하는 기법이다. 유명한 화가의 그림과 일반적인 사진을 합성하면 다음과 같이 반 고흐의 화풍으로 사진을 재해석한 이미지를 얻을 수 있다.

반 고흐의 그림을 이용한 Style Transfer