
공격자가 한 픽셀의 색상을 수정하고 예측 확률 만 볼 수있는 경우 깊은 신경망이 이미지를 잘못 분류하는 것이 얼마나 간단합니까? 매우 간단합니다. 대부분의 경우 공격자는 네트워크가 원하는 답변을 반환 할 수도 있습니다.
다음 프로젝트는 "깊은 신경 네트워크를 속이는 것을위한 하나의 픽셀 공격"에 대한 Keras Remementation 및 튜토리얼입니다. 논문의 공식 코드는 여기에서 찾을 수 있습니다.
이 공격을 위해 CIFAR10 데이터 세트를 사용합니다. 데이터 세트의 작업은 10 개 범주 중 1 개 (예 : 조류, 사슴, 트럭)로 32x32 픽셀 이미지를 올바르게 분류하는 것입니다. 블랙 박스 공격은 신경망에 의해 출력되는 확률 라벨 (각 범주의 확률 값) 만 필요합니다. 픽셀을 선택하고 특정 색상으로 수정하여 적대 이미지를 생성합니다.
차동 진화 (DE)라는 진화 알고리즘을 사용함으로써, 우리는 반복적으로 적대적 이미지를 생성하여 신경망의 분류의 신뢰 (확률)를 최소화 할 수 있습니다.

크레딧 : Pablo R. Mier의 블로그
먼저, 랜덤 픽셀을 수정하는 몇 가지 적대 샘플을 생성하고 신경망을 통해 이미지를 실행하십시오. 다음으로, 이전 픽셀의 위치와 색상을 함께 결합하고, 그로부터 몇 가지 이상의 대적 샘플을 생성하고, 신경망을 통해 새로운 이미지를 실행하십시오. 마지막 단계에서 네트워크의 신뢰를 낮추는 픽셀이 있다면, 현재 가장 잘 알려진 솔루션으로 교체하십시오. 몇 가지 반복을 위해이 단계를 반복하십시오. 그런 다음 마지막 단계에서 네트워크의 자신감을 가장 줄이는 적대 이미지를 반환합니다. 성공하면 신뢰가 너무 줄어들어 새로운 (잘못된) 카테고리가 이제 가장 높은 분류 신뢰를 갖습니다.
성공적인 공격의 몇 가지 예는 아래를 참조하십시오.

GPU가 필요하거나 읽고 싶습니까? Google Colab을 사용하여 첫 번째 튜토리얼 노트를보십시오.
튜토리얼에서 코드를 로컬로 실행하려면 Keras ( tensorflow-gpu )로 실행하는 데 적합한 전용 GPU를 권장합니다. 파이썬 3.5+가 필요합니다.
git clone https://github.com/Hyperparticle/one-pixel-attack-keras
cd ./one-pixel-attack-keraspip install -r ./requirements.txtjupyter notebook ./one-pixel-attack.ipynb 모델을 훈련 시키려면 train.py 실행하십시오. 모델은 각 시대에 networks/models 디렉토리에 대한 검사 지점 (저장)됩니다.
예를 들어, 200 개의 에포크와 배치 크기가 128로 Resnet을 훈련시키기 위해
python train.py --model resnet --epochs 200 --batch_size 128 공격을 수행하려면 attack.py 실행하십시오. 기본적으로 기본 매개 변수로 모든 모델을 실행합니다. 테스트 할 모델 유형을 지정하려면 --model 사용하십시오.
python attack.py --model densenet capsnet현재 사용 가능한 모델은 다음과 같습니다.
lenet -Lenet, 첫 번째 CNN 모델pure_cnn 컨볼 루션 레이어 만있는 NNnet_in_net 네트워크의 네트워크resnet 이미지 인식을위한 깊은 잔류 학습densenet 밀도로 연결된 컨볼 루션 네트워크wide_resnet 넓은 잔류 네트워크capsnet 캡슐 간의 동적 라우팅 예비 결과 다양한 모델에서 여러 실험을 실행 한 후. 각 실험은 100 개의 대적 이미지를 생성하고 공격 성공률, 즉 이미지의 총 이미지 수에 대한 이미지를 잘못 분류하게 한 이미지의 비율을 계산합니다. 주어진 모델의 경우, 이미지 (1,3 또는 5)에서 수정 될 수있는 픽셀의 수를 기반으로 다수의 실험이 실행된다. 차동 알고리즘은 모집단 크기가 400이고 최대 반복 수는 75로 실행되었습니다.
1,3,5 픽셀 섭동에 대한 공격 (100 샘플)
| 모델 | 매개 변수 | 테스트 정확도 | 픽셀 | 공격 성공 (비정규직) | 공격 성공 (대상) |
|---|---|---|---|---|---|
| 레넷 | 62k | 74.9% | 1 | 63.0% | 34.4% |
| 3 | 92.0% | 64.4% | |||
| 5 | 93.0% | 64.4% | |||
| 순수한 CNN | 1.4m | 88.8% | 1 | 13.0% | 6.67% |
| 3 | 58.0% | 13.3% | |||
| 5 | 63.0% | 18.9% | |||
| 네트워크의 네트워크 | 970K | 90.8% | 1 | 34.0% | 10.0% |
| 3 | 73.0% | 24.4% | |||
| 5 | 73.0% | 31.1% | |||
| RESNET | 470K | 92.3% | 1 | 34.0% | 14.4% |
| 3 | 79.0% | 21.1% | |||
| 5 | 79.0% | 22.2% | |||
| Densenet | 850K | 94.7% | 1 | 31.0% | 4.44% |
| 3 | 71.0% | 23.3% | |||
| 5 | 69.0% | 28.9% | |||
| 넓은 resnet | 11m | 95.3% | 1 | 19.0% | 1.11% |
| 3 | 58.0% | 18.9% | |||
| 5 | 65.0% | 22.2% | |||
| 캡넷 | 12m | 79.8% | 1 | 19.0% | 0.00% |
| 3 | 39.0% | 4.44% | |||
| 5 | 36.0% | 4.44% |
캡슐 네트워크 캡츠 (Capsule Network Capsnet)는 다른 모든 CNN보다 하나의 픽셀 공격에 더 탄력적이지만 여전히 취약한 것으로 보입니다.