본문 바로가기
STEM - 학술세미나/컴퓨터공학

Invertible Adversarial Attack

by STEMSNU 2021. 10. 31.

 

 

Invertible Adversarial Attack

안녕하세요 공우 12기 Jubby라고 합니다. 이번에는 학술세미나에서 발표한 내용을 바탕으로 포스팅하게 되었습니다.

제 발표 주제는 "Invertible Adversarial Attack"이라는 것이었습니다. 제목은 복잡하고 어려워 보이지만 그 내용은 사실 단순합니다. Adversarial Attack에 대해서 들어보셨나요? Adversarial attack에는 다양한 종류가 있고, 그 파훼법 또한 다양한 것으로 알고 있으나 본 포스팅에서는 컴퓨터 비전(Computer Vision)에 한정지어 이야기하려 합니다.

요즘 코로나19 때문에 얼굴 인식 및 체온 측정 기술이 많이 활용되고 있습니다. 이 외에도 자율주행 차량 등에 탑재되는 사물 인식 프로그램과 같은 컴퓨터 비전(Computer Vision) 태스크에는 기학습된(pre-trained)된 높은 성능의 딥 러닝 네트워크가 탑재되게 됩니다.

"Adversarial Attack on Autonomous Vehicles"라는 키워드로 구글 검색을 해보시면 나오는 사진들이 있는데요. Stop sign 사진에 조그만 검정색, 혹은 하얀색 박스를 그려 넣으면 자율주행 차 내부의 pretrained network가 이를 stop sign이 아닌 완전히 다른 사물로 인식한다는 내용입니다. 즉, 나쁜 의도를 품은 사람이 길거리의 stop sign들에 검정색 테이프를 붙이고 다닌다면, 자율주행차가 제때 정지하지 못하여 큰 사고로 이어질 수 있다는 내용입니다. 사실 인간의 눈에는 큰 차이가 없는데 말이죠.

제 발표에서는 이러한 사실을 역으로 이용하는 방법에 대해 다루도록 하겠습니다. 빅 데이터 시대에 들어서면서 머신러닝과 AI 기술이 눈부신 발전을 함과 동시에 개인의 프라이버시 문제도 대두되고 있습니다. 인터넷에 공개된 개인의 데이터가 어디서 어떻게 활용되는지 알 수 없고, 원치 않는 경로로 유출되어 활용되는 경우도 빈번합니다. 하지만 동시에 이러한 데이터를 아예 사용하지 못한다면, 데이터 분석을 통해 얻을 수 있는 많은 이점들을 활용하지 못할 것입니다.

이에 저는 Adversarial Attack 개념을 활용하여, 사용자의 데이터 제공을 명시적으로 허용한 주체만 데이터를 활용할 수 있고, 제 3자의 경우 사용자의 데이터를 어떠한 형태로든 수집하여 분석하는 것이 어렵도록 하는 방법을 고안해 보았습니다. 큰 흐름은 다음과 같습니다.

  1. 사용자의 명시적 동의를 얻은 주체는, 그 데이터를 외부에 공개할 때 Adversarial Attack을 적용한 형태의 데이터만을 공개한다.
  2. 사용자의 명시적 동의를 얻은 주체는 사용자의 데이터를 활용할 수 있도록, Adversarial Attack을 복원할 수 있어야 한다.
  3. 제 3자가 단순한 절차로(새로운 데이터 전체로 다시 학습 시키는 것을 제외하고) 원본 데이터를 복구할 수 없어야 한다.

사실 Adversarial Attack이라는 개념이 처음 나온지 꽤 시간이 지났고, 학술적인 의미 외에도 아주 중요한 문제이기 때문에 많은 기법과 파훼법이 연구가 되었습니다. 또, 학습에 사용되는 데이터 자체에 저러한 데이터가 들어갔을 때 딥 러닝 네트워크가 이를 학습하지 못할 이유는 전혀 없습니다. 하지만 단순히 인터넷에서 데이터를 긁어와서, pretrained된 네트워크를 통해 분석하는 것을 막을 수 있다는 점, 그리고 데이터를 활용하기 위해서는 딥 러닝 네트워크를 새로이 학습 시켜야 한다는 것이, 큰 비용이 부담되기 때문에, 제 프로젝트의 핵심입니다.

Gaussian Noise using Random Seed

본 발표에서 활용한 Adversarial Attack은 Gaussian Noise입니다. 어렸을 때 TV에 입력 신호가 없어서 지지직 하는 회색 화면을 본 경험이 있으신가요? Gaussian Noise는 Gaussian Distribution으로부터 값들을 랜덤하게 뽑아오는 것을 의미하는데, 이를 이미지에 적용하면 그 TV화면과 비슷한 이미지를 생성하게 됩니다. 그리고 이 이미지를 고화질의 사진에 더해주게 되면, 사람 육안으로는 큰 차이가 없는, 조금 화질이 안좋아 보이는 정도의 이미지가 생성됩니다. 하지만 딥 러닝 네트워크의 입장에서는, stop sign의 일부에 단순히 검은색 패치가 생긴 정도의 수준이 아닌, 심각한 공격이 됩니다. 얼마나 심각한지는 실험을 통해 살펴보도록 하겠습니다.

또, Gaussian Noise를 생성하는 난수 생성기는, 컴퓨터 프로그램에 내제된 난수를 생성하는 기법에 의존하게 됩니다. 이 난수 생성기는 바로 진정한 의미의 난수가 아닌, 일정한 규칙에 따라 난수의 sequence를 가져온다는 큰 약점이 있습니다. 실제로, C나 Python의 random() 함수에는 seed를 같은 값으로 고정하게 되면, 난수들의 시퀀스를 정확하게 복원할 수 있게 됩니다.

import numpy as np
np.random.seed(123)
noise = np.random.normal(loc=0, scale=1, size=255)

위 코드를 두번 실행하면 정확히 같은 sequence의 noise를 복원할 수 있습니다. 이는 컴퓨터 코드의 보안 문제의 원인이 되기도 하지만, 코드의 복원 혹은 재현이 필요한 경우 유용하게 활용될 수 있습니다.

저는 이 점을 활용하여, 이미지에 random seed를 고정한 Gaussian Noise를 더한다면, 1) random seed와 2) Image에 noise가 더해진 순서를 안다면, 원본 이미지를 복원할 수 있을 것이라는 생각을 하였습니다.

따라서 원본 이미지를 소유한 주체가 어떤 seed를 고정하여 이미지에 Gaussian Noise를 섞어 외부에 제공하고, 본인 혹은 제 3자가 해당 이미지를 사용할 일이 생긴다면, 해당 seed를 안전하게 공유할 수 있다면, 해당 주체만이 원본 데이터를 복구할 수 있을 것입니다. 앞서도 잠깐 언급하였듯, 이러한 데이터를 바탕으로 새로운 네트워크를 학습시켜 사용하는 것은 막을 수 없으나, 외부에 공개된 데이터를 활용함에 있어 최소한 그 정도의 노력과 시간, 자원을 투자하도록 하는 것이 본 프로젝트의 목표라고 할 수 있습니다.

Adversarial Attack on ResNet Network

이제 Adversarial Attack이 실제로 어느 정도나 딥 러닝 네트워크에 영향을 주는지 알아보기 위한 간단한 실험을 진행하도록 하겠습니다. 이를 위해 우선 딥 러닝 네트워크를 데이터 셋에 학습을 시키고, 테스트 하는 이미지들에 대한 테스트 정확도를 측정할 것입니다. 이후 테스트 이미지에 Gaussian Noise를 standard deviation을 변경해가며 더한 후, classification accuracy가 얼만큼 떨어지는 지 확인하도록 하겠습니다. 마지막으로, appendix에 소개될 내용을 통해 seed를 안전하게 공유한 두 주체는, 원본 데이터를 복구할 수 있음을 보여드리도록 하겠습니다.

우선, 최대한 간단하게 실험을 진행하기 위해 CIFAR10 데이터 셋을 활용하였고, preactresnet18을 활용하여 데이터 셋을 학습 시켰습니다. 데이터를 시각화함에 있어 데이터 셋의 구조를 조금 바꿀 일이 있었는데, 그러다 보니 training accuracy가 약 83.3%정도로 나왔습니다. 84%라는 숫자가 복원되는지만 확인하는 것이 목적이었기 때문에 원인을 분석하진 않았으나, 원래는 92~94%정도의 accuracy가 나옵니다.

PreactResNet18을 CIFAR10에 간단하게 학습시킨 후의 test accuracy.

이제 해당 train set에 각각 mean = 0, standard deviation = 10, 25, 50, 100인 Gaussian Noise를 더한 결과입니다. CIFAR10 데이터는 데이터의 종류가 총 10개인 데이터 셋으로, test accuracy가 10% 가량 나오면 random하게 찍는 경우와 그 성능이 별반 다를 것 없다는 것을 의미합니다. Standard deviation이 100인 경우는 Noise가 육안으로 식별가능하다는 단점이 있기 때문에, 이미지의 해상도와 크기 등을 고려하여 적당한 수준의 noise를 고를 수 있겠습니다.

Accuracy drop on the test dataset

이제 seed와 image에 noise가 더해진 순서를 아는 주체가 원본 데이터를 복구하고, test를 다시 해보는 과정입니다. 정확하게 같은 숫자인 83.3%가 복구됨을 알 수 있고, 실제로 이미지를 직접 비교하여도 동일한 이미지가 복원되었음을 알 수 있습니다.

Conclusion

본 포스트에서는 높은 성능을 보이는 pretrained된 네트워크에 Adversarial Attack을 가하면 그 성능이 얼마나 떨어지는 지 살펴보았습니다. 이를 잘 활용한다면, 제가 SNS에 어떠한 사진을 올렸을 때, 제가 데이터 제공을 동의한 해당 주체만이 원본을 복원하여 분석에 활용할 수 있다는 점이 핵심입니다.

사실 제 프로젝트에서는, 두 주체간의 공유도 가능하게끔 데이터 encryption을 활용하여 random seed를 안전하게 공유하는 주제도 다루었는데, 설명이 지나치게 길어지거나 짧아질 것 같아 제외 하였습니다. 하지만, reliable한 data encryption scheme이 있다면, 사용자의 명시적인 동의를 얻은 제 3자와도 seed를 공유함으로써 데이터를 활용할 수 있도록 할 수 있습니다.

이는 사용자의 동의를 얻지 않은 제 3자가 불투명한 목적으로 데이터를 긁고, 데이터를 활용하는 문제를 방지할 수 있는 원시적인 기법이 될 수 있을 것이라 생각합니다. 물론 그 데이터로 직접 학습시키는 것을 막을 방법은 없으나, 그러한 과정에는 많은 시간과 자원이 필요하기 때문에, 적절한 수준의 방어 기제라고 볼 수 있다고 생각합니다.

마지막으로, CIFAR10 데이터의 경우 32x32 pixel의 저화질 데이터이기 때문에, noise를 더했을 경우 이미지가 많이 훼손되나, 더 큰 사이즈의 이미지를 활용할 수록 noise가 육안으로 덜 보이기 때문에, 더 큰 standard deviation을 가지는 noise를 더할 수 있다고 생각합니다. 또한, image 데이터 뿐 아니라, 숫자 형태를 띄는 모든 데이터에도 적용가능할 것이라고 생각합니다.

Standard Deviation 25의 Noise가 더해진 후의 Image

[1] - Learning Multiple Layers of Features from Tiny Images, Alex Krizhevsky, 2009.

댓글