This repository has been archived by the owner on Oct 19, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 244
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
27 additions
and
222 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,92 +1 @@ | ||
# 딥러닝 해킹하기 | ||
|
||
* [개념] 적대적 공격(Adversarial Attack) 이란? | ||
* [프로젝트 1] FGSM 공격 | ||
* [프로젝트 2] 목표를 정해 공격하기 | ||
|
||
사람이 착시를 보듯 딥러닝 모델도 일종의 '착시'를 봅니다. | ||
다만 이미지를 인식하는 구조가 다르기 때문에 | ||
컴퓨터가 보는 착시는 사람의 그것과는 다른 종류입니다. | ||
머신러닝 모델의 착시를 유도하는 이미지, 오디오, 등 모든 입력을 | ||
적대적 예제(Adversarial Example)라고 일컫습니다. | ||
의도적으로 적대적 예제를 생성해서 | ||
여러가지 머신러닝 기반 시스템에 보안 문제를 야기하는 | ||
적대적 공격(Adversarial Attack)에 대해서 자세히 알아보겠습니다. | ||
|
||
## 적대적 공격(Adversarial Attack) 이란? | ||
|
||
머신러닝에 의존한 서비스가 많아지면서 | ||
자연스럽게 머신러닝의 보안 또한 중요도 또한 커지고 있습니다. | ||
최근 구글 브레인에서 진행한 연구에 의하면 모든 머신러닝 분류기가 | ||
속임수에 의해 잘못된 예측을 할 수 있다고 합니다. | ||
더욱 놀라운 것은 복잡한 딥러닝 모델을 속이는데 | ||
그리 많은 노력과 기술이 들어가지 않는다는 것입니다. | ||
|
||
자율주행, 은행의 비정상거래탐지, 영상인식, 의료영상분석등 | ||
실수가 용납되지 않는 분야에서도 | ||
시스템의 신뢰도를 떨어뜨린다는 점에서 약점이 존재한 다는 것은 치명적입니다. | ||
자율주행차가 표지판을 보지 못할수도, 의료진단 시스템이 병을 놓칠수도 있고, | ||
심지어는 영상 뿐만 아니라 텍스트와 오디오까지 적용 가능하다는 것이 | ||
최근 밝혀지고 있습니다. | ||
공격 방법이 조금만 더 발전되면 카페의 음악 속에 몰래 명령을 넣어 | ||
음성비서가 오작동하게 할 수도 있을 것입니다. | ||
사실 아직까지는 딥러닝 모델 내부를 해석하는 초기 단계에 있기 때문에 | ||
최근 연구에서도 효과적인 방어법을 시원하게 내놓진 못하고 있습니다. | ||
이와 같은 이유로 각종 공격과 방어 방법, 그리고 더 근본적으로는 | ||
딥러닝 모델이 어떻게 데이터를 해석하는지 파해치는 분야의 연구가 | ||
활발하게 진행중입니다. | ||
|
||
![적대적 공격 개념 그림]() | ||
|
||
앞서 딥러닝의 가능성과 성능을 목격한 상태에서, | ||
어떻게 이것이 가능한가 의문이 들 것입니다. | ||
잘 학습된 딥러닝 모델도 가끔씩 실수를 일으키기 마련입니다. | ||
모델 내에서는 연속적인 입력의 변환이 일어나게 되는데, | ||
변환은 입력의 특정 구조에 매우 예민하게 반응합니다. | ||
모델이 예민하게 반응하는 부분을 공략함으로서 | ||
모델을 헷갈리게 할 수 있는 것입니다. | ||
|
||
보통 컴퓨터를 해킹하는 방법이 무궁무진 하듯 | ||
적대적 공격은 여러 종류가 있습니다. | ||
그중 대표적인 몇개를 알아보도록 하겠습니다. | ||
|
||
`torchvision`의 학습된 모델을 가져와서 | ||
ResNet과 DenseNet같은 복잡한 모델을 무력화 시키는 것이 | ||
얼마나 간단한지 직접 느껴보시기 바랍니다. | ||
|
||
![ResNet vs FGSM 그림]() | ||
|
||
|
||
## 적대적 공격의 종류 | ||
|
||
적대적 공격은 적절한 잡음 (노이즈)를 | ||
생성해 사람의 눈에는 똑같이 보이지만 머신러닝 모델을 헷갈리게 만드는 것이 핵심입니다. | ||
인식 오류를 일으키지만 가장 원본과 차이가 적은, | ||
즉 제일 작은 노름(norm)을 가진 노이즈를 찾는 것이고, | ||
결국 최적화(Optimization)문제로 해석할 수 있습니다. | ||
|
||
노이즈를 생성하는 방법은 굉장히 여러가지입니다. | ||
모델 정보가 필요한지, | ||
우리가 원하는 정답으로 유도할 수 있는지, | ||
여러 모델을 동시에 헷갈리게 할 수 있는지, | ||
학습이 필요한지 등의 여부에 따라 종류가 나뉩니다. | ||
|
||
대표적인 분류 방법 몇가지를 알아보겠습니다. | ||
처음으로 그래디언트 같은 모델 정보가 필요한지의 여부에 따라서 | ||
모델 정보를 토대로 노이즈를 생성하는 화이트박스(White Box), | ||
그리고 모델 정보 없이 노이즈를 생성하는 블랙박스(Black Box)로 나뉩니다. | ||
그리고 우리가 원하는 정답으로 유도가 가능하다면 Targeted, | ||
아니라면 Non-Targeted라고 부릅니다. | ||
마지막으로 한 노이즈가 특정 입력에만 적용되면 Image Specific, | ||
모든 이미지에 동시에 적용이 가능한 노이즈면 Universal하다고 합니다. | ||
|
||
가장 강력한 공격방법은, 모델 정보 필요 없이, | ||
우리가 원하는 정답으로 유도 가능하고, | ||
학습이 필요하지 않으며 여러 모델에게 동시에 적용 가능한 방법이겠지만, | ||
각 특징에 기회비용이 존재합니다. | ||
|
||
![적대적 공격 종류 그림]() | ||
|
||
물론 실제로 사용되는 딥러닝 시스템들은 | ||
모델 내부 정보를 공개하고 있지 않고 여러가지 노이즈를 제거하는 | ||
전처리 과정을 거치므로 훨씬 공격하기 힘들어지게 됩니다. |
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,76 +1 @@ | ||
# 경쟁을 통해 성장하는 GAN | ||
|
||
GAN을 이용하여 새로운 패션 아이템을 만들어봅니다. | ||
|
||
* [개념] GAN 기초 | ||
* [프로젝트 1] GAN으로 새로운 패션아이템 생성하기 | ||
* [프로젝트 2] Conditional GAN으로 생성 컨트롤하기 | ||
* 더 보기 | ||
|
||
## GAN 기초 | ||
|
||
GAN을 설명할때 항상 나오는 명언이 있습니다. | ||
바로 양자 역학에 대한 공으로 노벨 물리학상을 받은 | ||
리처드 파인만(Richard Feynman) 교수의 | ||
"내가 만들어낼 수 없다면 이해하지 못한 것이다" | ||
(What I cannot create, I do not understand) | ||
라는 문장입니다. | ||
빈 종이가 주어졌을때 처음부터 끝까지 *자신만의 자세한 설명* | ||
을 할 수 있어야 진정한 '이해'에 | ||
도달한다는 취지에서 말을 한 것이라 생각됩니다. | ||
비슷한 맥락으로 단순히 고양이와 강아지를 구분하는 것과 | ||
고양이와 강아지를 그릴 수 있는 것은 이해의 정도에 | ||
큰 차이가 있다고 할 수 있습니다. | ||
우리가 지금까지 만든 딥러닝 모델들은 이미지를 구분 하는 정도에 그쳤지만 | ||
이제 그림을 그리는 뉴럴넷을 만드는데 도전해보려고 합니다. | ||
|
||
Generative Adversarial Networks, | ||
흔히 줄여서 GAN이라 부르고 이안 굿펠로우(Ian Goodfellow)가 | ||
2014년 처음 제안한 이 방법론은 한국어로 직역하면 | ||
'적대적 생성 신경망'입니다. | ||
왠지 더 어려워보이는 한국어 이름이지만 | ||
한 단어씩 뜯어보면 그 의미를 알 수 있습니다. | ||
|
||
먼저 GAN은 '생성'을 하는 모델입니다. | ||
기존에 배운 CNN이나 RNN으론 새로운 이미지나 음성을 만들어 낼 수 없었습니다. | ||
GAN은 새로운 이미지나 음성을 '창작'할 수 있도록 고안되었습니다. | ||
|
||
두번째로 GAN은 '적대적'으로 학습합니다. | ||
adversarial 이라는 단어의 사전적인 의미는 | ||
'서로 대립 관계에 있는', 혹은 '적대적인'입니다. | ||
이름이 암시하듯 GAN 방법론에선 | ||
가짜 이미지를 생성하는 생성자(Generator)와 | ||
이미지의 진위 여부를 판별하는 판별자(Discriminator)가 | ||
연달아 학습을 하며 경쟁적으로 (적대적으로) 학습을 하게 됩니다. | ||
|
||
판별자는 앞서 배운 신경망 모델들과 매우 비슷합니다. | ||
입력 x와 진위여부 y 사이의 관계를 학습하는 모델이라고 볼 수 있습니다. | ||
생성자는 진짜 데이터 x 가 어떻게 생겼는지를 배우는 모델입니다. | ||
정확하게는 입력의 분포를 배우게 됩니다. | ||
프로젝트 2에서는 한발 더 나아가 레이블 y가 주어졌을때 | ||
진짜 데이터 x가 어떻게 생겼는지를 배우는 모델을 만들어 | ||
직접 생성을 통제할 수 있도록 해보겠습니다. | ||
|
||
마지막으로 GAN은 '신경망'입니다. | ||
Generator와 Discrinimator 모두 뉴럴넷으로 되어있습니다. | ||
|
||
GAN을 한마디로 종합하자면 서로 대립하는 | ||
두 모델의 경쟁을 통해 학습을 하는 방법론입니다. | ||
얀 르쿤 (Yann LeCun)은 이 아이디어를 | ||
"근 20년간의 머신러닝 연구 중 가장 재밌는 아이디어" | ||
라고 했고 앤드류 응(Andrew Ng)을 비롯한 많은 연구자들도 | ||
앞으로 딥러닝을 이끌 기술중 하나라고 진단하고 있습니다. | ||
이에 힘입어 GAN을 활용한 엄청난 수의 논문이 쏟아지고 있습니다. | ||
|
||
GAN이 이토록 주목받고 미래지향적이라는 평가를 받는 | ||
이유중 하나는 바로 비지도 학습을 한다는 것입니다. | ||
세상에 존재하는 데이터는 기하급수적으로 증가하는 중이고, | ||
대부분의 데이터는 정답(label)이 없습니다. | ||
그렇다고 사람이 모든 데이터를 일일이 가공하기엔 한계가 많습니다. | ||
GAN은 앞서 배운 오토인코더와 같이 비지도학습을 하여 | ||
사람이 데이터에 주는 영향을 최소화 하며 학습을 할 수 있습니다. | ||
|
||
앞서 나온 이유들과 더불어 GAN의 방법론은 | ||
유연하여 무궁무진한 응용이 가능합니다. | ||
머신러닝으로 풀고자 하는 문제들 대부분에 GAN을 이용한 방법이 | ||
시도되고 있으며 놀라운 성적을 내고 있습니다. |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,57 +1 @@ | ||
# 주어진 환경과 상호작용을 통해 성장하는 DQN | ||
|
||
간단한 게임환경 안에서 스스로 성장하는 DQN 에이전트를 만들어봅니다. | ||
|
||
* [개념] 강화학습과 DQN기초 | ||
* [팁] OpenAI Gym | ||
* [프로젝트 1] 카트폴 게임 마스터하기 | ||
* 더 보기 | ||
|
||
|
||
## 강화학습과 DQN기초 | ||
|
||
사람은 스스로 성장합니다. | ||
선생님이 가르쳐 주는 지식도 중요하지만 자기주도적 학습을 하는 것도 중요합니다. | ||
기계학습에도 비슷한 영역이 있습니다. | ||
주어진 환경과 상호작용을 통해 가장 좋은 점수를 받는 쪽으로 | ||
성장하는 머신러닝 분야를 "강화학습" 이라고 부릅니다. | ||
비유를 들자면 앞서 배웠던 학습 방법들이 우리가 원하는 | ||
교재(데이터셋)를 외우게 하는 주입식 학습법이고 강화학습은 | ||
자기주도적 학습법이라고 볼 수 있습니다. | ||
강화학습에서 사람은 목표를 설정해주고 | ||
당근과 채찍을 이용해 성장시키는 코치입니다. | ||
|
||
누가 가르쳐주지 않았는데도 우리는 각자 나름대로 뛰는법을 배웠습니다. | ||
처음 뛰었을때를 상상해보세요. 처음부터 숨을 어떻게 쉬고, 팔을 어떻게 흔들고, | ||
다리 근육을 어떻게 사용하는지 머릿속으로 일일이 생각을 하면 | ||
오히려 부자연스러워 지기 마련입니다. | ||
일어섰다가 넘어지기를 반복하며 우리들은 시행착오를 통해 걷고 뛰는 법을 배웁니다. | ||
강화학습 에이전트도 주어진 환경안에서 여러가지의 시행착오를 통해 좋은 피드백을 | ||
좋은쪽으로 최적화를 하는 것이 목표입니다. | ||
|
||
![rl](./assets/rl.png) | ||
|
||
강화학습은 크게 상태(State), 에이전트(Agent), 행동(Action), 보상(Reward)의 | ||
4가지 요소로 나눌 수 있습니다. | ||
환경은 우리가 마스터하기 원하는 무대이고 시간에 따라 다른 상태를 제공합니다. | ||
에이전트는 인공지능 플레이어입니다. | ||
그리고 에이전트가 환경 안에서 여러가지 행동을 함에 따라 | ||
나오는 피드백을 보상, 혹은 리워드라고 부릅니다. | ||
|
||
|
||
2013년 구글 딥마인드는 NIPS라는 학회에서 | ||
"딥 강화학습을 이용하여 아타리 게임하기" | ||
(Playing Atari with Deep Reinforcement Learning)라는 논문을 냅니다. | ||
이 논문은 Deep Q-Network, 혹은 줄여 DQN이라고 부르는 알고리즘을 이용하여 | ||
아타리사의 유명한 게임들에서 사람보다 월등한 성능을 내는 인공지능을 만들어 많은 주목을 받았습니다. | ||
사전에 주어진 정보 없이 화면과 조종키 몇개만 주어진 환경에서 기존 알고리즘들보다 | ||
월등하게 좋은 성능을 내었고, 심지어 특정 게임에서는 | ||
버그를 찾아 치사한 방법으로 이기는 모습도 보여주었습니다. | ||
딥마인드사는이 업적을 바탕으로 딥 강화학습이라는 연구 분야를 개척하고 구글에 인수가 됩니다. | ||
|
||
|
||
“얼마나 대단한 알고리즘이길래?” 라고 하실 수 있습니다. | ||
하지만 인공신경망과 비슷하게 코드로 담아보면 몇줄 안되는 것을 발견할 수 있습니다. | ||
|
||
DQN은 갑자기 새롭게 튀어나온 아이디어라기 보다는 고전적인 | ||
Q-Learning이라는 알고리즘에 뉴럴넷과 여러가지 테크닉을 접목한 결과입니다. |
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import sys | ||
import os | ||
from importlib import import_module | ||
|
||
|
||
# setup path | ||
chapter_name = "08-딥러닝_해킹하기_Adversarial_Attack" | ||
dir_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), ".." , chapter_name) | ||
sys.path.append(dir_path) | ||
|
||
|
||
|
||
def test_chapter_exmaples(): | ||
mydir_tmp = os.path.join(dir_path) # add the testA folder name | ||
mydir_new = os.chdir(mydir_tmp) # change the current working directory | ||
mydir = os.getcwd() # set the main directory again, now it calls testA | ||
|
||
chapter_examples = [ | ||
# "text_classification", | ||
# "sequence_to_sequence", | ||
] | ||
|
||
for example in chapter_examples: | ||
imported_package = import_module(example) | ||
|
||
if __name__ == "__main__": | ||
test_chapter_exmaples() |