AI model들은 항상 black-box라는 문제를 가지고 있다. 이 문제로 인해 모델 안에서 어떤 일들이 벌어지고 있는지를 직접 시각화하고 알아내고자 하는 시도들이 많이 있었는데, Activation Maximization (Maximization by optimization) 도 그 시도들 중에 하나이다.
특히 Activation Maximization은 CNN에서 각 Feature Map들이 표현하는 시각적 특징이 무엇인지를 시각화하려는 시도이다. CNN의 구조 중 하나를 "target"으로 고정시켜놓고, 이를 최대로 활성화시키는 입력 이미지를 찾거나 생성하는 방법이다. (여기서는 생성하는 방식을 다루도록 하겠다)
참조:
- Olah, et al., "Feature Visualization", Distill, 2017.
- Visualizing higher-layer features of a deep network, Erhan, D., Bengio, Y., Courville, A. and Vincent, P., 2009. University of Montreal, Vol 1341, pp. 3.
Feature Visualization by Optimization
Neural Network는 기본적으로 input에 대해 differentiable 하다. 그렇기 때문에 어떤 input이 특정 behavior를 만드는지를 알아보기 위해서는, 그 input을 derivative들로 조정해나가면서 알아볼 수 있다. 이게 무슨 말이냐면,

이렇게 random noise를 설정한 후에, gradient ascent를 이용해서 점점 우리가 원하는 "particular neuron"의 activation이 maximization 되는 방향으로 noise를 바꿔주는 것이다. (물론 모델의 훈련이 끝나고 나서 하는 일이다)
그러면 자연스럽게 드는 생각이, 우리가 원하는 particular neuron, 즉 "target"은 어떤 걸 할 수 있는지에 대한 궁금증이 들 수 있다. 그건 굉장히 다양한 옵션이 있을 수 있는데,

특정 neuron도 가능하고, channel, 하나의 layer, class logit, 그리고 마지막 class probability에 대해서도 가능하다. 여기서 classifier 부분에 대한 시각화는 softmax 함수 직전의 값인 class logits / softmax를 통과한 마지막 class probability 2개로 나뉠 수 있는데, 논문 저자들은 pre-softmax 부분에 대한 시각화가 더 나은 이미지를 출력한다고 말한다.
pre-softmax 부분에 대한 시각화가 더 나은 이미지를 출력한다는 결과에 대해 저자들의 가설 중 하나는, softmax 부분의 optimization이 힘들다는 것이다. 그래도 이유가 무엇이던 간에, 강한 regularization과 generative model을 곁들이면 해결할 수 있다고 한다 (이 경우에는 probability가 optimization에 중요한 요소 중 하나가 될 수 있다고 한다)
Maximization by Optimization의 장점
기존의 방법 중 하나는, Maximally Activating Images 라는 방법론으로, 모델의 특정 target 출력값을 최대로 활성화하는 이미지를 dataset에서 찾아서 return하는 방법이 있었다.

이렇게 해당 feature map을 최대로 활성화시켰던 이미지들을 찾아내면, 그 이미지들에 대해 Activation Visualization을 다시 수행해서 해당 feature map이 그 이미지들의 어떤 부분에 초점을 맞추고 있는지를 알아볼 수 있다.

하지만 처음의 random noise로부터 직접 생성하는 방식은, 기존에 있는 거에서 찾아서 보여주는 것이 아니라 수치에 따라 직접 생성하는 방식이기 때문에, 좀 더 flexible하다는 장점이 있다.
Activation Maximization의 수식적 표현
이번에는 논문 속에서의 수식적 표현을 알아볼 차례인데, activation map인 optimal x는 다음과 같이 구할 수 있다.

수식을 보면, h 부분은 activation 부분이고, 이 값을 max하는 argument인 x를 찾는 것이다(argmax).
수식만 보고 처음에는 좀 헷갈렸는데, x를 inital random noise로 초기화시킨 후에, gradient ascent로 저 h 부분이 maximize 되는 걸 찾는다는 뜻의 수식이다.
Network를 다 훈련시키고 나면 weight가 fix되기 때문에, 다른 부분 없이 고정된 weight / bias를 이용해서 simple gradient ascent를 input space에 대해 (noise에서 바꿔나가는 식으로) 수행하면 된다.
The Enemy of Feature Visualization
저자들은 feature visualization의 문제점을 하나 짚고 넘어가는데, 이는 convolution network의 구조적 특징 때문이라는 주장을 한다. 먼저 저자들이 언급하는 문제점은, 뭘 해도 noise가 가득한, 뭔가 무의미한 high-frequency 패턴들이 계속 나온다는 것이다.

저자들은 왜 이런 high-frequency pattern이 나오는지는 확실하게 알지 못하지만, 아마도 CNN의 strided convolution과 pooling 연산이 gradient의 high-frequency한 패턴을 만든다고 주장한다.
Short Implementation
다음은 간단한 코드를 통해 Activation Maximization을 구현한 결과이다.
골든 리트리버 class의 logit을 타겟으로 설정하고, 이를 maximize하는 optimal한 x를 찾는 결과물을 볼 수 있다.

10시 방향과 1시 방향에 리트리버 얼굴 같은 것들이 보이는 모습을 볼 수 있다.
최종 코드는 제 깃허브에 업로드 해놓았습니다: https://github.com/ShinyJay2/Explainable-AI/tree/main/Activation_Maximization
'Explainable AI' 카테고리의 다른 글
[논문리뷰] SmoothGrad: Removing noise by adding noise (0) | 2025.03.26 |
---|---|
[논문리뷰] Saliency Map (0) | 2025.03.26 |
[논문리뷰] Neural Additive Models: Interpretable Machine Learning with Neural Nets (0) | 2024.09.05 |
Generalized Additive Models(GAMs) (0) | 2024.09.04 |
Generalized Linear Models(GLMs) (0) | 2024.09.03 |
AI model들은 항상 black-box라는 문제를 가지고 있다. 이 문제로 인해 모델 안에서 어떤 일들이 벌어지고 있는지를 직접 시각화하고 알아내고자 하는 시도들이 많이 있었는데, Activation Maximization (Maximization by optimization) 도 그 시도들 중에 하나이다.
특히 Activation Maximization은 CNN에서 각 Feature Map들이 표현하는 시각적 특징이 무엇인지를 시각화하려는 시도이다. CNN의 구조 중 하나를 "target"으로 고정시켜놓고, 이를 최대로 활성화시키는 입력 이미지를 찾거나 생성하는 방법이다. (여기서는 생성하는 방식을 다루도록 하겠다)
참조:
- Olah, et al., "Feature Visualization", Distill, 2017.
- Visualizing higher-layer features of a deep network, Erhan, D., Bengio, Y., Courville, A. and Vincent, P., 2009. University of Montreal, Vol 1341, pp. 3.
Feature Visualization by Optimization
Neural Network는 기본적으로 input에 대해 differentiable 하다. 그렇기 때문에 어떤 input이 특정 behavior를 만드는지를 알아보기 위해서는, 그 input을 derivative들로 조정해나가면서 알아볼 수 있다. 이게 무슨 말이냐면,

이렇게 random noise를 설정한 후에, gradient ascent를 이용해서 점점 우리가 원하는 "particular neuron"의 activation이 maximization 되는 방향으로 noise를 바꿔주는 것이다. (물론 모델의 훈련이 끝나고 나서 하는 일이다)
그러면 자연스럽게 드는 생각이, 우리가 원하는 particular neuron, 즉 "target"은 어떤 걸 할 수 있는지에 대한 궁금증이 들 수 있다. 그건 굉장히 다양한 옵션이 있을 수 있는데,

특정 neuron도 가능하고, channel, 하나의 layer, class logit, 그리고 마지막 class probability에 대해서도 가능하다. 여기서 classifier 부분에 대한 시각화는 softmax 함수 직전의 값인 class logits / softmax를 통과한 마지막 class probability 2개로 나뉠 수 있는데, 논문 저자들은 pre-softmax 부분에 대한 시각화가 더 나은 이미지를 출력한다고 말한다.
pre-softmax 부분에 대한 시각화가 더 나은 이미지를 출력한다는 결과에 대해 저자들의 가설 중 하나는, softmax 부분의 optimization이 힘들다는 것이다. 그래도 이유가 무엇이던 간에, 강한 regularization과 generative model을 곁들이면 해결할 수 있다고 한다 (이 경우에는 probability가 optimization에 중요한 요소 중 하나가 될 수 있다고 한다)
Maximization by Optimization의 장점
기존의 방법 중 하나는, Maximally Activating Images 라는 방법론으로, 모델의 특정 target 출력값을 최대로 활성화하는 이미지를 dataset에서 찾아서 return하는 방법이 있었다.

이렇게 해당 feature map을 최대로 활성화시켰던 이미지들을 찾아내면, 그 이미지들에 대해 Activation Visualization을 다시 수행해서 해당 feature map이 그 이미지들의 어떤 부분에 초점을 맞추고 있는지를 알아볼 수 있다.

하지만 처음의 random noise로부터 직접 생성하는 방식은, 기존에 있는 거에서 찾아서 보여주는 것이 아니라 수치에 따라 직접 생성하는 방식이기 때문에, 좀 더 flexible하다는 장점이 있다.
Activation Maximization의 수식적 표현
이번에는 논문 속에서의 수식적 표현을 알아볼 차례인데, activation map인 optimal x는 다음과 같이 구할 수 있다.

수식을 보면, h 부분은 activation 부분이고, 이 값을 max하는 argument인 x를 찾는 것이다(argmax).
수식만 보고 처음에는 좀 헷갈렸는데, x를 inital random noise로 초기화시킨 후에, gradient ascent로 저 h 부분이 maximize 되는 걸 찾는다는 뜻의 수식이다.
Network를 다 훈련시키고 나면 weight가 fix되기 때문에, 다른 부분 없이 고정된 weight / bias를 이용해서 simple gradient ascent를 input space에 대해 (noise에서 바꿔나가는 식으로) 수행하면 된다.
The Enemy of Feature Visualization
저자들은 feature visualization의 문제점을 하나 짚고 넘어가는데, 이는 convolution network의 구조적 특징 때문이라는 주장을 한다. 먼저 저자들이 언급하는 문제점은, 뭘 해도 noise가 가득한, 뭔가 무의미한 high-frequency 패턴들이 계속 나온다는 것이다.

저자들은 왜 이런 high-frequency pattern이 나오는지는 확실하게 알지 못하지만, 아마도 CNN의 strided convolution과 pooling 연산이 gradient의 high-frequency한 패턴을 만든다고 주장한다.
Short Implementation
다음은 간단한 코드를 통해 Activation Maximization을 구현한 결과이다.
골든 리트리버 class의 logit을 타겟으로 설정하고, 이를 maximize하는 optimal한 x를 찾는 결과물을 볼 수 있다.

10시 방향과 1시 방향에 리트리버 얼굴 같은 것들이 보이는 모습을 볼 수 있다.
최종 코드는 제 깃허브에 업로드 해놓았습니다: https://github.com/ShinyJay2/Explainable-AI/tree/main/Activation_Maximization
'Explainable AI' 카테고리의 다른 글
[논문리뷰] SmoothGrad: Removing noise by adding noise (0) | 2025.03.26 |
---|---|
[논문리뷰] Saliency Map (0) | 2025.03.26 |
[논문리뷰] Neural Additive Models: Interpretable Machine Learning with Neural Nets (0) | 2024.09.05 |
Generalized Additive Models(GAMs) (0) | 2024.09.04 |
Generalized Linear Models(GLMs) (0) | 2024.09.03 |