Analysis of Model Behaviors
모델의 행동 방식 및 특성을 분석하는 방법에 대해 알아보도록 하겠습니다.
Embedding Feature Analysis

첫 번째로 모델의 embedding feature를 분석하는 방법을 알아보도록 하겠습니다. 이는 예제 이미지를 통해 시각화하는 방법입니다. Nearest-Neighbor 방식을 활용하는데, 구체적으로 query image를 입력했을 때 DB 내에서 query image와 유사한 이미지를 얻은 방식으로 구현됩니다. 예를 들어 코끼리에 대한 이미지를 입력했을 때, 유사한 코끼리 이미지가 나열되는 것을 미루어 보아 embedding space내에서 의미론적으로 유사한 이미지끼리 군집을 이루고 있다는 것을 확인할 수 있습니다. 위 이미지의 파란색 박스 부분을 보면, 동일한 개 이미지더라도 다른 자세를 취하고 있기 때문에 이미지를 벡터 값으로 비교하면 매우 상이할 것이란 것을 알 수 있습니다. 허나 query image에 따라 적절하게 반환되는 것을 보면 확실히 물체의 의미나 개념을 이해하여 군집화되어있다는 것을 알 수 있습니다.

이미지를 Embedding vector로 표현하는 것은 학습된 네트워크에 forward pass시킴으로써 수행합니다. 보통의 상황에서는 이 embedding vector를 기반으로 마지막 classification head를 거쳐 image classification 등의 task를 수행하겠지만 지금 상황에서는 시각화를 목적으로 하기 때문에 embedding vector 그 자체를 활용합니다. 따라서 위 그림과 같이 DB의 이미지와 embedding vector를 매칭시켜두고, nearest-neighbor 알고리즘을 수행하는 것이죠.

이렇게 예제 이미지를 기반으로 전반적인 경향성을 파악하는 방법을 살펴보았는데요. 이는 전체적인 그림을 한번에 확인할 수 없다는 한계를 가집니다. 따라서 이번에는 전체적인 그림을 한번에 확인할 수 있는 시각화 방법을 소개하도록 하겠습니다. 사실 앞서 살펴보았던 embedding vector는 사람이 쉽게 파악하기 어려울 정도의 고차원 벡터입니다. 따라서 이를 사람이 쉽게 파악할 수 있도록 차원 축소를 통해 3차원 벡터로 만들어 시각화해보겠습니다.

구체적으로 t-SNE 방법을 살펴보겠습니다. 본 강의에서 동작 원리에 대해서 구체적으로 다루진 않겠지만, 워낙 유명한 방법인 만큼 직접 자료를 찾아 스스로 학습해보시는 것을 권장드립니다. 위 그림에서 확인할 수 있는 예시는 0-9까지의 숫자 이미지로 구성된 MNIST 데이터의 특징 벡터를 t-SNE를 사용하여 저차원 벡터로 mapping한 결과입니다. 각 클래스마다 색깔 별로 구분하고 있으며, 확인해보면 몇몇의 아웃라이어들을 제외하고 클래스에 따라 군집화된 결과를 확인할 수 있습니다.
Activation Investigation

다음으로 layert의 activation을 분석하여 모델의 특성을 파악하는 방법을 알아보도록 하겠습니다. 위의 예시는 각각 AlexNet conv5 layer의 138번째 채널, 53번째 채널의 activation을 적절한 값으로 thresholding하여 mask를 만들고, 이를 원본 이미지에 overlay하면 위와 같은 결과를 얻을 수 있습니다. 이를 통해 각 layer의 hidden node들의 역할(ex. 얼굴을 탐지하는 혹은 계단을 탐지하는 역할 등)을 파악할 수 있습니다.

비슷한 방법으로는 layer activation에서 가장 큰 값을 가지는 patch의 위치를 기반으로 분석하는 방법도 있습니다. 구체적으로 이미지를 입력시켜 특정 레이어의 activation map을 구하고, activation map에서 가장 큰 값을 가지는 patch의 위치 정보를 저장합니다. 입력한 이미지에서 그 위치에 해당하는 부분을 잘라서 확인해보면 위의 결과와 같이 layer의 역할(ex. 강아지의 눈 혹은 코 등 검정색 동그란 부분을 탐지하는 역할 등)을 추정해볼 수 있습니다.

지금까지는 소개한 방법들에서는 activation을 분석하기 위해 데이터에서 추출한 특정 이미지를 사용했었는데요. 지금 소개할 class visualization은 데이터를 사용하지 않고 네트워크에 내재되어 있는 정보를 시각화하는 방법을 소개합니다. 가령 위의 그림과 같이 "새"로 분류하기 위해서 새의 형상을 띄고 있는 무언가와 나뭇가지 비슷한 무언가를 집중하여 탐지하고 있는 것을 확인할 수 있고, "개"로 분류하기 위해 개의 형상을 띄는 무언가를 탐지하는 것을 확인할 수 있습니다. 또한 개의 형상과 더불어 아이의 형상을 띄는 부분도 확인할 수 있는데, 데이터셋 내에서 개의 이미지가 가족적인 이미지가 많이 포함되었다는 추측할 수 있습니다.

이런 이미지는 gradient ascent를 통해 얻을 수 있습니다. 이때 최적화에 사용하는 Loss fuction은 위와 같습니다. 먼저 f(I) f(I) 의 경우, 이미지를 CNN에 입력해주었을 때 출력된 하나의 클래스 스코어입니다. 따라서 argmax 항의 의미는 특정 클래스에 대한 클래스 스코어를 최대화하는 이미지 I I 를 찾는 것이라고 볼 수 있습니다. 뒤의 regularization term의 경우 앞선 argmax 항에만 의존하여 결과값이 매우 커지는 경우 사람이 이미지의 형태로 파악하기 어려운 결과가 출력되는 것을 방지하기 위한 역할을 합니다. 따라서 이미지 I I 의 L2 norm을 작게 만들도록\lambda||I||_2^2 λ∣∣I∣∣22 형태로 추가됩니다.
이후 위의 그림과 같이 구체적으로 수행 과정을 살펴보면, 먼저 임의의 dummy 이미지에 대하여 클래스 스코어를 예측합니다. 이후 앞서 살펴봤던 loss function에 따라 backpropagation을 수행하여, 클래스 스코어를 최대화하는 방향으로 입력으로 사용한 dummy 이미지를 업데이트 시킵니다. 이후 업데이트된 이미지를 입력으로 사용하여, 동일한 과정을 반복적으로 수행하여 클래스에 대한 시각화 결과를 얻습니다.
참고자료