Adversarial Robustness 논문 리뷰 — FGSM/PGD/C&W 공격 비교 분석

딥러닝 모델에 대한 대표적인 적대적 공격 기법인 FGSM, PGD, C&W를 비교 분석하고 각각의 특성과 방어 방법을 정리합니다.

본문 상단 광고

광고 영역

가시 영역 진입 시 로드

목차

개요

딥러닝 모델은 인간이 인식하지 못하는 미세한 노이즈에도 완전히 다른 예측을 내놓는 취약점이 있습니다. 이를 **적대적 예제(Adversarial Example)**라고 합니다.

이 글에서는 가장 널리 알려진 세 가지 공격 기법을 비교 분석합니다.

공격 기법논문연도특징
FGSMGoodfellow et al.2014단일 스텝, 빠름
PGDMadry et al.2018반복 스텝, 강력함
C&WCarlini & Wagner2017최적화 기반, 정밀함

1. FGSM (Fast Gradient Sign Method)

Goodfellow et al.이 2014년 제안한 FGSM은 가장 간단하면서도 효과적인 공격 기법입니다.

수식

x_adv = x + ε · sign(∇_x J(θ, x, y))

손실 함수의 그래디언트 방향으로 ε만큼 이동하여 적대적 예제를 생성합니다.

구현

def fgsm_attack(model, images, labels, epsilon):
    images.requires_grad = True
    
    # 순전파
    outputs = model(images)
    loss = F.cross_entropy(outputs, labels)
    
    # 역전파
    model.zero_grad()
    loss.backward()
    
    # 그래디언트 부호 방향으로 perturbation 추가
    perturbation = epsilon * images.grad.sign()
    adv_images = images + perturbation
    
    # 클리핑 (유효한 픽셀 범위 유지)
    adv_images = torch.clamp(adv_images, 0, 1)
    
    return adv_images.detach()

장단점

장점: 계산이 빠르고 구현이 간단합니다.

단점: 단일 스텝이라 공격 성공률이 낮을 수 있습니다. 특히 방어 모델에 대해서는 효과가 제한적입니다.

2. PGD (Projected Gradient Descent)

Madry et al.의 PGD는 FGSM을 여러 번 반복하는 방식입니다. “First-order adversary”로도 불리며, 현재까지도 가장 강력한 공격 기법 중 하나입니다.

수식

x^(t+1) = Π_{x+S}(x^t + α · sign(∇_x J(θ, x^t, y)))

Π는 ε-ball 내로 투영하는 연산입니다.

구현

def pgd_attack(model, images, labels, epsilon, alpha, num_steps):
    # 랜덤 초기화
    adv_images = images + torch.empty_like(images).uniform_(-epsilon, epsilon)
    adv_images = torch.clamp(adv_images, 0, 1).detach()
    
    for _ in range(num_steps):
        adv_images.requires_grad = True
        
        outputs = model(adv_images)
        loss = F.cross_entropy(outputs, labels)
        
        model.zero_grad()
        loss.backward()
        
        # 스텝 업데이트
        adv_images = adv_images + alpha * adv_images.grad.sign()
        
        # epsilon-ball 내로 투영
        delta = torch.clamp(adv_images - images, -epsilon, epsilon)
        adv_images = torch.clamp(images + delta, 0, 1).detach()
    
    return adv_images

하이퍼파라미터 설정 가이드

일반적으로 다음 설정이 많이 사용됩니다.

# CIFAR-10 기준
epsilon = 8/255   # L∞ 노름 제약
alpha = 2/255     # 스텝 크기
num_steps = 20    # 반복 횟수

3. C&W (Carlini & Wagner)

C&W 공격은 최적화 문제로 적대적 예제를 찾습니다. 다른 공격 기법과 달리 최소한의 perturbation으로 공격을 성공시키는 것이 목표입니다.

최적화 목표

min_δ ‖δ‖_p + c · f(x + δ)

여기서 f는 공격 성공 조건을 나타내는 함수입니다.

특징

C&W 공격은 다른 방어 기법들을 우회하는 데 효과적이지만, 계산 비용이 매우 높습니다.

# 간략화된 C&W L2 공격
def cw_l2_attack(model, images, labels, c=1.0, kappa=0, max_iter=1000, lr=0.01):
    w = torch.zeros_like(images, requires_grad=True)
    optimizer = optim.Adam([w], lr=lr)
    
    for step in range(max_iter):
        # tanh 변환으로 [0,1] 범위 보장
        adv_images = 0.5 * (torch.tanh(w) + 1)
        
        outputs = model(adv_images)
        
        # C&W 손실 함수
        real = outputs.gather(1, labels.view(-1, 1)).squeeze(1)
        other = (outputs - 1e4 * F.one_hot(labels, outputs.size(1))).max(1)[0]
        
        f_loss = torch.clamp(real - other + kappa, min=0).sum()
        l2_loss = ((adv_images - images) ** 2).sum()
        
        loss = l2_loss + c * f_loss
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
    return adv_images.detach()

공격 기법 비교

항목FGSMPGDC&W
계산 속도매우 빠름보통느림
공격 성공률낮음~보통높음매우 높음
Perturbation 크기고정고정최소화
구현 난이도쉬움보통어려움
방어 우회 능력낮음보통높음

방어 기법: Adversarial Training

현재까지 가장 효과적인 방어 기법은 Adversarial Training입니다. 훈련 데이터에 적대적 예제를 포함시켜 모델을 강건하게 만드는 방법입니다.

def adversarial_training_step(model, optimizer, images, labels, attacker):
    # 적대적 예제 생성
    adv_images = attacker.attack(images, labels)
    
    # 일반 + 적대적 예제 혼합 훈련
    all_images = torch.cat([images, adv_images])
    all_labels = torch.cat([labels, labels])
    
    outputs = model(all_images)
    loss = F.cross_entropy(outputs, all_labels)
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    return loss.item()

결론

세 공격 기법 모두 각자의 용도가 있습니다.

  • 빠른 실험: FGSM
  • 강력한 공격 벤치마킹: PGD
  • 최소 perturbation 연구: C&W

다음 포스트에서는 AutoAttack, Square Attack 등 더 최신 공격 기법들을 다룰 예정입니다.

참고 문헌

  1. Goodfellow, I. J., et al. “Explaining and harnessing adversarial examples.” ICLR 2015.
  2. Madry, A., et al. “Towards deep learning models resistant to adversarial attacks.” ICLR 2018.
  3. Carlini, N., & Wagner, D. “Towards evaluating the robustness of neural networks.” IEEE S&P 2017.

���� ��

본문 하단 광고

광고 영역

가시 영역 진입 시 로드

이전 · 다음 글

이전 글 OBS 오버레이를 React로 만드는 법 다음 글 KillKagi 개발기 — 치지직 도네이션 API 연동하면서 겪은 것들