[논문리뷰] FGSM:Explaining and harnessing adversarial examples

2021. 8. 9. 20:01논문리뷰/Adversarial Attack

최근 Adversarial attack에 대한 논문을 읽고 정리하는 중이다. 이전에 접해본 적이 없는 분야이기 때문에 헷갈리는 부분도 많고, 잘못 이해한 부분이 있을 수 있으니 댓글로 알려주길 바란다.

 

첫번째로, Adversarial attack의 basic한 논문인 "Explaining and harnessing adversarial examples"를 살펴보려고 한다. 이 논문은 adversarial attack에 대한 취약성을 non-linearity가 아닌 linearity로써 최초로 설명하였고, 비효율적으로 만들어지던 adversarial examples를 빠르고 쉽게 만드는 Fast Gradient Sign Method를 제안하는 등의 기여를 하였다.

 

이제 본 논문을 천천히 읽어보도록 하자!


 

Adversarial Examples

figure 1.

Adversarial examples(attack)이란, input 데이터에 미세한 perturbation($\approx$noise)을 가해서 모델이 잘못된 output을 내보내도록 만드는 것을 말한다. 

**기본적으로 perturbation에 의해 변한 새로운 이미지는 사람 눈에 unnoticeable해야한다. 

 

Introduction

최근 Deep Neural Network가 trend해지고 관련된 논문이 많이 나오면서, DNN의 취약성에 대한 연구 또한 활발히 진행되었다. 실제로 많은 연구에서 Machine Learning 모델들이 adversarial examples에 취약하다는 사실들이 증명되었다.

 

올바르게 분류되는 이미지와, 사람 눈으로는 식별 불가능한, 아주 미세하게 다른 이미지로 모델의 오분류를 야기하였고, 이는 딥러닝에 대한 보안과 신뢰도에 의문을 품게 만들었다. 

 

심지어 같은 adversarial example에 대해 서로 다른 환경에서 학습된 모델들이 모두 취약함을 보이면서 training 알고리즘이 adversarial attack에 의한 맹점을 가진다는 것을 보여주었다. 

 

figure 2

 

(사람들이 보았을 때, 오른쪽 사진은 아주 귀여운 "강아지"인데 바보같은 대부분의 머신러닝 모델들은 "타조"라고 인식한다는 것이다.....)

 

이에 대한 원인으로, 많은 사람들이 불충분한 model averaging과 regularizaiton으로 인한 DNN의 지나친 non-linearity라고 추측하였는데, 이 논문에서는 고차원 공간에서의 linear behavior가 adversarial examples를 만들어내기 충분하다고 주장하고 있다. 

 

논문에서는 이러한 linear behavior를 이용하여 빠르고 효율적으로 adversarial examples를 만들어내는 방법을 제시하고 있으며, 또한 이를 활용한 adversarial training을 통해 adversarial examples에 대한 robustness를 높이면서 regularization효과도 줄 수 있다고 한다. 

 

dropout을 뛰어 넘는 성능을 보인다고 하는데....이건 잘 모르겠다...데이터셋이나 모델이나 너무 한정되어 있어 신뢰성이 부족!

 

The Linear Explanation of Adversarial Examples

이제 핵심적인 내용들을 살펴볼 차례이다. 이전에 L-BFGS와 같은 adversarial examples를 만드는 방식이 있었지만 너무 느리고 비효율적인 탓에 사용이 어려웠었다. 논문에서는 linear behavior를 이용한 빠르고 효율적인 방식을 제안하면서 이러한 문제점을 해결하였다.

 

Weight vector w와 adversarial input $\tilde{x}$의 dot product를 살펴보자.

$$w^T\tilde{x} = w^tx+w^T\eta$$

 

먼저 perturbation에 의한 변화가 사람 눈에 인지될 수 없을 정도로 작아야 하기 때문에 다음과 같이 max-norm constraint를 사용한다.

$$||\eta||_{\infty} \lt \epsilon ... (1)$$ 

 

여기서 max-norm($||L||_{\infty}$)이란, infinity-norm이라고도 불리며 각 원소의 절대값 중 가장 큰 값을 취하는 방식이다. 

 

예를 들어, x = [-3, 6, 2, -9]에 대한 max-norm $||x||_{\infty}$는 9가 된다.

 

따라서 위의 constraint 식은 $\eta$의 원소값들을 $-\epsilon~\epsilon$으로 제한하는 역할을 한다.

즉, 이미지들이 변해봤자 아주 작은 값인 epsilon만큼 변하니 사람 눈으로는 알아채기가 힘들다!!

 

(1) 식에서 알 수 있듯이, activation이 $w^T\eta$에 의해 커지게 된다. 여기서 이 증폭을 최대로 만들기 위해 sign함수를 사용한다.

 

 

예를 들어보자. $w = [7, -3, 6], x = [2, -1, -4]$라 하면 $sign(w) = [1, -1, 1]$이 된다.

이제 위 (1)식을 계산해보자.

먼저 attack전의 식은 $w^Tx$이고, 그 결과는 $(7*2) + (-3*-1) + (6*-4) = -7$이 된다.

다음으로 attack후의 식은 $w^T(x+\eta)$이고, 그 결과는 $(7*(2+1) + (-3*(-1-1) + (6*(-4+1)) = 9$가 된다.

 

즉, w의 부호를 더해줌으로써 w와의 dot product값이 크게 변하게 된다.

예제는 3차원 벡터에 대해서 계산하고 있지만 실제로 딥러닝 모델은 훨씬 더 고차원에서의 node계산이 이루어진다.

 

즉, 위와 같이 부호를 더하는 간단한 연산만으로도 엄청나게 큰 증폭을 일으킬 수 있다는 것이다!!

 

여기서 w가 n차원이고, weight vector 원소의 평균 magnitude가 m이라면, activation은 $\epsilon mn$으로 커지게 된다.

 

즉, 차원 n에 대해 perturbation이 linear하게 증가하기 때문에 고차원의 문제에 대해서 많은 perturbation을 만들 수 있는 것이다.

 

그리고 perturbation $\eta$가 $\epsilon sign(w)$이기 때문에 w의 방향으로 더해지는 것을 볼 수 있다.

 

이로 인해, 어떠한 task(ex. classification)를 목적으로 훈련된 network의 w는 비슷한 방향(성향?)을 가지면서 학습이 되기 때문에 adversarial examples이 transferability를 가지게 된다고도 생각해볼 수 있다.

**transferability: 한 모델에서 만들어진 adversarial examples가 다른 환경에서 학습된 같은 task의 모델에서도 공격성을 가지는 속성.

 

Linear Perturbation of Non-linear Models

논문에서는 NN이 linear adversarial perturbation을 피하기에 Too Linear하다고 가정한다.

 

LSTM과 Relu, maxout 네트워크는 최적화를 쉽게 하기 위해서 매우 선형적으로 동작하도록 만들어졌다.

 

Sigmoid 네트워크와 같은 비선형 모델들은 같은 이유로 비포화적이고 더 선형적인 공간에서 대부분의 시간을 쓰도록 주의깊게 조정된다.

 

figure 3

 

그림 figure 3는 sigmoid function을 나타낸다. 원래 sigmoid 함수는 비선형이지만, x가 거의 -1~1 사이 값을 갖도록 조정되기 때문에 approximately linear한 함수가 되는 것을 볼 수 있다.

 

이 논문에서는 이러한 linear behavior가, Neural Network이 선형 모델의 cheap하고 analytical perturabtions에 취약한 이유라고 말하고 있다.

 

non-linear models에서의 perturbation은 다음 식을 통해 구할 수 있다. 

$$\eta = \epsilon sign(\bigtriangledown_x J(\theta,x,y))...(2)$$

**$\theta$: model parameters, x: input, y: target, $J(\theta, x,y)$: Cost function

**$\bigtriangledown_x J(\theta,x,y)$는 input x에 대응되는 $\theta$에 대한 cost 함수의 gradient이다.

 

즉, Cost function의 gradient만 구하면 되기 때문에 빠르고 손 쉽게 perturbation을 만들어 낼 수 있다!

이 식(2)를 "Fast Gradient Sign Method"라고 부른다.

 

이 method를 조금 직관적으로 생각해보자! 

이렇게 구해진 $\eta$는 x에 더해지고, 그 perturbed image가 weight 함수에서 얼마나 값을 증폭시키는지 위에서 살펴보았다.

 

여기서 잠깐 training이 어떻게 이뤄지는 지를 보자!

cost함수에서 w에 대한 gradients(가중치) 방향의 반대방향으로 update가 진행된다!!

어?? 위에서는 gradients방향을 더하는데? 

 

그렇다... cost함수가 커지는 방향으로 점프하게 된다...

 

Adversarial Training of Linear Models Versus Weight Decay

문제를 단순화 시키기 위해서 logistic regression을 가정하자.

 

y가 -1 또는 1의 값을 가정하고 다음과 같은 Cost function을 제시한다.

$$\frac{1}{n} \Sigma_{i=0}^n \zeta(-y(w^Tx+b))$$

**$\zeta$는 softplus function.

 

 

 

왜 softplus 함수사용할까? 자세한 설명은 다음 논문에 나와있으니 참조바란다.

https://arxiv.org/pdf/1804.03308.pdf

 

간단하게 설명하자면 위 그림에서 (a)번째는 그냥 prediction값이라고 생각하면 되고, (b)는 (a)에 gt인 y를 곱했으니까 제대로 prediction했으면 양수, 틀렸다면 음수의 값을 가지게 된다. 이제 softplus 함수에 이 결과를 집어넣으면 틀린 결과에 대해서는 높은 cost를 주고, 맞은 결과에 대해서는 매우 낮은 cost를 주게 만드는 것이다.

 

위 함수의 gradient를 구하고, sign함수에 넣으면 실제로는 -y sign(w)가 나오는데 논문에서는 무슨 이유에서인지 이 y를 생략한다. 그래서 필자도 논문에 맞추어 생략하겠다.

 

위 cost함수에서 x에 $x-\epsilon sign(w)$를 삽입해보면 다음과 같은 결과를 낼 수 있다.

$$E_{x,y~p_data}\eta(y(\epsilon ||w||_1-w^Tx-b))$$

 

즉, adversaral version of logisitic regression은 위 식을 minimize하는 방향으로 훈련한다.

 

위 식은 L1 Regularization과 비슷하게 생각할 수 있지만 다르다.

 

가장 큰 차이로 L1 Penalty(Adversarial Training)는 training cost에 더해지는 것이 아니라 훈련 중 activation에서 빼지는 것이다.

 

위와 같은 이유로 penalty는 모델이 충분한 confidence의 예측을 하도록 학습된 상태라면 없어지게 된다.

L1 weight decay는 좋은 margin을 가지는 경우에도 deactivate되지 않기 때문에 adversarial training 보다 좋지않다.

 

이외의 차이점도 고려하였는데, 별로 중요하지 않은 내용이라 판단하여 제외하였다.

자세한 내용이 알고 싶다면 논문을 읽기를 바란다.

Adversarial Training of deep networks

실제로 training은 어떻게 이루어질까? adversarial examples와 classification task에 대한 학습을 동시에 진행해야하기 때문에 clean images와 perturbed images를 섞어서 훈련을 하게 된다.

 

$$\tilde{J}(\theta, x, y)=\alpha J(\theta, x, y) + (1-\alpha)J(\theta, x + \epsilon sign(\bigtriangledown_x J(\theta, x, y))$$.

 

이렇게 함으로써 Neural Network를 regularize하는 효과도 가져온다고 한다. 심지어 dropout의 성능을 뛰어넘는다고 하는데 테스트 환경이 너무 제한적이라서 실제로 그러한지는 의심해봐야할 것이다...

 

또 여기서 Augmentation과 비교를 하였는데, 

Augmentation 보통 test set에서 나타날 만한 변화(ex. translation, change brightness)를 만들어주는 것이고,

Adversarial examples는 자연적으로 발생하기 어렵지만, 모델의 의사결정 능력을 망가뜨리는 input을 사용한다.

 

기타적인 내용으로 adversarial trained model은 adversarial examples를 오분류 했을 때, 높은 confidence를 갖는다는 문제점이 있고, feature들이 다른 모델들보다 더 localize하고 interpretable하다는 장점이 있다.

왼쪽이 일반 모델, 오른쪽이 adversarial trained model

솔직히 뭐가 interpretable하다는지 잘 모르겠다...

 

마지막으로 perturbation을 random uniform noise로 주어도 같은 효과를 낼까? 라는 실험을 하였는데 결과는 꽝...

 

이 이후에 왜 adversarial attack이라는 현상이 일어나는지에 대해 non-linearity보다 linearity로 설명하는 것이 더 reasonable한지에 대한 여러가지 설명과 증명이 나오는데 내용이 너어어어무 광범위 해서 여기까지만 정리하도록 하겠다. 궁금하신 분들은 논문을 꼭 읽어보시길....


여기까지 FGSM에 대해서 정리해보았다. 논문을 한번 보면 알겠지만 내용이 엄청 많고 광범위하다...그리고 처음 adversarial attack을 공부하는 사람에게는 조금 불친절하게 설명이 되어있기에 고생을 많이하였다..

 

이 논문에서 알아두어야 할 점들을 요약하자면

  1. adversarial examples를 모델의 non-linearity가 아닌 linearity로써 설명한 것.
  2. 그러한 특성을 이용하여 빠르고 효율적이게 adversarial examples를 만드는 방법(FGSM)을 제안한 것.
  3. FGSM 기법을 사용하여 Adversarial Training을 시키고, 성공적인 결과를 보인 것.

이 논문은 지금까지도 adversarial attack task에서 많이 인용되고, 응용되는 basic paper이기 때문에 한 번 제대로 읽어보는 것도 추천한다! 만약 읽어보고 위 내용 중에 수정해야하는 부분이 있다면 꼭 댓글로...