본문으로 건너뛰기
적대적 예제 (Adversarial Examples)

적대적 예제 (Adversarial Examples)

적대적 예제(Adversarial Examples)는 머신러닝 보안 연구의 시작점이라 할 수 있는 공격 유형입니다. 2013년 Szegedy 등의 연구에서 처음 체계적으로 보고된 이후, 신경망 기반 모델이 사람의 눈에는 거의 동일하게 보이는 입력에 대해 완전히 다른(그리고 종종 매우 confident한) 출력을 내놓을 수 있다는 사실이 알려지면서, 딥러닝 모델의 신뢰성에 대한 근본적인 의문을 제기했습니다.

    flowchart LR
    subgraph KNOW["공격자의 정보 수준"]
        K1["White-box\n(그래디언트 직접 접근)"]
        K2["Black-box\n(입출력만 관찰)"]
    end

    subgraph METHOD["perturbation 생성 기법"]
        M1["FGSM\n(1회 그래디언트)"]
        M2["PGD\n(반복 + 투영)"]
        M3["C&W\n(최소 perturbation 최적화)"]
        M4["Surrogate 모델 +\nTransferability / Query-based"]
    end

    subgraph GOAL["공격 목표"]
        G1["Untargeted\n(틀린 답이면 성공)"]
        G2["Targeted\n(특정 클래스로 유도)"]
    end

    K1 --> M1 --> M2 --> M3
    K2 --> M4
    M4 -.전이.- M2

    M1 --> G1
    M2 --> G2
    M3 --> G2

    G2 -.방어.- D1["적대적 훈련\n(Adversarial Training)"]

    classDef adv fill:#e7f1ff,stroke:#3b82f6,color:#1e3a8a;
    classDef def fill:#fff3cd,stroke:#d39e00,color:#664d03;
    class K1,K2,M1,M2,M3,M4,G1,G2 adv;
    class D1 def;
  

정의

적대적 예제란, 원본 입력 xx에 사람이 인지하기 어려운 작은 변형(perturbation) δ\delta를 더한 입력 x′=x+δx' = x + \delta로서, 모델 ff가 f(x)≠f(x′)f(x) \neq f(x') 혹은 공격자가 원하는 특정 클래스 ytargety_{target}에 대해 f(x′)=ytargetf(x') = y_{target}을 만족하도록 만든 입력입니다. 일반적으로 δ\delta의 크기는 LpL_p 노름(주로 L∞L_\infty, L2L_2)으로 제한되어, 변형이 “눈에 보이지 않을 정도"로 작게 유지됩니다.

핵심은 이 변형이 무작위 노이즈가 아니라, 모델의 그래디언트(gradient) 정보를 이용해 모델의 결정을 가장 효율적으로 흔드는 방향으로 정밀하게 계산된 값이라는 점입니다. 이 때문에 사람의 눈에는 원본과 거의 구분되지 않지만, 모델은 완전히 다른 판단을 내립니다.

대표적인 공격 기법

FGSM (Fast Gradient Sign Method)

Goodfellow 등이 제안한 가장 단순하고 빠른 공격입니다. 손실 함수 L(θ,x,y)L(\theta, x, y)의 입력에 대한 그래디언트의 부호(sign)만을 이용해 한 번의 연산으로 perturbation을 생성합니다.

x′=x+ϵ⋅sign(∇xL(θ,x,y))x' = x + \epsilon \cdot \text{sign}(\nabla_x L(\theta, x, y))

여기서 ϵ\epsilon은 perturbation의 최대 크기를 제한하는 하이퍼파라미터입니다. 단 한 번의 그래디언트 계산만 필요하기 때문에 매우 빠르지만, 공격 성공률은 아래의 반복적 기법들보다 낮은 편입니다.

PGD (Projected Gradient Descent)

PGD는 FGSM을 여러 번 반복하면서, 매 스텝마다 perturbation이 허용된 ϵ\epsilon-ball 내부로 다시 투영(projection)하는 방식입니다. Madry 등의 연구에서 PGD 기반 적대적 훈련이 “가장 강력한 1차(first-order) 적대적 공격에 대한 견고성"의 사실상 표준 벤치마크로 자리잡았습니다.

xt+1=Projx+S(xt+α⋅sign(∇xL(θ,xt,y)))x_{t+1} = \text{Proj}_{x+S}\left(x_t + \alpha \cdot \text{sign}(\nabla_x L(\theta, x_t, y))\right)

PGD는 FGSM보다 계산 비용이 높지만, 훨씬 강력하고 일반적으로 “강한 white-box 공격"의 기준점으로 사용됩니다.

C&W (Carlini & Wagner) 공격

C&W 공격은 perturbation의 크기를 최소화하면서도 잘못된 분류를 유도하는 것을 명시적인 최적화 목표로 삼는 방법입니다. 박스 제약(box constraint)이 있는 최적화 문제를 변수 치환을 통해 제약 없는 문제로 변환하고, Adam과 같은 최적화 기법으로 풀어냅니다. C&W 공격은 당시 존재하던 여러 방어 기법(특히 그래디언트 마스킹 기반 방어)을 무력화시키는 데 효과적이었으며, “방어가 실제로 견고한지” 평가하는 강력한 기준으로 널리 쓰입니다.

이 외에도 DeepFool, JSMA, AutoAttack 등 다양한 변형 기법이 존재하며, 각각 perturbation의 크기, 계산 비용, 공격 성공률 사이의 다른 트레이드오프를 가집니다.

White-box vs Black-box

  • White-box 공격: 공격자가 모델의 구조, 파라미터, 그래디언트에 완전히 접근할 수 있는 경우입니다. FGSM, PGD, C&W는 모두 기본적으로 white-box 공격이며, 모델의 그래디언트를 직접 계산하여 perturbation을 생성합니다. 연구 환경이나 오픈소스 모델을 대상으로 한 공격, 혹은 모델이 탈취된 이후의 후속 공격에서 현실적입니다.
  • Black-box 공격: 공격자가 모델의 내부 구조에 접근할 수 없고, 입력에 대한 출력(또는 신뢰도 점수)만 관찰할 수 있는 경우입니다. 이 경우 공격자는 (1) 자신이 가진 대체 모델(surrogate model)에서 white-box 공격으로 적대적 예제를 생성한 뒤 타깃 모델로 전이(transferability)시키거나, (2) 출력만으로 그래디언트를 근사하는 query-based 방법(예: ZOO, Boundary Attack)을 사용합니다. 실서비스로 배포된 API 형태의 모델에 대한 공격은 대부분 이 범주에 속합니다.

Transferability는 특히 중요한 개념으로, 한 모델에서 생성된 적대적 예제가 구조나 학습 데이터가 다른 별개의 모델에도 어느 정도 효과를 발휘하는 현상을 말합니다. 이는 적대적 예제가 특정 모델의 “버그"가 아니라, 비슷한 데이터 분포로 학습된 모델들이 공유하는 더 근본적인 특성에서 비롯될 수 있음을 시사합니다.

Targeted vs Untargeted

  • Untargeted 공격: 단순히 모델이 “틀린” 답을 내도록 만드는 것이 목표입니다. 원래 정답이 “고양이"였다면, 결과가 “개"든 “자동차"든 정답이 아니기만 하면 성공입니다. 일반적으로 untargeted 공격은 targeted 공격보다 더 작은 perturbation으로도 성공시키기 쉽습니다.
  • Targeted 공격: 모델이 공격자가 미리 정한 특정 클래스로 출력하도록 만드는 것이 목표입니다. “정지” 표지판을 “속도 제한 없음” 표지판으로 분류하게 만드는 식의, 더 정교하고 실질적인 피해를 노리는 공격에서 사용됩니다. 일반적으로 더 큰 perturbation이나 더 많은 반복이 필요합니다.

이미지 분류기 예시

가장 널리 알려진 사례는 ImageNet 분류기를 대상으로 한 실험입니다. “판다” 이미지에 사람이 거의 인지할 수 없는 perturbation을 더했을 때, 모델은 99% 이상의 신뢰도로 “긴팔원숭이(gibbon)“라고 분류합니다. 또 다른 유명한 사례는 자율주행과 관련된 표지판 인식 모델로, 도로의 “정지” 표지판에 작은 스티커 패턴을 부착하는 것만으로 모델이 이를 “속도 제한 45” 표지판으로 잘못 인식하게 만든 연구입니다. 이러한 사례들은 적대적 예제가 단순한 이론적 호기심이 아니라, 실제 물리적 환경에서도(스티커, 인쇄물 등을 통해) 구현 가능한 위협임을 보여줍니다.

왜 이런 perturbation이 작동하는가: Decision Boundary 직관

신경망 분류기는 고차원 입력 공간을 여러 영역으로 나누는 매우 복잡한 decision boundary를 학습합니다. 직관적으로 이해하면:

  1. 고차원 공간의 특성: 입력 차원이 매우 높을 때(예: 224x224x3 이미지는 약 15만 차원), 각 픽셀에 아주 작은 변화를 가하더라도 그 변화들이 누적되면 입력 벡터 전체의 방향을 크게 바꿀 수 있습니다. L∞L_\infty 노름으로는 작아 보이는 변화가, 모델이 실제로 “보는” 고차원 표현 공간에서는 decision boundary를 넘기에 충분한 거리가 될 수 있습니다.
  2. 선형성 가설: Goodfellow 등은 신경망이 (활성화 함수에도 불구하고) 많은 구간에서 국소적으로 선형(linear)에 가깝게 동작한다고 주장했습니다. 선형 모델에서는 입력의 그래디언트 방향으로 작은 변화를 줄 때 출력이 비례적으로(때로는 차원 수에 비례하여 누적적으로) 변하므로, 작은 perturbation도 큰 출력 변화를 일으킬 수 있습니다.
  3. 결정 경계와의 거리: 자연스러운 데이터 포인트는 decision boundary로부터 평균적으로 멀리 떨어져 있을 것이라 기대하지만, 실제로는 많은 데이터 포인트가 특정 방향으로는 boundary와 매우 가깝게 위치합니다. 그래디언트는 정확히 “가장 가까운 boundary로 가는 방향"을 가리키기 때문에, 그 방향으로 조금만 이동해도 boundary를 넘게 됩니다.
  4. 학습 데이터의 분포 vs 모델이 학습한 함수: 모델은 학습 데이터가 존재하는 영역(매니폴드)에서는 잘 동작하도록 학습되지만, 그 주변의 “본 적 없는” 방향에 대해서는 아무런 제약 없이 외삽(extrapolation)됩니다. 적대적 perturbation은 바로 이 “데이터 매니폴드를 벗어나지만 여전히 입력 공간 상으로는 가까운” 영역을 찾아내는 것입니다.

이러한 직관은 왜 단순히 더 많은 데이터로 학습하거나 모델을 더 크게 만드는 것만으로는 적대적 예제 문제가 자동으로 해결되지 않는지를 설명합니다. 근본적인 해결을 위해서는 학습 과정 자체에 적대적 상황을 명시적으로 반영해야 합니다.

방어와의 연결

적대적 예제에 대한 가장 직접적인 방어는 적대적 훈련 (Adversarial Training)입니다. PGD와 같은 강력한 공격으로 생성한 적대적 예제를 학습 데이터에 포함시켜, 모델이 perturbation에 견고한 decision boundary를 학습하도록 만드는 방식입니다. 이는 본질적으로 “공격 기법을 방어에 그대로 활용"하는 대표적인 사례로, 공격 이해가 방어로 직결되는 좋은 예시입니다.

적대적 훈련은 견고성을 높이지만 일반적으로 깨끗한(clean) 데이터에 대한 정확도를 일부 희생하는 트레이드오프가 있습니다. 또한 특정 공격 기법(예: L∞L_\infty PGD)에 대해 훈련된 모델이 다른 노름이나 공격 기법에는 여전히 취약할 수 있다는 점도 고려해야 합니다.

실습으로 이어가기

이론적인 이해를 실제 코드로 확인해보고 싶다면 ART/Foolbox 실습 페이지에서 Adversarial Robustness Toolbox(ART)와 Foolbox 라이브러리를 이용해 FGSM, PGD 공격을 직접 생성하고, 모델의 출력이 어떻게 바뀌는지 관찰할 수 있습니다. 이러한 실습은 적대적 예제의 위험성을 체감하고, 적대적 훈련을 적용했을 때 견고성이 실제로 어떻게 개선되는지 정량적으로 비교하는 데 유용합니다.