최근 Andrew Ng Standford교수의 Coursera Machine Learning Course를 수강 중이다. 사실 나는 이미 Machine Learning Coursework을 끝마친 상태이기 때문에 굳이 이 Course를 다시 들을 필요는 없긴 하지만 나의 개념을 다시 다잡고 최근 공부에 있어 슬럼프 비슷한게 찾아왔기 때문에 이 강의를 들으면서 나 자신을 조금 자극할 생각으로 수강하고 있다. 수강을 하면서 목표한 바가 있는데
- 최대한 빠른 시간 안에 수강 끝내기
- 수강을 끝내고 어느 정도 section을 묶어서 블로그에 정리하기
- 수강을 다 끝내고 나면 이를 응용한 프로젝트를 만들어보기
이것들을 꼭 달성하는 것이다. 아직까지는 겨우 Week 1의 기본적인 내용들을 끝 마친 상태이기 때문에 별 다른 어려움은 없어보이지만 아무래도 주말에 주로 course를 몰아 들어야하기 때문에 마냥 잘 될 것이라고 기대하는 것에는 조금 무리가 있다는걸 나도 알고 있다. 그래도 열심히 해야지.
이 포스트는 두 번째 목표인 블로그에 정리하기 목적으로 쓰는 포스트이다. Week1은 코스와 머신러닝에 대한 간략한 설명, 그리고 supervise learning을 위한 기본적인 컨셉들 - cost function, gradient descent - 을 주 내용으로 삼고 있다.
이 개념들을 설명하기에 앞서, 과연 머신러닝이란 무엇일까. 단순히 백과사전에 있는 내용이나 인터넷에 있는 내용이 아니라, 내가 생각하는 머신러닝은 무엇일까 먼저 생각해봐야겠다. 일단 머신러닝은 AI쪽에서 맨 처음 나온 개념으로 알고 있다. 처음부터 완벽하고 완성된 알고리즘을 통해 인공지능을 부여하는 것은 사실상 불가능하고, 대신 마치 사람이나 일반적인 지능을 가진 생명체가 그러하듯 기계에도 학습기능을 부여하여 기계가 스스로 알아서 학습하도록하는 개념이 바로 머신러닝이다. 멋지지 않은가. 사실 나는 AI에는 별로 흥미가 없고 지금도 머신러닝을 공부한다고 해서 AI쪽으로 진로를 잡고 싶은 생각은 추호도 없다. 그럼에도 불구하고 내가 머신러닝에 관심을 가지고 있고 계속 공부하는 이유는, 지금의 머신러닝은 단순한 AI가 아니라 (물론 AI가 절대로 단순하지는 않다) 바로 데이터 pattern recognition으로 생각해도 무방하기 때문이다. 다시 말해서 특정 dataset을 계속 학습시켜서 그 데이터에서부터 패턴을 추출하는 것이다. 예를 들어보자. 많은 소비자들이 A라는 상품을 구매하고 나서 B라는 상품을 구매하는 어떤 패턴이 있다고 가정해보자. 하지만 두 개의 상품은 굉장히 연관성도 모호하고 현재 지금 물건을 판매하는 판매상의 입장에서 굉장히 많은 물품이 있어서 모든 물품에 신경을 쓸 수 없는 상황이라 생각해보자. 어디서 많이 본 상황이 아닌가? 바로 인터넷 쇼핑몰이다. 수 많은 웹 로그를 수집하면 이런 소비자들에게 다른 상품을 추천해주고 더 많은 수익을 거둘 수 있는 것이다. 실제로 이런 사례로 아마존이 있다. 자 여기에서 다시 내가 생각하는 머신러닝을 정의해보자.
머신러닝은 그 관계를 알 수 없는 수 많은 데이터들 사이에서 관계를 찾아내주는 마법과 같은 기술이다.
물론 엄밀히 정의하면 위와 같은 말은 틀릴 수 있지만, 내가 생각하기에는 충분히 의미가 있는 말이다. 자 이제 다시 본론으로 넘어가보자. 머신러닝에서는 크게 두 가지 종류가 있다. supervised learning과 unsupervised learning이 그것인데, 사실 더 엄밀히 말하면 더 많은 종류가 있지만 일단 지금은 이것만 알아도 충분하다.
먼저 supervise learning에 대해 설명해보자. supervised learning은 이미 명확하게 답이 정해져 있는 것의 답을 찾는 것이다. 쉽게 생각하면 2차원에 흩뿌려진 점 들을 보고 이 점들이 어떤 함수를 구성하고 있을까를 추측하는 것이다. 예컨데 이 강의에서 예시로 드는 방 평수와 가격 사이의 상관관계를 찾는 방법도 있을 수 있고, 종양의 크기와 그 종양이 악성인지 아닌지의 관계를 찾는 방법도 있을 수 있다. 전자의 방법은 방 평수, 그리고 가격이 전부 continuous한 값을 가진다. 다시 말해서 real value이다. 이런 경우를 regression이라 부른다. 반면 뒤의 경우는 종양은 악성이냐 혹은 그렇지 않느냐 두 가지 경우의 수 밖에 없다. 이런 경우를 classification이라고 부른다.
그러면 unsupervised learning은 무엇일까? 앞서 본 사례들은 그 결과가 정해져있다. 방 평수 그리고 방 가격, 종양의 크기와 악성도 등. 하지만 unsupervised learning은 그 결과가 정해져있지 않다. (정확히 말하면 data가 labeled 되어있지 않은 data이다.) 예를 들어서 특정 데이터들이 흩뿌려져 있고 이 데이터들이 전혀 label되어있지 않을 때 이 데이터들을 clustering하는 것이 대표적인 예이다. supervised learning에 비해서 어렵고 구현하기도 복잡한 편이다.
자 그러면 supervise learning에 대해 조금 더 자세히 알아보자. 아까 예를 들었던 방 평수와 방 가격 사이의 관계도를 다시 생각해보자. 만약 10평일떄 20만원 20평일 때 30만원 30평일 때 40만원이라면 40평 일때의 가격은 어떻게 될까? 아마도 50만원일 가능성이 클 것이다. 이렇게 선형적으로 추론하는 것을 linear regression이라 한다. 그리고 이때 예측 되는 데이터와 결과값 사이의 관계(함수)를 hypothesis라고 부른다. 우리말로 옮기면 가설 정도로 해석이 가능한데, 우리가 올바른 값을 아는 것이 아니라 그 결과를 추론할 수 밖에 없기 떄문에 이런 이름으로 명명했지 않을까 싶다. 방금의 경우는 굉장히 간단하게 그 결과를 예측했지만 조금 모호한 경우는 어떨까? 아마 우리는 regression을 통해 상당히 많은 hypothesis를 얻을 수 있을 것이다. 이 hypothesis 중에서 가장 좋은 녀석은 어떻게 고르지? 그래서 도입되는 개념이 바로 cost function 혹은 loss function이다.
Cost function을 정의함으로써 이 함수가 기존에 주어진 데이터에 대해서 얼마나 정확한지 유추할 수가 있다. 예를 들어서 우리가 예측한 함수가 y = x이고 x,y = 1,2 2,3 4,5라고 생각해보자. 그렇다면 아마 x가 1,2,3일 떄 각각 1 만큼 예측값과 실제 값이 차이가 날 것이다. Cost function은 이 차이값들을 통해 얼마나 이 함수가 원래 개형과 가까운가를 유추한다. 이 강의에서는 그 차이의 제곱꼴을 더한 것의 평균값을 제안하는데, 실제로 무난하게 많이 쓰인다. 또 많이 쓰이는 함수로는 0-1 함수라고 해서, 정확한 값이면 0, 조금이라도 다른 값이라면 1을 return하는 함수를 만들어서 cost를 계산한다.
마지막으로 gradient descent만 설명하면 week 1은 끝난다. Gradient Descent라는 것은 Gradient계산을 통해 함수의 local minimum을 찾아가는 과정이다. 함수가 가장 빠르게 감소하는 방향으로 쭉 따라 내려가다보면 가장 낮은 지점까지 도달하고 그것이 바로 local minimum이다. 산 위에서 가장 빠르게 아래로 내려가는 방향을 따라서 산을 내려가는 것이라고 생각하면 간단하다. 그런데 문제가 하나 있는데, 산을 내려오더라도 우리는 지금 위치에서 가장 빠르게 내려가는 길을 구하는 것이지 전체에서 가장 낮은 지점으로 내려가는 것은 아니기 때문에 항상 전체 함수에서 가장 낮은 값으로 수렴하지는 않는 다는 것이다. 이런! 때문에 초기에 어느 지점에서부터 내려가느냐가 그 결과값에 영향을 크게 미치게 되는 것이다. 머신러닝에서는 상당히 자주 쓰이는 개념이고 이 local minimum problem은 끝까지 성능에 있어서 치명적인 단점이 되는 경우가 많다. 이 강의에서는 최적의 loss function을 찾는 방법으로 이 gradient descent를 소개하는데, 강의에서도 언급되 듯 정말 많은 머신러닝 알고리즘 등에서 gradient descent는 많이 쓰이는 개념이니 어느 정도 개념을 숙지해두는 편이 좋다.
이렇게 첫 주 강의를 정리해보았다. 점점 내용도 많아질테고 지금처럼 텍스트로만 설명하기 점점 힘들어지겠지만 그래도 최대한 노력을 해서 처음 목표한 바를 꼭 이룰 수 있었으면 좋겠다.