딥 러닝 - AI 학 개론 (초보 개발자를 위한 정리)

최근 핫한 AI 에 대해서 강의를 하기 위해서 작성한 노트 정리입니다. 실제로 반응도 나쁘지 않았습니다. 개발자 대상이기 때문에 최소한의 수학을 알면 좋을 것 같습니다. 이후에 뉴럴 네트워크쪽까지 다룰 예정이기 때문에 거의 필수 입니다. 바로 텐서플로우 이용법으로 시작해도 좋지만 기본 원리를 파악한 상태에서 사용하는 것이 더 효율적입니다. 



회사 CTO 로서 팀원들에게 최근 가장 핫한 딥 러닝 관련 공부를 시키기 위해서 작성했습니다. 2018 최고의 핫트렌드로 예약 되어 있습니다. 최근 Computer Science 이슈의 블랙홀. 당연히 개발자들은 궁금해 합니다. 그래서 따로 설명을 잘해 주려고 정리했습니다. 



최근 가장 핫한 분야입니다. 너도 나도 관심을 가지고 여기 저기서 이야기를 하는 분야이기도 합니다. 저는 이 분야에 관심이 아주 많았습니다. 실제로 졸업 논문도 이 분야로 썼고 관심은 작년부터 가지고 있었지만 바로 적용을 시도 못했습니다. 왜냐하면 생각보다 어렵습니다. -ㅅ- 어떤 말을 하는지는 알겠지만 이걸 어떻게 해야 하지? 라는 고민이 많았습니다. 그래서 여기 저기 공부도 하고 자료도 모으면서 이 정도면 충분히 사용할 만하고 팀원들에게 설명 할 만 하다고 여겨서 이 자료를 작성했습니다. 


이 AI 분야는 비단 최근 핫한 분야로서만 아니라 앞으로 몇 년간 IT 계를 먹여 살릴 화두라고도 생각합니다. 왜 그리 생각하는지 조금 정리해 보겠습니다. 



IT 계에서 많은 변혁을 일으킨 첫 번째 플랫폼(이런 의미는 아니지만 이렇게 부르기로 하겠습니다)이라고 생각하고 있습니다. 이 PC 의 출현으로 반복적인 작업들이 엄청나게 줄어 들었습니다. 엑셀이나 워드 같은 소프트웨어가 사무직들의 기본 소양이 되버렸지요. 



인터넷은 PC 가 일으킨 혁신을 확대를 했습니다. 글로벌 시대를 가능하게 했으며 수 많은 일자리를 없앤 주범입니다. 중간 관리자를 없앴으며 조직의 형태가 애자일 하게 만들었습니다. 그 외의 데이터의 흐름으로 보자면 PC 에 갇혀있던 데이터가 중앙집중 형식으로 모아서 처리하게 되는 시대가 열렸습니다. 그리고 웹 기술을 만나서 정말 다양한 혁신이 이루어 졌습니다. 



가장 최근에 이루어진 혁신입니다. 여러분이 살고 있는 요즘 시대를 일구어낸 혁신입니다. 데이터의 흐름으로 보면 탈중앙화(decentralization)가 이루어 졌습니다. 데이터가 중앙에서도 모이지만 기본적으로 모바일을 바탕으로 각각의 디바이스에서도 연산이 이루어지고 서로 기기간의 상호작용도 중요해졌습니다. 이 시절의 키워드는 Connected  나 IOT 그리고 Big Data 등이라고 할 수 있습니다. 



이게 사실 저의 고민이였습니다. 모바일 다음 IT 쪽의 주요 관심사 또는 플랫폼이 무엇일까? 쉽게 말하면 '개발자들은 어떤 분야로 돈을 벌 것인가?' 모바일 시대가 2007년 정도부터 됐다고 한다면 대략 10년이 지난 요즘 다음 플랫폼이 무엇이 될까? 고민을 많이 했습니다. VR(virtual reality) 이 될 것인지 AR (augmented reality) 가 될 것인지? AI 가 될 것인지? 그 중 진입 장벽이 제일 높은 분야가 AI 라고 판단했습니다. 개발자들도 쉽게 진입 못하는 분야라면 어렵다고는 하지만 개발자들이 익혀서 먹고 살만한 환경을 만들어 갈 수 있겠다. 그래서 열심히 연구하고 개발하면 향후 10년도 충분히 먹고 살 수 있지 않을까? 라고 판단 했습니다.



AI 라는 것은 하루 아침에 생긴 개념은 아닙니다. 최근 유명세를 얻고 있는 딥 러닝의 기본이 되는 뉴럴 네트워크도 1960 년대부터 있던 개념이라고 합니다. 

AI 라는 큰 범주 안에, 기계학습 (Machine Learning)이 들어 있고, 기계 학습중에서 '뉴럴 네트워크(neural network)'를 깊고(deep), 넓게(wide) 연결해서 쓰는 형식을 딥 러닝(deep learning) 이라고 합니다.



스팸 필터(Spam Filter)를 예로 들어볼까요? 일반적인 AI 즉 기계 학습을 쓰지 않고 스팸 필터를 만든다면 규칙(rule)을 이용하는 방식으로 만듭니다. 특정 단어가 반복해서 나온다던지 어떤 형태를 보이면 이것은 스팸이다 아니다. 와 같은 식으로 규정합니다. 

기계 학습은 형태가 다릅니다. 데이타를 충분히 마련해서 어떤 형태의 메일은 '스팸'이다. 그리고 어떤 형태의 메일은 '스팸이 아니다' 와 같은 식으로 계속해서 '훈련'(train) 시키고 나중에 메일이 스팸인지 아닌지 물어보는(test) 방식입니다. 

그리고 뉴럴 네트워크를 이용해서 각각의 레이어를 깊고 넓게 연결하는 형태의 기계 학습이 딥 러닝 입니다.



선형 회귀(Linear Regression)입니다. 처음이라 '선형 회귀'라고 말했지만 거의 영어로 말을 합니다. 이 리니어-또는 라이니어- 리그레션 (Linear Regression) 은 정말 중요합니다. 모든 기계학습의 원리를 설명하기에 가장 좋고 또 다른 알고리즘들은 이 알고리즘에서 파생되는 것들입니다. 따라서 이 '선형 회귀'의 원리와 목적 방식들을 이해 하면 추후에 다른 리그레션(regression)들을 쉽게 이해할 수가 있고, 더 나아가 딥 러닝까지도 이해하는데 편합니다.



리니어 레그레션 이나 다른 기계학습의 기초적인 목적은 주어진 데이타가 있을 때 특정한 값을 예측하는 방법에 관한 것입니다. 일반적인 글로는 이해가 잘 안갈 수가 있기 때문에 예를 들어 보겠습니다.'X = 1  일때 Y = 1 이고, X = 2 일 때 Y = 2 이고, X = 3 일 때 Y = 3 이라고 하자, 그렇다면 X = 4 일때는 얼마 인가?' 라는 질문에 대답을 하자면 사람들은 보통 Y = 4 겠네? 라고 주어진 데이타를 이용해서 유추할 수 있을 것입니다. 이 유추는 사람이기 때문에 가능하며 기계는 이러한 유추 능력이 없습니다. 



그렇다면 기계는 어떻게 유추하게 만들까요? 이렇게 유추하게 만드는 것이 기계 학습의 방법이자 원리입니다. 그리고 기계이기 때문에 '수학적인 방법'으로 유추하는 과정을 기계에게 알려줘야 하는것이지요. 



그래서 매번 AI 관련 이야기 하면 이 식부터 나오는 것입니다. 주어진 데이타셋 (X,Y) 을 잘 만족시키는 W 랑 B 가 있다고 가정하고, 적절한 W 와 B 를 찾아낸다면 새롭게 주어진 X 에 대한 값 Y 를 알아낼 수 있다는 것입니다. 



그렇기 때문에 기계 학습은 일정한 패턴을 보입니다. 이것은 모든 종류의 리그레션(regression) 과 딥 러닝까지 동일합니다. 그 각각은 목적에 따라 W,B 를 알아내기 위한 가정(hypothesis)과 그 가정(함수)에 X 를 대입했을 때 얻어내는 hypothesis(X) 와 실제 Y 값과의 격차를 의미하는 cost/loss 함수를 정하고 그리고 최적의(더 나은) W,B 를 알아내기 위한 방법에 대한 경사하강(gradient descent)을 설정하고 이렇게 정해진 수식들에 반복적으로 테스트 데이터를 입력해서 교육(train) 시킵니다. 그래서 충분히 교육시킨 알고리즘이 교육이 잘 됐는지 확인하는(test) 작업입니다. 



가설 또는 가정 함수 입니다. X = [1, 2, 3] 일 때 Y = [1, 2, 3] 이 나오는 함수를 H(X) = WX + B 라고 가정하는 것입니다. 그리고 W,B 를 랜덤하게 정하자는 것입니다. 가령 예를 들어서 W=2, B=0 이라고 한다면 H = [2, 4, 6] 이겠죠 



코스트 또는 로스 함수입니다. 가정 함수를 통해서 나온 값과 (W, B 가 정해져야 하겠죠?) 주어진 W,B 를 적용한 H(X) 값과 주어진 데이터 Y 값과의 차이를 제곱해서 평균한 값(유클리디안 거리 계산법) 이 코스트 값입니다. 



코스트 함수는 리니어 리그레션의 경우에는 주어진 X, Y 데이터셋을 기반으로 볼 때 대략 W의 제곱에 관한 그래프로 표현될 꺼라는 것을 짐작할 수가 있습니다. 그래서 각각의 W,B 에 대해서 가정 함수의 값을 표현해서 cost 값을 계산해 보자면 W=2 일때 14, W=1.5 일때 1.166 , W=1 일때 0 이라는 것을 알 수가 있습니다. 



그래서 코스트 함수는 계산을 쉽게 하기 위해서 B=0 이라고 가정을 해서 표현을 하자면 2차원 그래프의 형태를 그릴 수가 있습니다. 그래프 상에서 Cost(W) 값이 최소가 되는 지점은 W=1 이 되는 지점입니다. 



코스트 값이 최소가 되는 W 를 찾아 나가는 과정이 경사하강(gradient descent)입니다. 주어진 예를 보자면 처음 랜덤으로 W=2 로 가정하고 시작하면 W=1.5 W=1 로 줄어가는 과정이 되겠습니다. 이 과정을 수식으로 표현해야 합니다. 그래야 기계가 알아 먹기 때문입니다. 



이를 코스트 함수의 그래프와 합쳐서 보자면 이렇습니다. 랜덤으로 정해진 W=2 인 점부터 W=1 인 점으로 변화시키는 과정입니다. 이 변화시키는 방법이 바로 경사 하강입니다. 



경사하강의 수식입니다. 지금 W 에서 다음번의 W 를 찾는 방법에 대한 수식입니다. 다음 W(n 번째) 는 지금 W (n-1 번째) 에서 그 시점(n-1 번째)에서의 편미분값을 러닝 레이트(람다)값을 곱한 값을 뺀 것입니다. 이게 수식으로만 이야기 하면 잘 이해를 못하시더군요. 



조금 쉽게 설명을 하기 위해서 만들어 본 자료입니다. 러닝 레이트(learning rate)가 0.05 라고 가정을 한다면 경사 하강은 랜덤으로 W=2 라고(시작점) 하면 그 시점에서 편미분 값이 대략 10이라고 한다면, 다음 W 는 2 - 0.05 * 10 = 1.5 입니다. 그러면 현재 W 는 1.5 가 됐다고 하면 다음 W 는 1.5 - 0.05 * 6 = 1.2 가 됩니다. 경사하강은 이런식으로 반복적으로 다음 W 를 찾아 나가는 과정입니다. 



핵심이 되는 가정(Hypothesis) 과 코스트(cost/loss) 그리고 경사하강(gradient descent) 가 정해지면 주어진 테스트 데이터셋을 이용해서 반복적으로 최적의 W, B 를 찾아내는 과정이 교육(train) 입니다. 이렇게해서 최적의 W 를 찾아냈는지 알아내기 위해서 새로운 X,Y 쌍이 맞는지 확인해 보는 과정이 테스트(Test) 입니다. 


여기까지가  AI 의 개론과 선형회귀에 대한 원리 설명입니다. 이 후로는 Logistic Regression, Softmax Regression, Deep Learning 을 위한 원리 설명이 있을 예정입니다. (열심히 자료 만드는 중) 애초에 개발자들이 범람하는 AI 자료에 겁먹지 말고 원리를 파악해서 실전에 활용할 수 있기를 바라는 마음으로 쉽게 원리를 이해시키고자 하는 목적으로 만들어진 자료입니다. 바로 실전에 들어가는 것도 나쁘지 않지만 원리를 파악해서 실전에 들어가는 것이 더 잘 이해하고 혹시나 설명이 필요한 사람한테 쉽게 설명해 줄 수 있기를 바랍니다. 


이 블로그로 충분하지만 원본 KeyNote 를 원하시면 댓글 달아주시기 바랍니다.