본 게시글은 CNN 모델에 적용할 수 있는 XAI 기법 중 하나인 시각화 기법들에 대해 알아보고자 한다. 이제까지 딥러닝은 "왜 이렇게 학습됐는지 모르겠지만 그냥 잘 된다."라며 블랙박스 모델로 여겨져 왔다. 딥러닝 모델을 이해하기 위해 CNN의 필터들이 어떻게 생겼는지, 인풋 이미지에서 모델의 성능에 미치는 부분, 특정 클래스의 activation을 최대화하는 이미지 생성에 대해 알아보고자 한다.
먼저, 진화의 중요한 키포인트인 시각에 대해 짚고 넘어갈 것이다. 사람의 두뇌 겉부분을 가리키는 대뇌피질은 모든 인지와 판단을 담당하는 것으로 알려져 있다.그리고 대뇌피질의 30%가 넘는 부분이 모두 시각을 처리한다는 점이 주목할 점이다. 촉각을 담당하는 부분이 8%가량, 청각을 담당하는 부분이 2%라는 점과 비교하면 괄목할 만한 수치이다. 진화가 폭발적으로 시작된 것이 빛에 반응하는 시신경 세포의 등장이라는 점을 고려하면 어느정도 이해가 되기도 한다. 시각은 생물의 진화에 큰 역할을 하였다. 포식자들이 피식자를 찾을 때 주로 시각에 의존한다. 이는 피식자도 마찬가지이다. 즉, 물체를 인식하는 것은 생존에 직결되는 문제이다.
Hubel과 Wiesel이라는 과학자는 시각과 두뇌의 관계를 알기 위해 고양이의 뇌에 전극을 꼽은 후 다양한 자극을 주어 실험을 진행하였다.
그 결과, 두뇌 피질에서 가까운 영역은 가까운 물체를 인식한다는 것이었다. 이를 Topographical Mapping이라 한다. 예를 들어 눈과 코가 가까이 있다면, 눈을 인식하는 뉴런과 코를 인식하는 뉴런이 대뇌피질 위에 공간적으로 비슷한 위치에 존재한다는 것이다.
더 나아가 Hubel과 Wisel은 시각에서의 Abstraction 기능을 밝혀냈다. 예를 들어, 어떤 물체가 얼굴임을 인식하기 위해서는 얼굴의 구성요소인 눈, 코, 입 등을 인식하는 뉴런이 있고, 인식한 눈코입이 정해진 위치에 있는 인식하는 뉴런이 있다는 것이다.
- 대뇌피질에서 가까운 세포들은 가까운 물체를 처리한다. 즉, Spatial Information을 유지한다.
- Feature들을 Abstract하여 계층적으로 처리한다.
이러한 특징을 반영한 것이 CNN이다.
CNN의 기원은 1980년에 일본의 딥러닝 연구자인 Fukushima가 제안한 Neurocognitron이다. 앞서 설명한 두가지 특징을 바탕으로 시신경의 구조를 모방한 계층적 구조를 가지는 모델을 제안하였다.
간단히 CNN에 대해 알아보았으니 이제 CNN에서 필터의 역할을 알아보고자 한다.
합성곱 필터는 위와 같이 주파수 필터의 역할을 한다. 다섯번째 그림은 low-pass filter로 저주파만 통과하기 때문에 블러리한 이미지를 결과로 얻는다. 세번째 그림인 Laplace Filter는 Edge를 Detect하는 역할을 한다. 네번째 그림인 high-pass filter는 이미지가 선명해지는 결과를 얻을 수 있다. 즉, 학습된 CNN 필터들은 이런 식으로 경계선을 찾거나 블러리한 면을 찾는 등 다양한 주파수 필터의 기능을 한다.
전통적으로 영상처리에 사용되는 기법으로 Gabor Filter가 있다. 수학자 Dennis Gabor가 만든 것으로 Edge를 검출하는 필터로 사용되어 왔다.
총 8개의 파라미터가 존재하며 이를 변화시키면 아래와 같은 Gabor Filter들을 얻을 수 있다.
아래 사진은 학습된 CNN의 필터들이다. 놀랍게도 이전의 Gabor Filter와 매우 유사한 모습들을 확인할 수 있다.
CNN은 Gabor Filter와 무관하게 학습되었음에도 불구하고 그 결과는 매우 유사하다. 아래와 같은 필터는 45도 기울어진 모양의 high-pas filter로 45도 방향의 경계선이 있는지 체크하는 역할을 한다. Gabor Filter와 CNN Filter는 무관한 개념임에도 불구하고 경계선을 검출하겠다는 목적이 일치하기 때문에 유사한 필터를 가지게 된다고 해석할 수 있다.
위 그림은 왼쪽의 자동차 이미지가 CNN 모델의 각 레이어를 거쳐서 나온 결과를 시각화한 것이다. input에 가까운 레이어를 통과한 결과는 원본 이미지에서 크게 변형되지 않았지만 필터별로 관심을 두는 부분이 조금씩 다른 것을 확인할 수 있다. 그리고 output에 가까운 레이어일 수록 추상화 수준이 높아 해석이 어렵다. 이러한 레이어별 추상화 정도가 차이난다는 점을 활용한 연구가 Neural Style이다.
Content의 역할을 하는 마을 사진을 보면, input layer에 가까울수록 원본 이미지와 유사하고, output layer와 가까울수록 추상화 수준이 높아짐을 확인할 수 있다. Neural Style에서는 content로 사용할 원본 이미지의 세세한 부분이 아니라 큼직한 추상화된 feature가 필요하므로 깊은 레이어의 activation 결과를 사용한다.
Input Image를 모델이 어떻게 분류했는지 알기 위해 visualization하는 방법론으로는 크게 네가지가 있다.
위 그림은 image의 어떤 부분이 이미지 분류에 큰 영향을 미치는지 알아본 결과이다. (a)와 같은 input image가 있을 때, 작은 회색 상자를 그린다. 그리고 모델에 통과시켜서 나온 결과를 기록한다. 이 회색상자를 조금씩 이동시키면서 위 과정을 반복한다. 그 결과를 heatmap으로 시각화한 것이 (d), (e)이다. (d)는 회색상자로 일부가 지워진 그림이 포메라니안일 확률이 높으면 빨간색이고, 낮으면 파란색이다. 즉, 파란색으로 부분이 지워지면 포메라니안으로 분류될 확률이 낮으므로 이 부분이 분류 결과를 결정하는 중요한 부분임을 암시한다. Input image에서 파란 부분은 강아지의 얼굴임을 알 수 있다. 즉, 본 실험은 CNN이 사람이 물체를 인식하는 과정과 유사하다는 것을 검증하였다.
위 사진은 Deconvnet의 결과물로, image를 모델에 집어 넣었을 때, 각각의 layer에서 activation을 크게 만드는 feature map을 시각화할 수 있다. 즉, input image의 어떤 부분이 레이어를 Activate시켰는지 알아보기 위해서 Activation 값을 input에 mapping시키는 것이다. 이를 위해서는 CNN을 거꾸로 거슬러 올라가는 과정이 필요하다.
Deconvolution은 convolution의 역연산으로, 레이어를 활성화하는 부분을 input image에 mapping하기 위해서 진행한다. CNN은 필터와의 Convolution -> Activation Function -> Pooling
으로 이뤄져있다. Deconvolution은 이 과정을 거꾸로 진행한다.
1. Unpooling
Forward Pass에서 Max Pooling을 할 때 max의 위치를 저장한다. Backward Pass에서 이전 레이어에서 넘어온 값을 미리 저장해둔 위치에 삽입한다.
2. Rectification
CNN은 feature map의 값이 항상 양수가 되도록 non-linear 함수인 ReLU를 사용한다. 이와 마찬가지로 backward pass에서도 non-linear ReLU를 사용한다.
3. Filtering
Convolution 연산을 할 때 사용했던 Filter 정보를 갖고 있기 때문에, 역연산이 가능하다. 이 과정이 잘 이해되지 않으면 여기를 참고하길 바란다.
Saliency map은 Input Image의 각각의 픽셀이 top-1 predicted 클래스에 미치는 영향을 시각화한 것이다. 예를 들어, 첫번째 사진을 input으로 넣었더니 모델이 요트로 분류했다고 하자. 이는 output vector에서 요트를 나타내는 element가 가장 크다는 것을 의미한다.
요트의 Loss, Input Image의 (i,j) 픽셀
Backpropagation을 통해 각각의 픽셀에 대한 편미분값을 구하고, RGB채널 중 가장 큰 값을 시각화에 사용한다.
Saliency map을 이용하여 Segmentaion도 가능하다.
이제까지는 Input Image가 주어진 경우, 모델의 성능에 영향을 미치는 부분을 시각화하는 방법에 대해 알아보았다. Optimization method는 Input Image 없이 특정 클래스를 최대화하는 Input Image를 찾는 것이다.
1. Zero Image를 모델에 넣고, Forward Pass를 계산한다.
2. output vector에서 원하는 클래스의 값은 1로, 나머지 클래스의 값은 0으로 만든다.
3. 이 vector를 이용하여 Gradient Ascent를 한다.
4. Backward Pass를 통해 도착한 값을 Input Image에 더한다.
5. 1로 돌아가 반복한다.
위 과정을 통해 특정 클래스를 Activation하는 이미지를 만들 수 있다.
이 때, 성능 향상을 위해 다음과 같이 Regulrization term을 추가하고, 노이즈를 제거하기 위해 Low-pass filter(Gaussian Blur)를 통과시킨 후 threshold보다 작은 값은 0으로 만든다. 결과는 다음과 같다.
생성된 이미지에서 클래스에 속한 물체들이 보인다. 이를 통해 추측할 수 있는 사실은 두가지이다.
1. Overfitting
모델이 training data에 overfitting되었음을 확인할 수 있다. 예를 들어, 좌측 하단의 거위 이미지를 보자. 거위들이 특정 위치에 특정 자세로 서있는 것을 볼 수 있다. 즉, training data에 있던 거위의 흔적이 강하게 남아서 위와 같이 visualize된 것이다. 만약 모든 가능한 위치에 모든 자세의 거위가 학습되었다면 이미지 전체에 거위의 이미지가 퍼져있을 것이다.
2. 보안 이슈
위의 결과는 optimization을 통해 training data를 일부 시각화할 수 있음을 의미한다. 즉, 모델의 Gradient값을 알아낼 수 있다면 training data를 역추적할 수도 있음을 나타낸다. 보안성이 취약하기 때문에 신용평가 등 개인정보를 다루는 모델에서 주의를 요한다.
작성자: 투빅스 15기 황보진경
참고자료
본 내용은 이정우 교수님의 딥러닝의 기초(2020) CNN 강의를 기반으로 작성되었으며, 아래의 자료들을 참고하였다.
- https://peterkim95.github.io/jekyll/update/2017/08/29/introspectiveness-of-nn/
- 안재현. (2020). XAI 설명 가능한 인공지능, 인공지능을 해부하다 / 안재현 지음.
- https://cs231n.github.io/convolutional-networks/
- https://www.popit.kr/neural-style-transfer-%EB%94%B0%EB%9D%BC%ED%95%98%EA%B8%B0/
- M. D. Zeiler and R. Fergus, “Visualizing and understanding
convolutional neural networks,” in European Conference on
Computer Vision (ECCV), 2014.- K. Simonyan, A. Vedaldi, and A. Zisserman. Deep inside convolutional networks: Visualising image classification models and saliency
maps. CoRR, abs/1312.6034, 2014.