적의 공격이란?
● 반대 샘플을 생성하여 다양한 기계 학습 기반 시스템의 성능을 의도적으로 저하시켜 보안 문제를 유발하는 공격. 핵심은 적절한 노이즈를 생성하지만 기계 학습 모델을 혼동하여 사람의 눈에 동일하게 보이는 적대적인 예를 만드는 것입니다. 상충되는 예는 일반 데이터에 노이즈를 추가하여 기계 학습 모델을 혼동하는 데이터입니다. 아래 이미지는 간판에 스티커를 붙여 만든 대조적인 예시 중 하나입니다.

목표는 인식 오류를 유발하지만 원본과의 차이가 가장 작은 노이즈, 즉 최적화 문제를 찾는 것입니다.
● 적의 공격 이유
물론 기계 학습에 의존하는 서비스의 수가 증가함에 따라 기계 학습 보안이 점점 더 중요해지고 있습니다. 다음과 같이 실수를 해서는 안 되는 영역에서 시스템의 보안을 저하시키는 취약점이 있는 경우 매우 큰 문제가 될 수 있습니다. 나. 자율주행, 비정상 은행거래 감지 및 의료영상 분석 예를 들어 자율주행차는 징후를 인식하지 못할 수 있으며 의료 진단 시스템은 치명적인 질병을 놓칠 수 있습니다. 하지만 딥러닝 모델 내부를 해석하는 기술은 아직 초기 단계이기 때문에 이러한 공격을 효과적으로 막을 수 있는 방법은 없습니다. 이러한 이유로 다양한 공격과 방어 방법이 활발히 연구되고 있으며, 보다 근본적으로는 딥러닝 모델이 데이터를 어떻게 해석하는지에 대한 연구가 활발히 진행되고 있습니다.
● 적의 공격 유형
=> 노이즈 발생 방식으로 분류합니다.
1. 경사면과 같은 모델 정보가 필요하신가요?
– 화이트 박스: 모델 정보를 기반으로 노이즈 발생(화이트 박스)
– 블랙박스 : 모델정보 없이 생성(블랙박스)
2. 원하는 답을 이끌어 낼 수 있나요?
– 목표
– 목표 없음
3. 노이즈를 발생시키려면 반복 학습(최적화)이 필요한가요?
– 반복적 인
– 한 번의 기회
4. 노이즈가 특정 입력에만 적용됩니까? / 모든 이미지에 적용되나요?
이 중에서 가장 강력한 공격 방법은 모델 정보가 필요하지 않고, 원하는 반응을 유도할 수 있으며, 복잡한 학습이 필요하지 않고, 여러 모델에 동시에 적용할 수 있는 것입니다.
.
.
.
FGSM(Fast Gradient Sign Method) 공격
반복 학습 없이 노이즈를 발생시키는 원샷 공격으로 입력 영상에 대한 그래디언트 정보를 추출하여 노이즈를 발생시킨다. 공격 대상을 알 수 없는 비표적 기법과 대상 모델에 대한 정보가 필요한 화이트박스 기법이다. 노이즈가 육안으로 보이지 않아야 하므로 아주 작은 수(이미지에서 0.007)를 곱하고 희석합니다.이 이미지에 추가되었습니다.
아래 코드를 사용하여 공격이 어떻게 작동하는지 설명하겠습니다.
이것은 전체 코드 주소입니다!
GitHub – jgyy4775/3-min-pytorch:
github.com
● 간단한 코드 설명
이전 게시물에서 설명한 부분을 제외하고.
.
– 필요한 라이브러리 가져오기
=> Torchvision.models는 AlexNet, VGG, ResNet, SqueezeNet, DenseNet 및 Inception과 같은 몇 가지 훈련된 모델을 제공합니다. 대부분은 ImageNet 데이터 세트에서 훈련된 모델입니다. 모델을 사용하는 경우.
import torch
import torch.nn.functional as F
import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image
import json
import matplotlib.pyplot as plt
– 학습된 모델 로드
=> 이 예에서는 resnet101을 사용합니다.
model = models.resnet101(pretrained=True)
model.eval()
print(model)
– 데이터 세트 불러오기
CLASSES = json.load(open('./imagenet_samples/imagenet_classes.json'))
idx2class = (CLASSES(str(i)) for i in range(1000))
– 공격 이미지를 불러온 후 텐서로 변환
=> 실제 공격은 훈련 데이터에 없는 이미지에 적용되기 때문에 데이터셋에 없는 새로운 이미지를 생성해야 합니다. 공격에 사용할 이미지는 아래 강아지 이미지입니다.
img = Image.open('imagenet_samples/corgie.jpg')
img_transforms = transforms.Compose((
transforms.Resize((224, 224), Image.BICUBIC), # 이미지 크기 224 × 224로 변경
transforms.ToTensor(),
))
img_tensor = img_transforms(img) # 파이토치 텐서로 변한
img_tensor = img_tensor.unsqueeze(0) # 1차원 증가
– FGSM 공격 기능 정의
FGSM 공격의 본질은 모델에서 입력 이미지에 대한 그래디언트 정보를 추출하고 워프하여 원본 이미지에 추가하는 것입니다. 기울기는 각 픽셀이 학습될 때 모델에 미치는 영향으로 이해할 수 있습니다. 다음 함수는 원본 이미지를 가져와 상대 예제를 생성하는 함수입니다.
=> 모델을 혼동시키기 위해서는 모델의 오차값을 최대화해야 합니다. 딥 러닝 모델을 훈련하면 기울기 반대 방향의 가중치를 조정하여 오류를 줄이는 반면, FGSM 공격은 기울기 방향의 노이즈를 최적화하여 오류를 증가시킵니다.
sign(): 기울기의 방향을 찾는 함수(입력 < 0: -1, Eingabe==0: 0, Eingabe > 0:1)
def fgsm_attack(image, epsilon, gradient):
sign_gradient = gradient.sign() # 기울기값의 원소의 sign 값을 구함
# 이미지 각 픽셀의 값을 sign_gradient 방향으로 epsilon 만큼 조절
# (epsilon==학습률과 비슷, 노이즈가 너무 커지지 않게 함)
perturbed_image = image + epsilon * sign_gradient
# (0,1) 범위를 벗어나는 값을 조절
perturbed_image = torch.clamp(perturbed_image, 0, 1)
return perturbed_image
– 대조되는 예 만들기
원본 이미지의 그라데이션을 추출하려면 require _grad_(True) 함수를 호출하여 이미지의 그라데이션을 명시적으로 유지합니다.
# 이미지의 기울기값을 구하도록 설정
img_tensor.requires_grad_(True)
# 이미지를 모델에 통과시킴
output = model(img_tensor)
# 오차값 구하기 (레이블 263은 웰시코기)
loss = F.nll_loss(output, torch.tensor((263)))
# 기울기값 구하기
model.zero_grad()
loss.backward() # img_tensor 텐서의 grad.data 변수에 입력 이미지의 기울기가 저장
# 이미지의 기울기값을 추출
gradient = img_tensor.grad.data
# FGSM 공격으로 적대적 예제 생성
epsilon = 0.03
perturbed_data = fgsm_attack(img_tensor, epsilon, gradient)
# 생성된 적대적 예제를 모델에 통과시킴
output = model(perturbed_data)
– 원본과 반대 예시의 비교, 딥러닝 모델의 예측 결과 비교
왼쪽 이미지가 원본 이미지이고 오른쪽 이미지가 노이즈가 추가된 이미지입니다. 인간의 눈에는 여전히 웨일스 코기이지만 딥 러닝 모델은 그것이 “휘핏”이라고 예측했습니다.
=> 이것은 딥러닝이 성능은 훌륭하지만 약점이 있음을 보여준다. 반례를 생성하는 다양한 방법에 대한 연구도 진행되고 있지만 이를 어떻게 방어할 것인지에 대한 연구도 활발해야 한다.

