토요일, 10월 22, 2016

[독서광] 인공지능, 머신러닝, 딥러닝 입문

지난 번에 마스터 알고리즘을 소개드렸는데, 실제로 머신러닝과 딥러닝에서 사용되는 구체적인 방법과 수식이 빠져있어 아쉬웠을지도 모르겠다. 오늘은 이런 부족함에 목마름을 느낀 독자들을 위해 '인공지능, 머신러닝, 딥러닝 입문'이라는 책을 하나 소개해드리겠다. 제목을 딱 보면 감이 오겠지만, 이 책은 인공지능, 머신러닝, 딥러닝에 입문하려는 개발자를 위한 책이지만 '입문'이라는 단어에 속으면 안 된다. 수학(응?) 기호를 알아야 제대로 읽을 수 있다.

인공지능과 머신러닝과 개요를 다루는 3장까지는 룰루랄라 읽을 수 있지만, 4장 통계와 확률부터는 수식이 대거 등장하면서 본격적인 험로가 펼쳐진다. 분류, 군집, 강화학습에 이어 딥러닝으로 넘어가게 되는데, 인공신경망과 컨볼루션 신경망에 이르면 평상시에 응용선형대수 공부를 열심히 할 걸 그랬어라는 후회감이 밀려올지도 모르겠다.

이 책의 장점은 머신러닝을 배우기 위해 필요한 최소의 지식을 체계적으로 잘 정리해놓은 데 있다. 프로그래밍 언어로 쓰인 코드는 단 한 줄도 없지만, 라이브러리나 프레임워크를 사용하기 위해 필요한 개념과 절차에 대해 차근차근 설명하고 있기 때문에 텐서플로우 책으로 직행하기 앞서 미리 읽어두면 나중에 큰 도움을 받을 수 있을 것이다. 이 책을 읽고 나서 scikit 페이지를 방문해 일반 예제를 보면 갑자기 뭔가를 알고 있는 자신의 모습을 발견할지도 모르겠다.

결론: 수학에 조금 자신이 있는 머신러닝과 딥러닝에 관심이 있는 개발자들에 추천한다. 후다다닥 읽는 대신 차근차근 정독해야 한다.

EOB

토요일, 10월 15, 2016

[B급 프로그래머] 10월 2주 소식 정리

(오늘의 짤방) 중간에 건물 안 보이는 분? (via @Remini_scence)

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 빅데이터/인공지능 소식
  5. 기타 읽을거리

(보너스 짤방) 프로그래머 3 유형 (via @InfoQ)

토요일, 10월 08, 2016

[독서광] 마스터 알고리즘

가을은 독서의 계절이라고 하지만 여전히 더워서 독서량을 늘이지 못하고 있다. 반성하면서 머신러닝 관련 서적 몇 권을 소개드리려 한다. 오늘은 1번 타자인 '마스터 알고리즘'이다.

알파고 사건 이후 요즘 여기저기서 인공지능과 머신러닝이 열풍을 불러일으키고 있다. 며칠 전에 KSC 2016 튜토리얼에 참석했는데, 많은 개발자들이 텐서플로우를 사용한 머신러닝 기법을 열공하는 모습을 보면서 머신러닝이 더 이상 흑마법을 부리는 신기술이 아니라 일반화된 문제 해법의 영역으로 접어들고 있다는 생각이 들었다. 하지만 머신러닝을 제대로 활용하려면 난관이 한두개가 아니다. 가장 먼서 머신러닝에 대한 일반적인 지식을 갖춰야 한다. 다음으로 (프로그램만 잘하면 되므로 불필요하다고 말하는 사람도 있긴 하지만...) 선형대수, 미분, 통계(특히 조건부 확률) 부문에 대한 기초 지식이 필요하다. 그 다음으로 파이썬이나 자바와 같은 프로그래밍 언어 지식이 필요하며, 텐서플로우나 카페와 같은 머신러닝 프레임워크에 대한 지식이 필요하다. 이 모든 조건을 갖췄다고 완성되는 것이 아니다. T_T 엄청나게 노동집약적인 노력을 투입해 학습시킬 데이터를 만들어야 한다(보통 이 부분을 간과하는데, 한 때는 아마존의 mechanical turk 파워의 50% 이상을 이미지넷을 위한 영상 분류에 투입했다는 일화를 기억하기 바란다). '마스터 알고리즘'은 가장 첫 단계인 머신러닝에 대한 일반적인 지식을 소개한다.

마스터 알고리즘이라는 단어가 특이한데, 저자에 따르면 마스터 알고리즘의 정의는 다음과 같다.

세상의 모든 지식, 즉 과거, 현재, 미래의 모든 지식은 단 하나의 보편적 학습 알고리즘으로 데이터에서 얻어낼 수 있다. 나는 이 머신러닝을 마스터 알고리즘(master algorithm)이라 부른다.

즉, 맥락에 맞춰 알고리즘을 매번 새로 개발하는 대신 데이터와 정보만 넣으면 우리가 원하는 통찰을 얻을 수 있는 어떤 절대적이고 궁극적인 알고리즘을 개발한다면 궁극적인 프로그램의 완성을 볼 수 있다고 주장한다. 물론 아직까지는 일부 분야에서만 성공을 거두고 있으며, 정말로 보편타당한 수준에 이를 수 있을지는 여전히 의문이기는 하다.

이 책은 머신러닝 실현을 위한 여러 가지 방법을 기호주의자, 연결주의자, 진화주의자, 베이즈주의자, 유추주의자라는 다섯 종족으로 나눠 설명하고 최종적으로는 이를 통합해 마스터 알고리즘으로 만드는 가능성에 대해 소개한다. The Programs That Become the Programmers에 소개된 그림 한 장이 이 책의 주제를 아주 잘 드러낸다.

각 종족별로 출발점, 기반 이론, 발전해온 경로를 다루며 장단점에 대해 짚어주기 때문에 현재까지 연구된 여러 가지 머신러닝 기법을 비교해가면서 익힐 수 있는 장점이 있다. 수식은 거의 나오지 않으며(베이지안은 예외다!), 코드도 없기 때문에 이 책을 읽고서 수학적인 관점에서 머신러닝을 이해한다거나 프로그램을 바로 만들 수 있으리라 기대해서는 곤란하겠다. (구체적인 사안을 이해하려면 다음 번에 소개하는 책을 읽어야 한다.)

책에서 다루는 내용을 맛보려면 다음 영상을 보면 되겠다. 영어 자막도 있으므로 천천히 시청하면 책에서 어떤 내용을 다루는지 감이 올 것이다.

그리고 보너스로 Quora에서 머신러닝을 어떻게 적용하는지 소개하는 자료도 올려드리겠다. 이 책을 읽고서 다음 자료를 읽어보면 머신러닝에 대해 한층 이해도가 높아진 자신을 발견할 것이다. :)

결론: 머신러닝에 대한 기초를 쌓고 싶다면 이 책을 읽어보면 되겠다. 하지만 번역상태가 좋지 않고(중간중간 오역도 보인다), 추상적인 내용이 많아서 읽기가 쉽지는 않을 것이다.

EOB

토요일, 10월 01, 2016

[B급 프로그래머] 9월 4주 소식 정리

오늘의 짤방: IT 관계자(특히 시스템 관리자)의 비애 (via @pigori)

애독자 여러분들을 위해, 연휴 기간 동안 충분할만큼 읽을거리를 넉넉하게 챙겨드리겠다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 빅데이터/인공지능 소식
  5. 기타 읽을거리

(마무리 그림: Today’s Venn Diagram. Programming != Computer Science via @jsshauma)