인공 신경망은 분명히 유의미하게 학습 결과를 도출하지만, 이 과정이 어떻게 진행되는지, 이 결과를 믿을 수 있는지는 알 수 없다. 이를 이해하기 위해서는 인공신경망을 가시화 하고, 이를 해석하여 인공신경망을 이해하도록 해야한다.
각 layer의 단계별로 feature map을 가시화 하도록 한다.
1. 초기 레이어의 가시화
레이어가 낮을수록 Edge, Circle등, 저차원의 특징을 추출함을 알 수 있다.
2. 말기 레이어의 가시화
픽셀 단위로 Nearest neighbors를 하면 단순히 픽셀단위로 유사한 이미지를 묶으므로, 픽셀단으로 다르지만 특징을 공유하는 이미지는 무시하고 그저 픽셀의 데이터만 유사한 그룹을 만든다. 하지만 마지막 레이어에 대해서 Nearset Neighbors를 진행하면 단순 픽셀 데이터가 아닌, 구조적으로 유사한 데이터를 묶음을 알 수 있다.
이때 데이터가 class별로 잘 그룹핑 되었는지 가시화 하기 위해서 우리가 확인할 수 있는 차원으로 줄여 이를 확인할 수 있다. 그 예시로 마지막 레이어에 대하여 PCA와 t-SNE를 이용할 수 있다. 이에 대한 결과는 다음과 같다.
4096크기의 벡터를 2차원으로 나타내어 그룹핑 한 방식이다. 이렇게 그룹핑 한 이후 Nearest Negibor한 결과는 다음고 같다.
t-SNE로 그룹핑 한 대로 유사한 사진들 끼리 묶여있음을 확인할 수 있다 (가령 왼쪽 밑은 '풀'에 대한 이미지들이 모임을 확인할 수 있다.)
3. Visualizing activation
초기 및 말기 뿐만 아니라 중간 레이어의 Activation에 대해서 가시화를 하고 그 레이어가 어떤 특징을 추출하는지 분석하는 것도 매우 중요하다. 가령 다음 사진에서는 얼굴의 윤곽을 추출하는 특정 Activation이 있음을 확인할 수 있다.
하나의 이미지에 대해서 다양한 Activation을 확인하는 방법도 있지만, 다양한 데이터의 특정 레이어의 최대 activation(maximal activation)를 관찰함으로써 어떤 특징을 추출하는지 알 수 있는 Maximally Activating patches라는 방식도 존재한다. 예를 들어 아래의 이미지에서 어떤 네트워크의 어떤 레이어는 원을 감지하는 것을 중요하게 여길수도, 어떤 네트워크의 어떤 레이어는 문자가 포함되어 있는 것을 중요하게 여길 수 있다.
4. Occlusion Experiments
이 방식은 이미지에서 어떤 부분(픽셀, region)이 분류에 큰 영향을 미치는지 분석하기 위한 방법이다. 일정 크기의 가림막을 이미지에 sliding하면서 영역별로 중요도를 판별하는 방식이다.
예를 들어 배의 경우, 배의 하체 및 돛이 분류에 영향을 많이 끼침을 알 수 있다.
5. Saliency Maps
이 방식은 각 픽셀에 대해 Loss의 변화량(미분값, gradient)을 구하여 픽셀단위로 Loss에 미치는 영향을 가시화 하는 방식이다.
이를 이용하여 Segmentaion을 진행할 순 있으나 효율적이진 않다고 한다.
6. Intermediate features via (guided) backprop
Saliency Maps는 각 픽셀에 대해 Loss의 gradient를 구하여 그 gradient를 가시화 하는 방식이었다. Intermediate features via (guided) backprop는 각 픽셀에 대해 최종 Loss가 아닌 중간 레이어의 gradient를 구하여 각 레이어가 어떤 특징을 추출하는지 가시화 하는 방식이다.
7. Visualizing CNN features: Gradient Ascent
아무것도 없는 이미지(Zero image)에 대해 forward와 backprop(픽셀에 대해 neuron value의 gradient를 구함)을 반복하여 이미지를 업데이트 한다. 이렇게 나타난 이미지는 각 클래스별로 네트워크가 일반화 한 이미지를 얻을 수 있다.
여기서 Regularizer는 이미지가 자연스럽게 보이게 하는 역할이다.
이에 대한 결과는 다음과 같다.
네트워크가 특정 클래스에 대해 어떤 특징을 바라보는지 알 수 있다. 하지만 이 특징이 뚜렷하지 않으므로, 이를 개선하기 위해 다음과 같은 개선방안이 나타났고, 그 결과는 다음과 같다.
Gradient Asecent의 특징으로는 이미지의 크기가 커질수록 receptive filter가 커지므로 더 큰 구조와 더 복잡한 패턴을 찾는 경향이 있다.
지금까지의 Gradient Ascent는 하나의 클래스의 일반화된 이미지를 도출하였다. 이를 더 세밀한 이미지를 도출하기 위해서 클래스의 레이블링을 더 세세하게 하는 multi modality방식이 나타났다.
가령 다음 이미지는 모두 Grocery store클래스에 속하지만, 이미지 별로 관점의 차이가 심하므로, 학습 및 가시화에 악영향을 끼친다. 이를 방지하기 위해서 multi modality방식을 사용하는 것이다.
또한 단순히 pixel space를 사용하기 보다는 FC6의 숨겨진 특징(prior)을 이용하여 가시화 하면 더 명확하게 가시화 할 수 있다.
8. 가시화를 적용한 사례
1. DeepDream: Amplify existing features
하나의 이미지에 대해서 네트워크가 그 이미지의 어떤 부분을 어떻게 판별하는지 가시화 한 사례
하늘의 이미지를 DeepDream한 것이다. 그 이미지에 대해서 각 region에 대해서 어떻게 특징을 보고 어떻게 판별했는지 가시화 한 것이다.
2. Feature Inversion
activation map으로 이미지를 재구성 하는 예시이다.
정규화 부분은 overfitting을 방지하면서 자연스러운 이미지를 생성하는 역할을 하고, feature vector와 생성된 이미지의feature vecot의 차이를 최소화 함으로써 layer가 이미지를 어떻게 바라보는지 이미지를 재구성 하여 가시화 하는 예시이다.
레이어가 공간적인 정보는 유지하지만 layer가 깊어질 수록 edge등 저수준의 특징보다는 색과 텍스처에 민감하게 반응함을 볼 수 있다.
3. Texture Synthesis
하나의 입력에 대해 패턴을 분석하고 그 패턴을 이용하여 이미지를 확장하는 방식이다. 과거에는 네트워크를 사용하지 않고 Nearest Neighbor를 이용하여 패턴을 확장시켰다.
하지만 이 방식에는 한계가 있었는데, 문자나 벽돌과 같이 불규칙한 텍스처를 예측할때는 Nearest Neighbor를 사용할 수 없다는 것이다. 이를 해결하고자 네트워크를 활용한 Neural Texture Syntheis : Gram Matrix가 등장하였다.
4. Neural Texture Synthesis: Gram Matrix
이는 네트워크를 활용한 방식으로 CNN의 결과인 C * H * W를 공간적인 데이터를 버리는 대신 feature간의 co-occurence를 이용하여 학습하여 텍스처를 학습하는 방식이다.
이 결과로 C * C의 Matrix가 완성되는데 이는 각 feature간의 co-occurence를 나타낸다. 이것이 어떻게, 어떤 단계로 학습되는지 한번 알아보자.
우선 CNN을 학습한다(혹은 Pretrained model을 가져온다). 그리고 texture를 입력하고, 각 레이어 별로 activation을 기록한다. 그리고 각 레이어 별로 위에서 설명하였던 Gram Matirx를 진행하여 c_i * c_i의 matrix를 만든다. 그리고 random noise로 하나의 랜덤 이미지를 생성한다. 이 랜덤 이미지를 CNN의 입력으로 하여 각 레이어 별로 Gram Matrix을 구한다. 그리고 랜덤 이미지와 학습된 모델의 Gram Matrix의 Loss를 구하고, 이 Loss를 이용하여 랜덤 이미지의 픽셀에 대한 Loss의 gradient를 구한다. 이 gradient를 이용하여 이미지를 업데이트하고, 이 픽셀 update과정을 반복한다(랜덤 이미지 생성 이후 과정 부터 image update 과정까지)
5. Neural Style Transfer: Feature + Gram Reconstruction
앞선 Gram Matrix을 이용하여 이미지(예술 작품)의 texture를 학습하고, 그 texture를 사진에 적용하여 예술 작품의 texture를 갖는 이미지를 합성할 수 있다.
이에 대해서 style loss와 content loss가 존재하는데, 이 loss들을 합칠 때의 비율(weight)에 의해 생성되는 이미지의 형태가 바뀐다.
content loss가 클수록 content image의 모형이 유지되고, style loss가 클수록 패턴을 적용시키는 정도가 커진다.
loss의 비율 뿐만 아니라 이미지의 크기도 결과에 영향을 미친다.
하나의 style 뿐만 아니라 다중 style을 적용시킬수도 있다더라~ 또한 빠르게 transfer하는 방식도 있다더라~ 이에 대한 내용은 구현 과정 중 적용되는 이론보다는 단순히 적용된 예시의 소개에 지나지 않기 때문에 때문에 생략하도록 하겠다.
9. Reference
CS231n Lecture 12 : Visualizing and Understanding
'ML' 카테고리의 다른 글
SOLOv2 논문 리뷰 (0) | 2021.07.18 |
---|---|
SOLOv1 논문 리뷰 (0) | 2021.07.16 |
CS231n Lecture 11 : Detection and Segmentation (0) | 2021.07.12 |
Recurrent Neural Network (RNN) (0) | 2021.07.10 |
CNN 구조 (0) | 2021.07.06 |