OpenAI의 이안 굿펠로우(Ian Goodfellow)가 에러가 포함된 데이터(adversarial example)를 사용하여 모델을 더욱 견고하게 만들어 줄 수 있는 프레임워크 cleverhans를 오픈소스로 공개하였습니다. cleverhans는 파이썬2를 기반으로 하고 있으며 케라스(Keras)와 텐서플로우를 사용합니다. 아직 개발 초기 단계라 딱히 설치 방법을 제공하고 있지 않고 레파지토리를 클론해서 소스가 들어있는 cleverhans 디렉토리를 임포트해서 사용하면 됩니다. 현재는 MNIST 데이터를 사용한 예제만 제공되는 데 앞으로 튜토리얼이 더 추가될 수 있을 것 같습니다.
이 라이브러리는 현재 FGSM(Fast Gradient Sign Method) 방식으로 에러가 포함된 데이터(adversarial example)를 생성해 냅니다. 그리고는 이 데이터를 사용하여 모델을 다시 학습시키도록 하고 있습니다.
# Craft adversarial examples using Fast Gradient Sign Method (FGSM) ... adv_x_2 = fgsm(x, predictions_2, eps=0.3 predictions_2_adv = model_2(adv_x_2) # Perform adversarial training tf_model_train(sess, x, y, predictions_2, X_train, Y_train, predictions_adv=predictions_2_adv)
처음 모델의 정확도는 약 95.9% 였지만 에러가 들어 있는 데이터에 대해서는 불과 3.5% 밖에 되지 않았습니다. 하지만 에러가 들어있는 데이터를 이용해 두번째 모델을 만들어 손실 함수(loss function)를 보정하여 학습을 시킵니다. 이로 인해 테스트 데이터의 정확도는 95.1%로 조금 낮아졌지만 에러가 있는 데이터에 대한 정확도는 56.2%로 크게 성장한 것을 확인할 수 있습니다.
Test accuracy on legitimate test examples: 0.9589203125 Test accuracy on adversarial examples: 0.03577734375 ... Test accuracy on legitimate test examples: 0.951059375 Test accuracy on adversarial examples: 0.5620109375
텐서플로우 0.10.0 + 케라스 1.1.0 에서 테스트하였습니다.