본문 바로가기

인공지능(AI) 이론과 코드/5. 컴퓨터 비전(CV)

[파이토치_Torchvision] 딥러닝 해킹방법 FGSM

FGSM (Fast Gradient Sign Method) 

 

[ 한 줄 정의 ]

딥러닝 신경망을 혼란시킬 목적으로 만들어진 공격 방법

 

적대적 샘플이란 신경망을 혼란시킬 목적으로 만들어진 특수한 입력으로, 신경망으로 하여금 샘플을 잘못 분류하도록 합니다. 비록 인간에게 적대적 샘플은 일반 샘플과 큰 차이가 없어 보이지만, 신경망은 적대적 샘플을 올바르게 식별하지 못합니다.

 

이와 같은 신경망 공격에는 여러 종류가 있는데, FGSM은 화이트 박스(white box) 공격 기술에 속합니다.  화이트 박스 공격이란 공격자가 대상 모델의 모든 파라미터 값에 접근할 수 있다는 가정 하에 이루어지는 공격을 일컫습니다. 

 

 

 

[ 연구논문 ]

 

GAN 적대적 신경망으로 유명한 Ian Goodfellow et al 님의 논문을 인용합니다.

간단히 정리하면 정상 이미지에 노이즈를 더해 딥러닝 모델을 헷갈리게 하는 이미지가 바로 적대적 예제(Adversarial Example)이고 이러한 방법은 FGSM이라고 합니다.

 

[ 논문 원본 아카이브 ]

https://arxiv.org/abs/1412.6572

 

Explaining and Harnessing Adversarial Examples

Several machine learning models, including neural networks, consistently misclassify adversarial examples---inputs formed by applying small but intentionally worst-case perturbations to examples from the dataset, such that the perturbed input results in th

arxiv.org

 

 

[ 수학적 접근 ]

 

FGSM은 신경망의 그래디언트(gradient)를 이용해 적대적 샘플을 생성하는 기법입니다. 만약 모델의 입력이 이미지라면, 입력 이미지에 대한 손실 함수의 그래디언트를 계산하여 그 손실을 최대화하는 이미지를 생성합니다. 이처럼 새롭게 생성된 이미지를 적대적 이미지(adversarial image)라고 합니다. 이 과정은 다음과 같은 수식으로 정리할 수 있습니다:

 

advx = x + ϵ ∗ sign(∇xJ(θ,x,y))
  • adv_x : 적대적 이미지.
  • x : 원본 입력 이미지.
  • y : 원본 입력 레이블(label).
  • ϵ : 왜곡의 양을 적게 만들기 위해 곱하는 수.
  • θ : 모델의 파라미터.
  • J : 손실 함수.

ϵ  입실론 값이 작을 수록 원본 이미지와 유사하고(적대적 이미지라는 것이 티가 나지 않음) ex. 0.01 (1%만 반영)

ϵ  값이 클수록 원본 데이터에서 많이 변함(적대적 이미지라는 것이 티가 나서 발각되기 쉬움) ex 0.5 (50% 반영)

 

여기서 흥미로운 사실은 입력 이미지에 대한 그래디언트가 사용된다는 점입니다. 이는 손실을 최대화하는 이미지를 생성하는 것이 FGSM의 목적이기 때문입니다.

 

요약하자면, 적대적 샘플은 각 픽셀의 손실에 대한 기여도를 그래디언트를 통해 계산한 후, 그 기여도에 따라 픽셀 값에 왜곡을 추가함으로써 생성할 수 있습니다. 각 픽셀의 기여도는 연쇄 법칙(chain rule)을 이용해 그래디언트를 계산하는 것으로 빠르게 파악할 수 있습니다.

 

이것이 입력 이미지에 대한 그래디언트가 쓰이는 이유입니다. 또한, 대상 모델은 더 이상 학습하고 있지 않기 때문에 (따라서 신경망의 가중치에 대한 그래디언트는 필요하지 않습니다) 모델의 가중치값은 변하지 않습니다. FGSM의 궁극적인 목표는 이미 학습을 마친 상태의 모델을 혼란시키는 것입니다.

 

잡음 생성 방법

1) 모델정보 필요여부 :

       화이트박스모델 (모델정보를 토대로 잡음생성) / 블랙박스모델(모델정보없이 잡음생성)

2) 원하는정답 유도여부

       표적: 원하는 정답으로 유도 / 비표적: 원하는 정답으로 유도하지 못함

3) 잡음생성위한 반복학습(최적화) 필요여부

        반복: 최적화 필요 / 원샷 : 최적화 불필요

4) 한 잡음이 특정 입력에만 적용되는지 혹은 모든 이미지에 적용되는 범용성에 따라 분류

 

[ 코드 구현 ] 

 

○ Torchvision

1. FGSM 공격 함수 정의

def fgsm_attack(image, epsilon, gradient):
    # 기울기값의 원소의 sign 값을 구함
    sign_gradient = gradient.sign()
    # 이미지 각 픽셀의 값을 sign_gradient 방향으로 epsilon 만큼 조절
    perturbed_image = image + epsilon * sign_gradient
    # [0,1] 범위를 벗어나는 값을 조절
    perturbed_image = torch.clamp(perturbed_image, 0, 1)
    return perturbed_image

2. 적대적 예제 생성

# 이미지의 기울기값을 구하도록 설정
img_tensor.requires_grad_(True)

# 이미지를 모델에 통과시킴
output = model(img_tensor)

# 오차값 구하기 (레이블 263은 웰시코기)
loss = F.nll_loss(output, torch.tensor([263])) 

# 기울기값 구하기
model.zero_grad()
loss.backward()

# 이미지의 기울기값을 추출
gradient = img_tensor.grad.data

# FGSM 공격으로 적대적 예제 생성
epsilon = 0.03
perturbed_data = fgsm_attack(img_tensor, epsilon, gradient)

# 생성된 적대적 예제를 모델에 통과시킴
output = model(perturbed_data)

3. 적대적 예제 생성

perturbed_prediction = output.max(1, keepdim=True)[1]

perturbed_prediction_idx = perturbed_prediction.item()
perturbed_prediction_name = idx2class[perturbed_prediction_idx]

print("예측된 레이블 번호:", perturbed_prediction_idx)
print("레이블 이름:", perturbed_prediction_name)

# 시각화를 위해 넘파이 행렬 변환
perturbed_data_view = perturbed_data.squeeze(0).detach()
perturbed_data_view = perturbed_data_view.transpose(0,2).transpose(0,1).numpy()

plt.imshow(perturbed_data_view)

 

4. 원본과 적대적 예제 비교

f, a = plt.subplots(1, 2, figsize=(10, 10))

# 원본
a[0].set_title(prediction_name)
a[0].imshow(original_img_view)

# 적대적 예제
a[1].set_title(perturbed_prediction_name)
a[1].imshow(perturbed_data_view)

plt.show()

 

엡실론 값을 바꿔가며 신경망의 샘플 신뢰도가 어떻게 변하는지 살펴볼 수도 있습니다.

FGSM는 딥러닝 해킹의 기본 바닐라 모델이자 초기버전입니다. FGSM은 그 자체로도 강력한 기법이지만 이후 다른 연구들에서 발견된 보다 더 효과적인 적대적 공격 기술들의 시작점에 불과합니다.

 

또한, FGSM의 발견은 적대적 공격뿐만 아니라 더 견고한 기계 학습 모델을 만들기 위한 방어 기술에 대한 연구도 촉진시켰습니다. 적대적 공격과 방어 기술에 대한 전반적인 내용은 아래 아카이브에서 볼 수 있습니다.

 

https://arxiv.org/abs/1810.00069

 

Adversarial Attacks and Defences: A Survey

Deep learning has emerged as a strong and efficient framework that can be applied to a broad spectrum of complex learning problems which were difficult to solve using the traditional machine learning techniques in the past. In the last few years, deep lear

arxiv.org

 

[참고] TENSORFLOW 튜토이얼 코드

https://www.tensorflow.org/tutorials/generative/adversarial_fgsm?hl=ko 

 

FGSM을 이용한 적대적 샘플 생성  |  TensorFlow Core

TensorFlow.js의 새로운 온라인 과정에서 웹 ML을 통해 0에서 영웅으로 거듭나십시오. 지금 등록하세요 FGSM을 이용한 적대적 샘플 생성 이 튜토리얼에서는 Ian Goodfellow et al의 Explaining and Harnessing Adversa

www.tensorflow.org

반응형
LIST