안녕하세요, Siraj입니다
이번 강의는 신약 개발에서
인공지능의 활용에 대해 이야기해보죠
인공지능을 통해 신약 개발의
문제를 해결해 볼 겁니다
특히 신약을 발견하는
단계에 대해 살펴봅시다
생의학 연구자들이 
정규직으로 하는 일이니까요
암이나 에이즈, 알츠하이머 같은
주요 질병들을 위한 약은
실제로 사람들이 
사용하기 전에
연구부터 생산까지
긴 과정을 거쳐야 합니다
현시점에서 이 과정은
대략 12년 가량이 걸립니다
아주 긴 시간이죠
인공지능 분야는 논문이 나오자마자
좌충우돌하며 빠르게 변하지만
생의학분야는
아주 천천히 움직입니다.
신약개발의 이러한 문제를
인공지능을 통해 해결해 볼건데
특히 적대적 생성 신경망이라는
모델을 살펴볼 것 입니다
어떻게 작동하는지는
나중에 설명드릴게요
먼저 파이썬에서 구현된
이 멋진 도구를 봅시다
Flask 웹 프레임워크 상에서 
돌아가는데요
이 문제를 해결하기 위한
아주 훌륭한 도구입니다
다양한 종류의 약을
나열해서 보여주는데
이 약들을 구성하는
분자 화합물들을 3차원으로 볼 수 있습니다
이 그래프에서 각 축들은
약의 속성을 의미합니다
왼쪽에서 약을 구성하는
분자를 보여주죠
쿠아제팜, 티오트로피움,
실라사이신, 테오브로민
잘못 발음했을 수도 있지만요
이렇게 분자들을 시각화하는 방법도 있고
이름을 타이핑할 수도 있습니다
약들이 정말 많죠
다... 단... 단트롤렌! 맞죠?
드롭다운에서 하나를 선택하면
아래쪽에서 이런 것들을 볼 수 있습니다
각각의 분자들은 모든 특징들을 담고 있는
데이터시트를 가지고 있습니다
어떤 그룹에 속하는지, 타입은 무엇인지
세부정보와 화학 구조식이라든가
동의어, 구성물질, 처방 정보
실제 사람들에게 약을
얼마나 사용해야할 지도요
Drug Bank는
어마어마한 정보를 가지고 있고
이걸 보는 가장 좋은 방법은
이 그래프에서 선택하는 것입니다
영상 설명에 남겨둔
링크를 참고하세요
자, 이 도구는
보충 자료로 사용하고
실제 우리가 볼 코드는
ChemGAN이라고 부르는 모델입니다
화학적인 적대적 생성 신경망이죠
작년에 나온 최신 논문에서 가져온 건데요
적대적 생성 신경망을
신약개발에 활용해 본 연구였습니다
그러니까 이건 아주 최신의
인공지능 활용사례라 할 수 있습니다
그림을 보면 질병들과 
이를 치료할 후보 약들이 있죠
판별자라고 쓰여진
글씨도 있네요
여기서 적대적 생성 신경망
GAN을 사용하는 거죠
이제부터 편의를 위해 
GAN이라고 부르겠습니다
GAN을 통해
이 문제를 해결할 수 있습니다
어떻게? 라는 질문이 나오겠죠
그게 이 영상의 주제니까요
하지만 그 전에, 지금 현실에서
신약이 어떻게 발견되는지를 봅시다
과정을 제대로 알지도 못하고
개선할 수는 없으니까요
자, 그럼 현실에서
신약은 어떻게 발견될까요?
현재는 약이 시장에 팔리기까지
6.5년에서 12년
많게는 15년까지 걸립니다
여기 보시면 신약 개발의
전 과정이 있는데
신약 발견, 임상전시험, 임상시험 
그리고 나서 막강한 힘을 가진 FDA 검토까지
결국 미국에서는 
FDA승인을 받아야만합니다
각 나라마다 다른 규정이 있으니까
감안하고 들어주세요
그리고 저에겐
무척 흥미로웠던 게
인간을 대상으로 한 임상시험의
90%가 실패한다고 합니다
그 약이 동물 실험에서는
성공적이었음에도 말이죠
아주 큰 숫자죠?
개선의 여지가 아주 큰 부분입니다
이 과정이 어떻게 돌아갈까요?
한번 살펴봅시다
먼저, 생의학 분야의 연구자가
되기 위해선 공부를 많이 해야 합니다
학사 학위를 따고, 석사를 받고 박사 학위를 따고
박사 후 과정을 거쳐야 하는데
여기까지 오는데 12년이 걸립니다
여기서 한 가지 덧붙이고 싶은 게
머신러닝과 인공지능 기술은
우리 시대 민주화의 주역입니다
무슨 말이냐면, 이 분야에
의미있는 기여를 하기 위해서는
12년이 걸립니다
이를 거쳐야만 신약 개발이 가능하죠
사진을 분류하고 신용카드 사기를
찾아내는 등의 특별한 일들은
전문가들에게만 허락되어왔지만
이제는 머신러닝을 이해하고 있다면
누구든지 할 수 있습니다
미래에는 머신러닝을 이해하면
말 그대로 무엇이든 할 수 있을 거에요
즉 학교에서 생의학을
12년 동안 공부하지 않았더라도
머신러닝을 이해하고 있다면
그 12년을 건너뛸 수 있다는 거죠
머신러닝의 학습 시간과 
인간이 이 모든 것을 배우는 시간을 비교해보면
사람은 학습하는 데 아주 오래 걸려요
음식도 먹어야 하고
배우기도 하고, 잠도 자야 하고
쉬기도 해야 하고
자기만의 시간도 가져야 하고
아주 많죠
머신러닝은 이 모든 것을
빠르게 만들 수 있습니다
생의학 박사가 아니더라도
튀니지의 한 아이도
이 도구를 사용하면
엄청난 신약을 발견할 수 있습니다
데이터셋는 누구나 온라인에서
쉽게 구할 수 있으니까요
그러니까 여러분 자신을 믿으세요
요즘은 아무도 자신을 믿지 않아요
인간은 원래 약해요
자신감을 가지세요 여러분
제가 유튜브로 Gary Vee를 보고 있거든요
저는 이런 말을 하는 게
너무 좋단 말이죠, 하여튼
첫 번째는 의학 문헌을
공부하는 것입니다
여러 약물과 질병들 사이의
상호작용에 대해 알아야 하죠
어느 분야의 연구이든 간에
선행 연구를 조사하는 게 첫 번째입니다
그럼 약물의 목표를
찾아낼 수 있죠
예를 들면 이 약물이
결합해야 하는 단백질을 찾는 식입니다
다음은 약물이 어떠한 성질을
가져야 하는지 알아내야 합니다
약물은 제각각의
성질을 가지고 있고
한 약물에 대한 가설을 세우면
그게 맞는지를 검증해야 하죠
얼마나 잘 녹아야 하고
구조는 어떠해야 하며
어떤 종류의 암을 치료해야 하는지
이런 것들을 알아내야 합니다
세 번째는 어떤 분자들이 그러한
성질을 가지는가를 알아야 합니다
어떤 종류의 약물인지 알았고
어떤 성질을 가져야 하는지 알았다면
현존하는 분자들 중 어떤 것들이
그러한 성질을 가졌는지 찾아야죠
분자들은 동적인 구조를 가집니다
복잡하고 다양한 화합물로 구성되어 있죠
간단한 과정이 아닙니다
그래서 하나의 기준이 필요합니다
여러분이 보게 될 데이터베이스는
7200만 개의 분자를 포함합니다
수많은 분자들의
구조식과 성질 등이 정리되어 있죠
특정 분자가 특정 질병을 치료하는지
확인하는 과정을 반복하는 겁니다
후보가 7200만개나 있지만
머신러닝에서는 이건 일도 아니지요
인간은 7200만개의 가능성 확인에
시간을 낭비하려하지 않을 것입니다.
그건 사람이 할 일이 아니라
머신러닝이 해야할 일입니다
네 번째, 지금까지의 과정이 끝나면
분자에 대한 기본적인 정보가 있겠죠
이제 실험을 해 볼 차례입니다
지금은 이 단계를 컴퓨터가 하지 않죠
실제 사람이나 동물을 대상으로
임상시험이 시행되고 있습니다
그래서 최초 개발부터 시판 승인까지
8~12년이라는 긴 시간이 걸리게 됩니다
먼저 연구자들이 선두 분자라는
일종의 시제품을 연구소로 보냅니다
그럼 연구소에서는 이 약물이
효과가 있는지 없는지를 판단하죠
아주 일부의 약만이 실제로
효과를 발휘합니다. 아주 일부만요
그래서 어떤 약이 효과가 있을지에
대해 확신을 가져야 하는데
지금은 그렇지 못합니다
하지만 다행히도 컴퓨터에서는 
이 과정을 가속화할 수 있습니다
사람에게 최적의 약물을 찾아서
곧장 시장으로 가져갈 수 있죠
별도의 임상시험을 할 필요 없이
시뮬레이션을 돌리면 됩니다
기회는 열려있고 투지(Moxie)나 
용기를 가진 이가 그냥 하면 됩니다
오늘은 별 단어를 다 말하네요
Moxie는 뉴욕 속어죠
어쨌든 약학 연구 및 개발은
아주 아주 긴 과정입니다
이건 꼭 기억하셔야 해요
아주 오랜 시간이 걸리는 과정입니다
그래서 인공지능 스타트업이
돈을 벌 기회가 많이 남아있죠
이렇게 시간이 많이 걸리는 문제를
단축시킬 수만 있다면
연구자들과 제약회사, 정부와 소비자들을 
위한 그 어떠한 것이라도
10배 이상 개션할 수 있다면
스타트업에게는 최고의 아이디어가 아닐까 합니다
10년 걸리던 걸 1년에 끝낸다?
그게 바로 10배 개선입니다
그래서
만약 암을 치료하는 것이
목적이라 하더라도
수많은 형태의 분자들을
모두 확인할 수는 없습니다
7200만 개는 단지
특정한 데이터베이스의 크기일 뿐
전체 분자의 개수는 10^60개에서
10^200개 정도로 추산됩니다
7200만 개의 분자들로
모두 조합을 해야하는거죠
아주 큰 숫자입니다
그러므로 연구소에서 하나의 분자를 
합성하고 검사하는 데는
수천 혹은 수만 달러가
들 수도 있습니다
10배 차이죠
따라서 초반의 추측 단계가
아주 중요합니다
여기가 머신러닝을
활용할 수 있는 부분이죠
머신러닝 모델로 필요한 속성을 가질
확률이 가장 높은 분자를 골라볼 수 있습니다
7200만 개의 무언가가 있다면
이건 어떤 종류의 문제일까요?
분류하는 문제라고는 보기 어렵죠
후보가 7200만 개나 되니까요
단순히 핫도그냐 아니냐와 같은
간단한 문제가 아닙니다
오히려 일종의
생성 문제에 가깝습니다
7200만 개로부터
무언가를 생성해내는 겁니다
분류하기에는
종류가 너무 많으니까요
건초더미에서 바늘을 찾는 대신
완벽한 바늘을 하나 만들어내는 겁니다
물론 실제로는
완벽한 약이 되겠죠
Dr. Evil이 말한 것처럼
완벽한 약을 만드는 겁니다
인공지능은 선을 위해서도
악을 위해서도 사용될 수 있습니다
여러분에게 달렸죠
올바르게 사용할 책임이 있습니다
여러분은 선택받은 거에요
스타워즈에 나오는 오비완이
"아나킨, 넌 선택받은 자야!"
"인공지능를 선한 곳에 써!"
뭐 이런 것처럼 말이죠 하하
돌아와서, 신약 개발에서
머신러닝의 역사를 봅시다
어떤 것들이 이루어졌을까요?
이게 제가 던지고 싶은 질문입니다
여기 순환신경망을 사용한 논문이 있습니다
이것을 다 읽지는 않을 거예요
순환신경망을 이용하여 신약개발을 위한
분자 라이브러리를 생성하는군요
그들은 이 문제를 
분류 문제로 다뤘습니다
데이터베이스의 약들이 
특정 질병에 효과가 있었는 지, 없었는지
분류한 거죠
이 문제를 분류하는
방법은 다양합니다
지도형 문제가 될 수도 있고
비지도형 문제가 될 수도 있고
생성 문제가 될 수도 있고
판별 문제가 될 수도 있죠
이 경우에는 레이블 데이타를 분류하는
지도형 문제로 본 것입니다
데이터베이스에 특정 약물이
각 질병에 효과가 있는지를 표시해둔거죠
그럼 그걸 학습하고
새로운 약물이 주어졌을 때
목표한 효과가 있을지를
예측할 수 있는 겁니다
거기에 순환신경망을 사용했는데
순환신경망을 사용한 이유는
시퀀스를 예측하는 데
아주 뛰어난 모델이기 때문입니다
약물의 핑거프린트들을 0과 1로
쪼개서 길게 나열하고
어떤 화합물의 시퀀스가 질병 치료에
가장 효과적일지를 예측한 거죠
그걸 한 겁니다
진짜 데모로 들어가기 전에
하나만 더 보여드릴게요
이 연구에서 합성곱신경망을 사용하는데
이미지를 인식하거나 분류하는데 유용합니다
이를 AtomNet이라고 부릅니다
Deep CNN이며 
구조에 기반하여 약의 효과를 예측합니다
그럼 이 문제를 어떻게
이미지 분류 문제로 적용할 수 있을까요?
여기 b를 보시면 이 신경망을 통해
작은 분자들의 효과를 예측했는데요
패턴이 어떻고
분자들이 어떻게 움직이고
어떻게 상호작용하고
이런 특정 약물의 효과를
현미경으로 관측해서
나온 사진을 분류하는 겁니다
분자의 효과가 어떻고 특정 질병과
어떻게 상호작용하는지 알 수 있죠
이 과정을 다른 모든
질병에 대해서도 반복하는 겁니다
그럼 새로운 약물의 사진이 주어져도
그 효과를 예측할 수 있겠죠
그게 이 연구의 내용입니다
입력층과 다중 삼차원 합성곱 신경망,
완전 연결층과
로지스틱 비용층을 사용했죠
합성곱 신경망에서는
아주 기본적인 구성입니다
제 강의 중에서도 합성곱 신경망을
다룬 끝내주는 강의가 있는데요
유튜브에 Convolutional Network
Siraj를 검색하면 가장 처음에 나옵니다
제가 유튜브에서
이 분야는 정복했거든요
다시 적대적 생성 신경망으로 돌아와서
드디어 우리의 데모가 나옵니다
GAN에 대해서도 다룬 적이 있지만
실생활에 적용하는 내용은 아니었어요
GAN은 엄청납니다
2년 전쯤에 제 친구인
굿펠로우가 발병했는데요
두 개의 다른 신경망이
대립하고 있다고 생각하시면 됩니다
하나는 판별자
하나는 생성자입니다
생생자부터 봅시다
생성자는 표본 데이터에 
기반해서 사진을 생성합니다
이 경우에는
약 데이터 샘플이 되겠죠
생성자는 새로운 약을
생성한 후 '여기 있어'라고 말하죠
판별자은 생성자가
출력한 데이터가
데이터베이스로부터 나온
진짜 약인지를 판별합니다
진짜든 가짜든
둘 중 하나입니다
이런 판별 과정을 계속합니다
둘 모두는 경사 하강법에 의해
계속 갱신됩니다
시간에 따른 최적화 전략이죠
신경망에 관한 제 영상을 참고하세요
역전파에 관한
5분짜리 영상도 있습니다
제가 강의에서 말하는 
모든 단어에 대한 컨텐츠가 있습니다
이해가 안 간다면 그냥 Siraj,
그리고 그 주제를 검색하세요
딥러닝에 관해서는 모든 것에 대한
영상을 가지고 있으니까요
태그도 달아놓았으니
쉽게 찾을 수 있을 겁니다
판별자도 학습하고, 생성자도 학습하여
생성자는 더 진짜같은 약을 만들기 위해
판별자은 학습을 통해 진위 여부를
판별하는 데 점점 능숙해지죠
둘 모두 시간이 지날수록 발전합니다
최소극대화와 같죠
좀 더 기술적으로 말하면
내쉬 균형과 같은 원리입니다
GAN에 대한 다른 영상도 있어요
여기서는 깊게 다루지 않겠습니다
좀 더 개괄적으로 설명하는거죠
코드는 마지막에 보겠습니다
중요한 건 신약 개발을 위해
ChemGAN을 적용했다는 것입니다
살짝 헷갈릴 수도 있어요
이 멋진 그림이 이해를 도와줄 겁니다
생성자가 랜덤 노이즈를 이용하여
출력 데이터를 생성합니다
물론 처음에는 아무 의미도
없는 것처럼 보일 겁니다
하지만 두 망 모두 
역전파를 통해 갱신되기 때문에
생성자를 갱신하는 데 사용된 경사가
판별자를 갱신하는 데 똑같이 사용됩니다
그래서 랜덤 노이즈를 거치는 층들은
입력 데이터에 특정 행렬 연산을 가하고
이를 통해 출력 데이터는
점점 실제 데이터와 비슷해집니다
판별자에 대해서도
같은 원리가 적용되죠
GAN은 다양한 분야에서 쓰여왔습니다
진짜처럼 보이는 얼굴 사진을 만들거나
음악을 만드는 데 사용되거나
다양한 종류의 데이터를 만들어왔죠
그럼 분자는 어떨까요? 약은요?
신약 개발에 GAN을 쓸 수 있을까요?
이 경우에 사용 가능한 
한 종류의 GAN이 있습니다
이 연구에서 사용한
적대적 오토인코더입니다
이 모델은 잠재 분포로부터 
객체를 생성하는 법을 학습합니다
오토인코더는 사진을 입력하면
그 사진을 똑같이 출력합니다
대체 이게 무슨 의미가 있을까요?
중요한 것은 출력 데이터가
학습된 잠재 표상이라는 것입니다
입력과 같은 사진이지만
압축된 형태이죠
연구에서는 이 압축된 공간에서
분자를 생성했습니다
이와 같이 말이죠
즉 입력의 특징을 추출해서
잠재 표상을 생성하고
뒤의 층들이 이를 원래대로
되돌릴 수 있도록 하는 것입니다
오토인코더를 학습시켜
필요한 특징을 가진 분자 집합인 핑거프린트를 만들고
이 특징들은 숫자로 변환되어
일종의 행렬 곱셈 연산을 거칩니다
그럼 결국에는 진짜같은
약을 만들 수 있습니다
실제로는 가짜지만요
그리고 이는 한 번도 시도된 적 없는
새로운 약물입니다
그럼 이렇게 조합된 약을
임상 시험에 사용할 수 있죠
그럼 사람들이 사용할 수 있고
아마 효과가 있겠죠
이는 신약 개발의 첫 두 과정을 
몇 제곱이나 빠르게 만들어줍니다
딥러닝 커뮤니티에서는
이에 주목했습니다
아, 데이터베이스를 살펴보면
생성된 분자와 가장 비슷한 특성을 가진
분자를 찾아낼 수 있습니다
제가 말을 안 했었네요
요슈아 벤지오와 얀 르쿤은
딥러닝의 대부와 같은 사람들인데
이 연구를 아주 좋아했습니다
그런데 가장 흥미로운 건 이 모델이
잘 작동하지 않았다는 겁니다
몇 가지 튜닝이 필요했거든요
제가 하고 싶은 말은
이 분야에 기회가 아주 많다는 겁니다
자 다시 ChemGAN으로 돌아와서
여기를 보시면
모델 폴더 안에
ogan.py라는 파일이 있습니다
그들의 모델 중 하나가 있군요
다양한 모델이 있지만 몇 개만 봅시다
생성자를 위한 하이퍼파라미터가 있고
많은 은닉층이 있고
구별자를 위한
하이퍼파라미터가 있네요
여러분은 이 모델들을 모두
깃허브에서 다운받을 수 있습니다
Readme에서 설치 및 
실행 방법을 확인할 수 있어요
GPU가 없어서 
여러분의 기기에서 실행할 수 없다면
Floyd hub라는 
클라우드 서비스를 사용할 수 있습니다
아주 좋아요
AWS 상부에 있는 층인데
복잡한 부분들을 많이 없애서
여러분도 아주 쉽게 쓸 수 있을 겁니다
광고 아닙니다 정말 좋아서 말씀드려요
딥러닝계의 헤로쿠인 셈이죠
좋은 광고 문구네요
여기서 중요한 점은
둘 다 신경망이라는 겁니다
케라스나 텐서플로우 무엇으로 만들든
핵심은 같습니다
생성자와 판별자 둘 다를
동시에 훈련시키는 것이죠
여기서는 텐서플로우를 사용했는데
먼저 판별자를 정의하고
270 행에서 생성자가 만든
샘플 데이터로 판별자를 학습시킵니다
샘플 데이터들을 먹이는 거죠
그리고 두개의 손실 함수가 존재합니다
각각 생성자과 판별자를 위한 거죠
두 함수 모두 
시간이 지남에 따라 점차 학습됩니다
모델의 학습이 끝나면
이진 파일로 디스크에 저장되어
사용할 수 있게 되죠
이 모델은 텐서플로우를 사용했으니까
클라우드에서 텐서플로우를 사용하는 도구
Tensorflow serving을 쓰도록 하죠
텐서플로우를 사용하는 좋은 방법이고
tensorflow.js도 아주 간단합니다
파이썬에서 학습된 모델도 올릴 수 있죠
대단합니다
이에 관한 강의도 있으니 확인해보세요
이 강의를 볼 때쯤이면 있을 겁니다
모든 과정이 배움의 연속이죠
이 분야에는
무한한 가능성이 있습니다
이 강의가 도움이 되었기를 바라며
더 많은 강의를 원한다면 구독해주세요
저는 이만 텐서플로우를 쓰러 가야겠어요
시청해주셔서 감사합니다
