일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- python
- Machine Learning
- Artificial Intelligence
- 백준
- Cam
- SmoothGrad
- coding test
- Class activation map
- cs231n
- AI
- 코딩 테스트
- GAN
- 기계학습
- Score-CAM
- 설명가능한
- 설명가능한 인공지능
- 딥러닝
- 인공지능
- Unsupervised learning
- Interpretability
- keras
- 메타러닝
- grad-cam
- Deep learning
- Explainable AI
- meta-learning
- 시계열 분석
- xai
- 코딩테스트
- 머신러닝
- Today
- Total
iMTE
How to Manipulate CNNs to Make Them Lie: the GradCAM Case 내용 정리 [XAI-16] 본문
How to Manipulate CNNs to Make Them Lie: the GradCAM Case 내용 정리 [XAI-16]
Wonju Seo 2021. 8. 18. 16:36논문 제목 : How to Manipulate CNNs to Make Them Lie: the GradCAM Case
논문 주소 : https://arxiv.org/abs/1907.10901
주요 내용 정리
1) 저자는 GradCAM 방법에 4가지의 방법을 통해서 explanation을 수정했을 때에도 model의 accuracy가 크게 변하지 않는 sanity check 방법을 제안하였다. 밑의 그림을 보면 T1~T4가 앞서 말한 4가지 방법으로 각자 다른 explanation을 만들어 내는데, 성능이 크게 변하지 않는 다는 것이 매우 주요하게 볼 사항이다. 즉, GradCAM이 만들어내는 explanation이 실제로 모델의 예측과 연관이 없을 수 있다는 것이다.
2) 먼저, GradCAM에서 explanation은 다음과 같이 표현된다.
$$I^c = ReLU(\sum_k \alpha_k^c A^k)$$
위 식에서 $I$는 explanation, $c$는 target class, $\alpha_k^c$는 $c$ class에 대한 $k$-th feature map의 importance, $A^k$는 $k$-th feature map을 의미한다. 다음으로 $\alpha$를 계산하는 식은 다음과 같다.
$$\alpha_k^c = \frac{1}{N_A}\sum_i \sum_j \frac{\partial y^c}{\partial A_{ij}^k}$$
위 식에서 $i,j$는 x, y index, $N_A$는 총 pixels 수, $y^c$는 $c$ class의 score를 의미한다. 만약, $k$-th feature map이 score에 영향을 크게 미친다면 (이는 큰 gradient를 갖는 다는 것을 의미한다.), $\alpha_k^c$는 큰 값을 갖게 된다.
3) CNN을 manipulating 하기 위해서 architecture를 바꾸거나, weights을 바꾸어 GradCAM의 explanation을 수정해준다. 동시에 성능은 살짝 상승하거나, degraded된 정도가 된다.
Step one: 먼저 마지막 convolutional layer에 하나의 filter를 추가하여 K+1 featuremap을 만들어 낸다. K+1 번째 feature map은 원하는 target explanation $I_T$가 포함된다. 이때, $A^{K+1}$이 다른 featuremap 보다 모든 pixels에서 값이 크도록 설계한다. ($A_{ij}^{K+1}>>A_{ij}^k$)
Step two: 모든 $c$와 $k$에 대해서 $\alpha_{K+1}^c>>\alpha_k^c$가 되도록 fully connected part의 architecture나 weights을 수정한다.
이 조건들에 의해서 GradCAM은 target explanation과 비슷하게 된다. (모든 $c$에 대해서 $I^c\approx I_T$)
T1~T4를 설명하기 전, $o$는 manipulation 전의 parameters 혹은 activation values를 의미하고, $n$은 manipulation 이후의 parameters 혹은 activation values를 의미하는 것으로 정의한다.
T1 : 이 방법은 input $x$에 상관없이 일정한 heatmap을 manipulation 하도록 model의 parameters를 수정하는 방법이다. 이 방법에서 K+1 번째 filter의 parameters는 0으로 정의되고, bias는 큰 상수 값 $c_A$로 정의한다. 이는 $A_{ij}^{K+1}=c_A$가 되도록 하며, Step one에 의해서 모든 $k$에 대해 $A_{ij}^{K+1}>>A_{ij}^k$가 된다.
다음으로, $Z$는 model의 convolutional part의 마지막 feature map이고, 각 $Z^k$는 $N_Z$의 크기를 갖는다. 만약 $A$와 $Z$사이에 max/average pooling layer가 있다면, $Z_{ij}^{K+1}=c_A$이 된다. $z$를 $Z^K$를 flattening 해서 얻은 vector라고 정의하면, $z$는 (flatten($Z^1$),...,flatten($Z^{K+1}$))이 된다. $z$는 $(z_o,z_n)$으로 나타낼 수 있고 ($z_n$=flatten($Z^{K+1}$)), 첫번째 fully connected layer의 weight maxtrix는 $W=[W_o|W_n]$으로 나타낼 수 있다. $r$을 output 전의 activation이라고 할때,
$$r_o=W_oz_o+b_o$$,
Manipulated model에서는 $r_n=W_oz_o+W_nz_n+b_n$이 된다. $W_n$의 모든 값을 큰 상수인 $c_W$로 정하고 $b_n=b_o-\mathbb{I}c_Ac_WN_Z$로 정의한다. 여기서 $\mathbb{I}$은 모든 값이 1인 vector 이다. 결국, 위와 같이 정의된 식에 따라서 $r_o=r_n$이 되고 manipulation 이후 출력 $y$는 동일하게 된다. 그리고 $W_n$이 크기때문에, $Z^{K+1}$의 작은 변화는 y의 큰 변화를 유도하고, 이는 $\alpha_{K+1}^c$를 크도록 한다 (Step two를 기억하자). (Figure 1 (c))
T2: 이 방법은 $I_T$가 input image에 상관없이 고정된 image가 되도록 explanation을 manipulation 하는 방법이다. 이 방법은 T1와 같으나, 두개의 다른점이 있다. 먼저, K+1 번째의 filter의 parameters와 bias는 모두 0이고, $A^{K+1}$에서 다음 layer로 전달하기 전에, $A_n^{K+1}=A_{o}^{K+1}+c_I I_T$가 되도록 한다. 이때 $c_I$는 큰 상수이다. $W_n$을 큰 상수인 $c_W$로 정하고, $b_n=b_o-\mathbb{I}c_WS_Z$, $S_Z=\sum_{ij}Z_{ij}^{K+1}$로 정의하면, 다시 $r_o=r_n$이 되어 $y_o=y_n$이 된다. T2도 T1과 마찬가지로 $A_{ij}^{K+1}>>A_{ij}^k$와 $\alpha_{K+1}^c>>\alpha_k^c$를 유지한다. (Figure 1 (d))
T3와 T4는 밑의 그림과 같이 architecture change를 요구한다.
T1과 T2는 input image에 상관없이 동일한 explanation을 만들어 내는 것으로, manipulation을 손쉽게 확인 할 수 있는 한계가 있다. 따라서, 이 부분을 극복하기 위해서, input image에 의존하는 explanation을 만드는 방법을 사용한다.
T3: $I_T$를 $A^{K+1}$에 넣기 전에, K+1 번째 convolutional filter의 parameters와 bias를 모두 0으로 설정하고, $W_n$과 $b_n$도 0으로 설정한다. 대신, $A_o^{K+1}=A_n^{K+1}+c_F F(x)$로 설정하는데, $F(x)$는 input image $x$를 받아 $I_T$를 출력해내는 neural network로 정한다. 저자는 $F(x)$를 randomly initialized CNN으로 정해서, $A^{K+1}$이 input image $x$에 의존하는 explanation을 만들도록 설계하였다. $\alpha_{K+1}^c$를 크게 만들어주기 위해서, $A^{K+1}$에서 y로 가는 branch를 추가했는데, 다음과 같이 나타낸다.
$$y_n=y_o+\mathbb{I}G(flatten(A_n^{K+1}))$$
위 식에서 $G(v)$는 vector length $N_A$를 입력으로 받는 scalar valued function으로 다음과 같다.
$$G(v)=\epsilon mod(cG \sum_i v_i,1)$$
위 식에서 $mod(a,b)$는 modulus operator로 모든 $v$에 대해서 $G(v)\leq \epsilon$를 만족하도록 한다. $\epsilon$을 작게 설정함으로써, $|y_n-y_o|\leq \epsilon$을 만족하도록 한다. 더나아가, 모든 input image $x$에 대해서 $\frac{\partial G(x)}{\partial x}=\mathbb{I}c_G \epsilon$이 된다. $c_G >> \epsilon$으로 설정하여, gradients 값을 크게 설정할 수 있고 이는 모든 $c$에 대해서 $\alpha_{K+1}^c$가 큰 값을 갖도록 한다. (Figure 1 (e))
T4: 이 방법은 specific pattenr을 input image에 넣는 것으로, T3와 비슷한 setup에서 $F(x)$만 다음과 같이 수정한다. 만약 input image $x$에 sticker가 없다면, $F(x)$는 zero image를 출력해낸다. 만약 sticker가 검출된다면, $F(x)$의 출력을 크도록 설정한다. 그럼으로 sticker가 없다면 explanation은 기존 original network와 동일하고, sticker가 있다면 sticker 에 explanation이 생기는 것이다 (Figure 1 (f)). 밑의 그림을 보면 이를 쉽게 이해할 수 있다.
4) Experimental setup
Network로는 VGG16을 사용하였고, K=512, $A^k$의 resolution은 14 x 14이다. Heatmap을 만들 때, 가장 큰 posterior를 갖는 class를 사용하였고, heatmap은 0과 1사이로 normalized 되었다. 또한, target explanation $I_T$와 manipulated explanation $I_n$과의 차이를 확인하기 위해서 L1 distance가 사용되었다. (그외의 setup은 논문에서 확인해보자!)
5) Results
밑의 두표가 핵심적인 결과를 보여주고 있다.
결론만 정리해보자면, Table 1에서 T1, T2, T3를 사용하여도 accuracy와 score에 큰 변화가 없었으며, manipulated explanation과 desired explanation의 차이도 크지 않았음을 보여주고 있다.
Table 2에서는 T4에 대해서 original case와 manipulated case에 대해서 sticker가 있는 경우 accuracy는 다소 감소했지만, original과 T4에 대한 accuracy와 score는 차이가 거의 없으며, manipulated explanation과 desired explanation의 차이가 매우 작음을 보여주고 있다.
+
저자는 GradCAM이 저자들이 제안한 T1~T4 방법 (weights와 architecture를 수정하는 방법)에 대해서 취약하다는 것을 보여주었다. 이 방법은 GradCAM 뿐만 아니라 gradients에 의존하는 방법들에 대해서도 사용할 수 있으며, 이는 sanity check에 유용하게 이용 할 수 있다.