Machine Learning 정리
이 문서는 Andrew Ng 교수의 Coursera 강의 Machine Learning에서 배운 내용을 정리한 문서이다.
작성: 김지훈 (jihuun.k@gmail.com)
들어가면서
인공지능 담론은 분야를 막론하고 화제이다. 심지어 미술에서도 언급된다. 최근에 서울 국립현대 미술관에 불온한 데이터라는 전시가 있었다. 그 중 한 작품은 머신러닝으로 학습한 알고리즘이 그렸다. 과거 인간의 회화 형태를 학습해서 기존에 없었던 새로운 스타일의 회화를 그린 작품이었다. 또 한편 사회적으로는 인공지능이 인류의 일자리를 빼앗을 것이다라는 담론등 미디어에는 온갖 공포가 가득하기도 하다. 이미 우리의 모든 삶에 깊숙히 침투해버린 인공지능 이슈를 어떻게 판단 해야할까? 잘 모르는 대상은 왜곡되기 마련이다. 그래서 무분별한 공포가 만연해있다. 그렇기 때문에 더욱 머신러닝이 어떤 학문인지 직접 확인해보고 싶었다. 인공지능은 정말 인류의 모든 일자리를 빼앗을까? SF영화 처럼 먼 미래에 인공지능이 인간을 제거하려고 할까? 지금 까지 내가 내린 결론은 전혀 그렇지 않다. 사람들은 과거의 기술은 과소평가하면서 현재의 기술은 과대평가하는 경향이 있다. 머신러닝은 분명 유용한 기술이긴 하지만 인류를 위협할 수 있는 종류의 기술이라는 생각은 들지 않는다. 한스 로슬링의 저서 "팩트풀니스"에 따르면 인간 집단에겐 부정본능이 있어서 어떤 잘 모르는 대상이나 담론을 더욱 부정적으로 보는 시각이 있다고 한다. 또한 생물학적 생존을 위해 진화한 공포본능은 실제 위협과 과장된 위협을 잘 구분하지 못하게 한다. 내가 이 강좌를 통해 머신러닝을 공부하게 된 계기는 사실 머신러닝을 기술 개발 업무에 이용하기 위함은 아니었다. 인공지능 담론에 대처할 수 있는 나만의 시각을 갖기 위해서 였다. 적어도 머신러닝이 뭔지라도 알고 살아야겠다는 생각에 공부를 시작했다. 나는 머신러닝을 단순히 교양수준의 지식, 순수하게 지적 호기심을 충족시켜줄 대상으로 접근했다. 기술의 관점보다는 인문학의 관점으로 이해하려고 노력했다. 우리는 앞으로 다가올 인공지능 시대에 어떻게 살아야할지 궁금하다. 관련 주제로 수많은 서적과 Article이 존재하지만 저자 마다 그 생각은 천차만별이다. 그러한 책들을 열심히 읽어서 나만의 답을 찾아보는것도 좋겠지만, 그냥 머신러닝 강의를 한편 수강 해보는것 만큼 확실한 방법도 없다고 생각한다.
머신 러닝은 인공-지능이 아니다.
프로그래밍으로써 머신러닝
머신러닝이 인공지능이라고 불리는게 머신러닝의 본질을 흐리게 한다고 생각한다. 머신러닝은 공상과학이 말하는 인공지능과는 다소 차이가 있다. 머신러닝은 인공적 "지능"이라기 보다는 수학,통계이다. 그리고 컴퓨터 공학적 관점에서는 데이터를 기반으로 하는 프로그래밍이라고도 볼 수 있다. 머신러닝은 기존 data를 잘 표현하는 함수를 찾고 새로운 문제를 예측하는데 쓰는 방법론이다. 이것은 일반적인 프로그램의 구조인 분기문(if/else)과 반복을(for) 사용하여 프로그램을 작성하던 Rulebased Programming 과는 또 다른 형태의 프로그래밍 기법이며 프로그래밍의 또다른 패러다임이다.(사실 새로운 패러다임이라고 하기에는 머신러닝은 꽤나 오래된 학문이기도 하다.) 어떤 문제를 해결할때 기존처럼 코딩해서도 해결할 수 있지만 머신러닝을 이용해서도 해결할 수도 있는 것이다. 지금까지 밝혀진 이 세계는 두가지 종류의 문제를 가지고 있다. 코딩으로 짠 알고리즘이 더 잘 해결하는 문제와 data를 기반으로 학습된 알고리즘이 더 잘해결하는 문제.
머신러닝을 데이터 과학자나 엔지니어만 사용한다면 과학기술 문명의 발전속도는 그리 빠르지 못할것이다. 모든 사람들이 필요하다면 각 분야에서 사용할 수 있어야 한다. 하지만 일반 사람들이 익히기에는 다소어려워 보일수는 있다. 다양한 수식과 소스코드를 볼수 있기 때문이다. 그렇지만 머신러닝이 수학적,공학적 전문지식이 있는 사람들만 다룰 수 있는 도구는 아니다. 양자역학 같이 이해하기 어려운 학문도 아니다. 학습자 개개인의 배경에따라 기호와 개념에 익숙해지는 시간의 차이만 있을뿐, 누구나 배우고 익힐 수 있는 학문이라고 생각한다. 머신러닝의 본질은 "문제 해결의 또다른 방식" 이라는데에 있다. 이미 프로그래밍은 다양한 인문/자연/사회 과학 또는 더 넓은 분야에서 문제해결 도구로 활발히 사용되고 있고 앞으로 더욱 그래야만 한다. 생물학, 천문학, 인류학, 사회과학, 심리학, 철학, 사학, 미학 등등. 각 분야마다 해결하고자 하는 고유의 문제들이 있는데 지금까지 기존의 코딩으로 이것을 해결했다면 앞으로는 머신러닝으로도 접근해볼수 있는 것이다. 머신러닝이 기존의 프로그래밍 기법을 대체하는것이 아니다. 각자 해결하기 좋은 고유의 영역이 있는것이다.
Andrew ng 교수가 한국에서 인터뷰했던 기사2에서 그는 이렇게 말했다. 한 조직(회사)에 추가로 AI팀하나를 만들지말고 이미 존재하는 각 팀에서 AI를 활용하라고. 이 말이 위에서 말한내용과 같은 맥락인 것이다. 나는 Linux Kernel 개발자다. 그렇다면 머신러닝을 리눅스 커널에 적용 해볼수도 있지 않을까? 리눅스 커널같은 운영체제 내에서도 머신러닝을 활용해 성능향상이나 문제를 해결할수 있는 것들이 많이 있을 것 같다. 결국 커널에서 발견되는 무수히 많은 문제들은 문제의 특성에 따라 코딩을 통해 해결할 수 도 있고, 머신러닝을 이용해서 해결할 수도 있을 것이다.3
머신러닝에 있어서 AI라는 용어가 더 부각이 되면, AI가 인류의 지능을 뛰어넘어 인류의 일자리를 다 빼앗고 인류를 착취한다는 식의 공상과학만 쓸 수 밖에 없다. 사람들은 이미 AI라는 용어에 선입견을 가지고 있기 때문이다. 나도 처음에 그랬지만 머신러닝을 조금 공부해보니 내가 영화에서 보던 AI와는 너무 달라서 놀랐다. 머신러닝이 공상과학의 스스로 생각하는 초지능이 되는것은 불가능한것 같다. 기계 학습 Machine Learning의 의미가 기계가 스스로 학습해서 인간보다 더 똑똑해진다는 뜻이 절대 아니다. 심지어 머신러닝 학습 알고리즘은 인간들이 만들어낸 data기반으로 학습하는 것이기 때문에 그것을 초월하는 것이 물리적으로 가능하지도 않다. 머신러닝은 그저 문제 해결에 사용할 수 있는 프로그래밍의 새로운 패러다임일 뿐이다. 그리고 전문가만 사용하는게 아니라 일반인들이 각 분야에 적용해야 그 가치를 발휘할 수 있다고 생각한다.
2 https://www.mk.co.kr/news/business/view/2018/07/456717/
3 아직 활발하지는 않지만 점점 시도되고 있는듯 하다. (다시보니 2005년 논문..)
Applying Machine Learning Techniques to Improve Linux Process Scheduling
Abstract를 읽어보니 CPU time-slice utilization 를 학습하기 위해 Decision Tree algorithm 을 사용했다. ML tool은 Weka 를 사용했다.
헬로 데이터 과학
데이터 과학으로써 머신러닝
작년에 키르기스탄을 여행할 때였다. 여행하며 일하는 일명 디지털노마드인 미국인 케빈을 만났다. 그는 스타트업을 운영하고 있었고 그들의 제품은 놀랍게도 "비포장 도로의 데이터" 였다. 그 데이터를 적절한 기관이나 회사에 판매하는 것이다. 흥미롭게도 당시에 이케아가 그들의 제품에 관심이 있었는데, 이유는 안전한 운송을 위한 도로 데이터가 필요했기 때문이다. 그래서 그는 비포장도로가 많은 나라들 방문하여 데이터를 수집하고 여행하고 있었던 것이다! 그 뒤 케냐의 나이로비에서 케빈의 동료 그렉을 만났다. 그렉은 데이터 사이언티스트이다. 당시 "제품으로서의 데이터"는 내게 생소했으므로 이들에게 매우 깊은 감명을 받았다. 그리고 깨달았다. 이제는 물리적 제품이나 서비스가 중요한것이 아니라, 거기서 얻을 수 있는 데이터가 정말 중요한 것이라는것을! 그것은 지금 까지 내가 제품을 대했던, 그리고 제품을 통해 얻으려고 했던 고정관념이 산산조각나는 경험이었다.
이런 저런 다양한 분야에 관심이 많다보니, 요즘 또 한가지 깨달은 것이있다. 제품뿐 만아니라 모든 학문도 데이터 과학이라는 것이다. 다시말해 데이터가 새로운 과학이다. 적어도 인문과학, 사회과학, 자연과학 분야에 존재하는 학문들, 이를테면 인류학, 진화론, 도시공학, 인구학, 역사학, 지리학,.... 예외가 떠오르지 않을 정도로 모든분야에는 아직도 수많은 데이터가 가공되지 않은채 허공에 부유하고 있다. 결국 그것들로 부터 어떻게 데이터를 추출하고 가공하고 유의미한 결과를 도출할 수 있는지가 관건이다. 다시말하면 그 수많은 데이터들 속에 아직 발견되지 않은 보석같은 '지식'들이 인류를 기다리고 있는것이다. 그것이 새로운 시대에 인류가 지식을 만들어가는 방법이다.
이런 거창한것을 떠나서도, 우리 개인 또한 데이터를 얼마나 많이 생성하고 있는가? 이것들을 유용한 도구로 활용할 수 있는 능력은 이 새로운 시대에서 생존하는데 대단히 유리한 기술임이 분명하다. 일반 사람들이 생활속에서 데이터를 어떻게 활용할 수 있는지 알려주는 책인 "헬로우 데이터 과학"에서는 '데이터를 삶과 업무에 활용하고자 하는 개인'이 알아야할 데이터 과학은 '데이터 과학자'로서 알아야할 데이터 과학과는 엄연히 다르다고 말한다. 머신러닝은 그런 개인이 어떻게 데이터를 가공하고 유용한 정보를 추출하고 도구화하여 적절한 상황에 활용할 수 있을지 알려준다. 충분한 데이터를 소유하고 있고 그것을 머신러닝같은 도구를 통해 유용한 정보를 추출할 수 있다면 분명 급격하게 변화하는 동시대를 살아갈때에 훌륭한 길라잡이가 될수 있지 않을까?
history | note |
---|---|
19.08 | Publish with gitbook |
18.11 | Draft |