본문 바로가기

딥러닝/딥러닝북 뜯어보기

01. 딥러닝이란?(Introduction)

01. 딥러닝이란?(Introduction)

 


  

MIT Press2016. 11. 18. - 800페이지
※ 이 글은 http://www.deeplearningbook.org/ 을 보고 개인적인 관점을 토대로 요약정리, 추가한 자료입니다.
   틀리거나 잘못된 점이 있다면 댓글로 남겨주시면 감사하겠습니다.



이번 글에서는 1장 내용 중, AI의 Knowledge based approach에서 부터 현재 Deep learning까지 어떠한 이유에서 발전되어 왔는지를 알아보겠습니다. 기타 책의 내용인 역사적인 부분은 책의 본문을 참고하시기 바랍니다.


01.1 - Knowledge base approach

인공지능(이하 AI)는  고대 그리스시대부터 발명가들이 생각하는 기계를 만들려고 하는 꿈에서 시작되었습니다. 중간 과정은 어찌되었든 넘어가고, 20세기에 여러번의 AI의 겨울이 지나고, 1997년 IBM의 Deep Blue가 체스 세계챔피언을 이기는 순간부터 시작하겠습니다.


위의 사진을 보면 당대 세계 챔피언이였던 Garry Kasparov와 IBM의 Deep Blue가 체스를 두고 있는 것을 볼 수 있습니다. 1996년에 러시아 체스 천재 Kasparov에게 3승 2무 1패로 이미 한번 졌지만, 1년만에 기량을 올려 1997년에는 다시 AI가 승리를 거두게 됩니다. 이때 당시의 AI에서는 모든 관련된 정해진 룰(formal rule)을 일정한 형식언어(formal-languages)로 모두 하드코딩을 해서 이 안에서 논리적인 추론규칙을 통해서 추론을 진행하였습니다. 이렇게 일정한 룰을 미리 만들어놓고 그것을 프로그래밍하고 이 테두리 안에서 컴퓨터가 추론하는 접근을 Knowledge base approach 라고 합니다. 이 체스왕 Deep Blue를 보면, 체스의 경우 64개의 칸이 있고, 32개의 말이 있습니다. 이것은 바둑에 비하면 경우의 수가 훨씬 적고 룰 또한 바둑에 비하면 훨씬 제한적이기 때문에 가능했던 일입니다.


이러한 Knowledge base approach의 문제점은 무엇일까요?

쉽게 생각해볼수 있습니다. 애초에 AI란 것의 목표는 바로 사람처럼 생각하는 컴퓨터 입니다. 그런데 사람의 생각은 간단명료한 룰로 표현이 가능 할까요? 당연히 불가능 합니다. 즉 informal한 일상생활, 사람의 지식을 컴퓨터가 어떻게 알고 어떻게 사용하게 할수 있을까요?


01.2 - Machine learning

위에서 언급했던 Knowledge base approach에서 informal한 규칙을 사람이 직접 써서 넣어주는 것이 너무나도 힘들었기 때문에,  연구진들은 AI System 자체가 어떤 raw data에서 패턴을 추출해서 그것을 스스로 학습 하기를 원했습니다. 이러한 개념에서 탄생한 것이 바로 Machine learning 입니다. 결과적으로 보면 Machine learning으로 인해 컴퓨터가 어느정도 실제 세상의 정보에 대해서 다룰 수 있는 정도까지 도달했습니다. 대표적인 알고리즘은 logistic regression, naive bayes를 들어볼 수 있겠네요.


위의 사진은 logistic regression의 가장 기초적인 형태입니다.  3차원을 시각화가 잘된 곳이 있어서 퍼왔습니다. 참조링크

실제 이런 logistic regression의 경우 진짜로 공부할 Deep learning의 기초가 되는 방법이기 때문에 다음에 차례가 오면 자세히 설명하도록 하겠습니다. 이번 글에서는 이런게 있다 정도만 알고 넘어가면 좋을 것 같네요.



machine learning에서는 어떤 현상에 대해서 관측되어진 각각의 정보들을 Feature라고 합니다.  예를 하나 들어보겠습니다. 부동산 시세를 예측하는 AI 모델을 만들고 싶습니다. 그렇다면 feature들은 무엇이 될까요? 집의크기, 집의 건축년도, 옆집가격 뭐 이런것들을 각각의 feature들로 사용 할 수가 있겟죠.  입력을 넣었으면 이제 이 부동산 가격예측에 맞는 머신러닝의 알고리즘을 선택합니다. 간단하게 Linear regression을 선택했다고 합시다. 그러면 이 AI모델에서는 마지막에 AI가 예상하는 가격을 출력해 줄 것입니다. 자세한 학습과정은 생략하였지만, 이 정도면 뭔가 뭐든지 만들수 있을 것 같은 생각이 듭니다. 하지만 실제로는 그렇지 않습니다.



이 완벽할 것만 같았던 Machine learning의 성능은 주어진 데이터의 표현(Representation)에 강하게 의존적인 현상이 발생하게 됩니다. 이러한 데이터 표현의 의존도는 컴퓨터과학이나, 기타 일상생활에서도 아주 흔한 일입니다. 예를 들어서 어떤 데이터베이스에서 특정한 값을 찾고 싶은데, 이 데이터베이스가 아주 정렬도 잘되있고 인덱싱까지 완벽하게 되어있다면 이 데이터베이스에서 특정 값을 찾는 성능은 뒤죽박죽 섞여 있는 데이터베이스에 비하여 월등하게 높은 것은 자명한 일입니다. 또 다른 예를 들면 일반적인 사람들은 10진수 계산은 빠르게 할 수 있지만, 16진수, 뭐 극악의 경우 283진수의 수와 같은 경우 단순히 똑같은 수이지만, 표현이 달라져서 사람들은 10진수를 계산하는 것보다 훨씬 느린 속도로 계산 할 수밖에 없습니다.  즉 이것을 다시 machine learning의 사례에 들여다 보면 

위의 그림을 보면 그 사실이 명백해 집니다. 직선으로 분류를 해버리는 알고리즘을 사용한다고 했을때 왼쪽 좌표계가 성능이 좋을까요 아니면 오른쪽 좌표계가 성능이 더좋을까요? 당연히 오른쪽 좌표계를 사용해서 데이터를 표현하는 것이 누가봐도 자명하게 성능이 더 좋게 나올 수 밖에 없을 것 입니다.


AI에서 이러한 데이터의 표현 문제를 해결하기 위해서 많은 시도가 있었지만, 정확하게 어떤 feature들을 뽑아야 하는지에 대해서 알기는 너무나도 힘듭니다. 예를들면 어떤 이미지에서 자동차를 찾는 프로그램을 만든다고 칩시다. 그렇다면 자동차에는 당연히 바퀴가 존재를 하겠지요? 그럼 바퀴를 feature로 사용을 해야되는데 이미지의 픽셀들은 어떻게 feature로 만들어야 할까요? 쉬운 문제는 아니겠죠. 


다시 간단하게 요약을 하자면, Machine learning의 경우 어떤 feature를 이쁘게 넣어주냐에 따라서 프로그램의 성능이 극심하게 갈리게 되는데 이 feature들을 이쁘게 넣어주는 일이 매우 힘들다는 것 이 문제입니다.


01.3 - Representaion learning

앞서 machine learning의 가진 문제를 해결하고자, 머신러닝 처럼 어떤 데이터의 표현에서 출력값을 찾아가는 과정 뿐만 아니라, 이 데이터의 표현 자체도 같이 학습을 시키는 것이 Representaion learning입니다. 즉 기존의 machine learning에서는 이런 feature들을 사람이 직접 만드는 것 자체가 시간도 많이들고, 어렵고, 때론 불가능하기도 하였지만 Representation learning에서는 이것을 컴퓨터에게 위임을 해서 사람의 간섭없이 프로그램이 주어진 data의 적절한 표현을 찾아내는 것입니다.

대표적인 예를 들면 AutoEncoder를 들 수 있습니다. Autoencoder는 주어진 입력 데이터를 다른 표현으로 만들어주는 역할을 하는 encoder와 이 바뀌어진 표현을 다시 원래의 입력데이터의 표현으로 돌려주는 decodr의 조합으로 이루어져 있습니다. 이 Autoencoder는 기존 데이터의 정보를 가능한 많이 보존하고, 새로운 다양한 좋은 특성을 가지는 표현을 찾기위해서 학습을 합니다.

여기서 한가지 체크해야될 것이 있습니다.
AI에서 feature들을 보고 어떤 데이터의 표현이나, 알고리즘에 대해서 설계 할 때, 목표는 무엇일까요?
우리가 관측한 데이터, 즉 가지고 있는 데이터를 충분히 설명해 줄수 있는 factors of variation을 찾아내는 것입니다.
factors는 실제 영향을 미치는 요소? 정도로 볼수 있는데요, 어떤 값들의 곱, 조합 이런 것이 아닌 순수한 요소를 의미합니다.
예를 들어보면, 음성데이터를 분석한다고 하면, 사람의 나이, 성별, 억양 같은 것들이 될 수있겠죠? 물론 아닐 수도 있습니다.

여기서 중요한 점은, 현재 Representation learning에서 우리가 만들고 싶은 사람 수준의 AI를 만드는데 필요한 상당히 고수준, 고 추상적인 feature들을 현재 가지고 있는 데이터에서 뽑아낼 수 있을까요? 아주 어렵겠죠.


01.4 - Deep learning

Representation learning에서 가장 핵심문제인 factors of variation을 찾아내기 어렵다는 점을 해결한 것이 바로 Deep learning입니다.  deep learning에서는 이 복잡한 추상적인 개념들을 간단한 개념들을 조합해서 복잡한 개념으로 만들어나가는 방법으로 이 문제를 해결했습니다. 


위의 사진을 보면 쉽게 이해를 할 수 있을 것 같습니다. 총 4개의 층으로 진행이 되어 지는데, 이전의 관점에서 생각해 보겠습니다. 사람의 얼굴을 인식을 할려고하는데 가지고 있는 데이터는 당연히 사람이 들어있는 어떤 이미지겠죠. 이러한 이미지에서 간단한 알고리즘으로 이 이미지의 픽셀들을 유의미한 데이터로 표현 할 수있을까요? 뭐 컴퓨터비젼 쪽 하신 분은 할수도 있을지 모르겠지만 간단해 보이지는 않습니다.

하지만 deep learning의 관점인, 작은 간단한 개념을 조합을해서 좀더 복잡한 개념을 이해하는 방법으로 접근을 해보겠습니다. 위의 그림대로 입력데이터는 단순한 어떤 픽셀값들을 가지고 있는 이미지 입니다. 이 입력데이터를 통해서 2번째 레이어에서는 edge나 간단한 shape들을 찾아냅니다. 그 다음 3번째 레이어에서는 좀더 복잡한 형태를 인식하고, 그다음 레이어에서는 이 입력들을 통해서 더욱 더 복잡한, 즉 사람의 얼굴을 판별 할 수 있게 됩니다.


대표적인 예로 feedforward deep network 또는 multilayer perceptron(MLP)를 들어볼 수 있습니다. 이제 뒤에서 주주장창 공부할 것이지만 간단하게 살펴보면, 어떤 입력데이터가 들어왔을 때, 어떤 간단한 수학함수를 적용시키고, 이것을 출력으로 내보내게 되면서 입력데이터를 새로운 데이터의 표현으로 바꾸어서 출력해 준다고 생각을 해 볼수 있습니다. 자세한 내용은 본격적으로 deep learning 챕터에 가면 설명하도록 하겠습니다.


중간 정리를 하면 Deep learning의 첫번째 관점으로는 representation learning에서 복잡한 개념의 feature의 factors of variation을 찾을 수 없어서 간단한 연산들을 나누어서 간단한 개념을 조합해서 복합한 개념을 이해한다. 입니다.


하지만 또다른 관점에서 Deep learning을 바라 볼 수 있습니다.

Deep learning은 위에 그림에서 본 것 처럼 계속해서 깊이(레이어)를 증가시킬 수 있습니다. 이렇게 증가시킴으로 써 컴퓨터가 처음 층에서부터 마지막 층까지 순차적으로 학습을 하는데, 한층에서의 출력이 다른 층에서는 입력데이터로 받아들여지게 됩니다.  즉 어떤 층의 입력은 앞의 모든 레이어들의 순차적인 연산들의 결과이고  그것을 통해서 또 다른 결과를 내는 것이기 때문에 강력한 성능을 낼수 있다라는 관점입니다. 

이러한 관점에서 보자면 꼭 각 층의 출력이 입력 데이터를 설명하는 factors of variation일 필요는 없습니다. 이 deep learning 모델이 그 다음 층 어떤 연산을 진행하는데 도움을 주는 역할을 할 수 있기 때문입니다.



01.5 마무리

이번 글에서는 Deep blue에서 시작해서 어떠한 문제점이 있어서 현재의 deep learning까지 발전을 해왔는지 살펴보았습니다.

최근 AI기술이 급격하게 발전이 되어서, 이제, 사람의 얼굴도 생성을 해냅니다. 위의 사진은 Deep learning의 현재기준으로써 핫한 GAN을 이용해서 만든 사람 얼굴입니다.(BEGAN) 참조논문


이것 뿐만이 아니라 현재 deep learning의 가장 핫한 적용분야인 컴퓨터 비전분야에서도 deep learning은 이미 사람이상의 수준을 보이고 있습니다.



마지막으로, 세계적인 머신러닝,딥러닝의 선두주자인 Andrew Ng 교수님께서는 이러한 공부를 하는 것이 슈퍼파워를 가진 것이라고 표현을 하셨습니다. 그만큼 이전과는 다른 컴퓨터과학의 급격한 발전이라고 생각해 볼수 있을 것같습니다.  모두 끝까지 공부해서 딥러닝의 선두주자가 되시길 바랍니다.



※ 정리라고 하지만, 개인적인 주관으로 내용을 스킵한 부분이 많습니다.  제가 보고 있는 http://www.deeplearningbook.org/  에서는 좀더 자세하고, 이것과 더불어 어떠한 환경이 좋아져서 현재 deep learning 열풍이 불수 있게 되었는지 자세한 설명이 되어있으니, 관심있으신 분은 꼭 읽어보기를 권장합니다.