'기초 수학으로 이해하는 머신러닝 알고리즘' 리뷰
‘기초 수학으로 이해하는 머신러닝 알고리즘‘은 올해 초에 읽고 도움을 많이 받은 책입니다. 위키북스에서 출간한 도서로 일본 도서의 번역서입니다. 일본 도서 특유의 만화적인 전개와 다수의 그림으로 채워져 있습니다.
가벼워 보이지만 내용은 묵직한 책
책 제목, 분량(252페이지), 구성을 보고 2~3일이면 완독할 수 있다고 가볍게 접근했다가 상당히 고생했던 기업이 납니다. 물론 독자의 수학에 대한 배경과 접근 방식에 따라서 이런 느낌은 다를 수 있습니다.
제 경우에는 “Classification은 구분 선의 법선 벡터를 학습하는 과정이다”라는 내용에 막혀서 고민했던 기억이 납니다. 가볍게 시작해서 묵직하게 끝났던 책입니다.
제 경우에는 완독까지 2주가 걸렸습니다. 회귀에 수식에 대한 명확한 의미를 이해할 수 있어서 정말 좋았습니다. 기본적인 머신러닝 수식에 어떤 벽을 느끼시는 분들에게 좋은 책 같습니다.
구성
이 책은 5장으로 구성됩니다.
- Ch.1: 둘이 여행을 시작한다
- Ch.2: 회귀를 배워보자 - 광고비에서 클릭 수를 예측한다
- Ch.3: 분류에 대해 배워보자 - 이미지 크기를 기준으로 분류한다
- Ch.4: 평가해보자 - 만든 모델을 평가하자
- Ch.5: 파이썬으로 프로그래밍해보자
1장과 2장은 가볍게 시작할 수 있습니다. 이 책에서 가장 좋았던 부분은 3장과 5장입니다.
3장은 분류에 수식 likewood 함수의 유도 과정을 명확하게 제시합니다. 3장의 수식을 이해하신다면 Deep Learning의 기본 수식은 문제가 없을 것입니다. 왜 분류의 Cross-Entropy가 확률 분포로부터 유도되는지 설명합니다. 이 부분이 제겐 가장 인상 깊었던 부분입니다.
1~4장에서는 회귀와 분류를 중심으로 주요 수식을 설명합니다. 5장에서는 이 내용을 간단한 파이썬 코드로 직접 구현하는 과정을 코드로 설명합니다. 이 책에서 가장 중요한 부분은 5장입니다. 5장은 간결한 코드로 앞에서 설명한 주요 개념을 코드로 설명합니다. 개념을 간소화시키고 개념을 점진적으로 발전시키는 코드를 제시합니다. 배치, 미니배치, 확률적 경사 하강법으로 개념을 확장하는 코드를 단계적으로 제시하여 앞에서 학습한 개념을 코드로 다시 정리할 수 있습니다.
장점과 단점
“장점“은 만화와 같은 느낌으로 가볍게 볼 수 있다는 것이고, 개념의 전개 과정이 상당히 매끄럽다는 것입니다. 그리고 수식을 그림과 함께 제공하여 수식을 이해시키기 위해서 상당히 공을 들이고 있다는 것입니다. 수식에 대한 기초적인 소개로 시작하여 점진적으로 개념을 발전시키고 마지막에서 상당히 의미 있는 수준의 수식과 이해를 전달합니다.
앞에서도 말한 것처럼 5장에서는 간략한 예제를 반복적으로 제시합니다. 이 반복적인 코드는 앞에서 설명한 개념의 발전을 적용하여 약간씩 변경하는 형식입니다. 이 코드를 통해서 수식으로 학습한 알고리즘이 코드로 어떻게 반영되는지 확인할 수 있습니다.
알고리즘의 수식과 그 수식이 코드로 구현하는 과정을 확인할 수 있다는 것이 강점입니다.
“단점“은 2장에서 3장으로 넘어가는 과정에서 난이도가 급격히 올라가는 부분이 있다는 것입니다. 대화체로 개념을 전달하는 구성의 특성상 많은 정보를 다룰 수는 없습니다. 이런 이유로 다음 개념으로 넘어갈 때 부분적으로 난이도가 잡자기 올라가는 느낌이 있습니다. 이 부분은 독자가 극복해야 할 부분입니다. 제 경우에는 이 어려움이 3장에서 있었습니다. 이 부분은 제외하면 큰 단점은 발견하지 못했습니다.
추천
이 책은 수학에 대한 부담이 있으신 머신러닝 입문자에게 적합한 책입니다. 다음과 같은 분들에게 추천합니다.
- 벡터 내적이 의미를 설명하기 어려우신 분
- 분류에서 무엇이 Positive이고 무엇이 Negative인지 모호하신 분
- “분류는 구분 선을 찾는 것이 아니라 구분 선의 범선 벡터를 학습하는 과정”이라는 말이 이해가 가지 않으신 분
- Cross-Entopy는 정보 이론(Information Theory)이 아니라 확률로 유도되는 수식임을 모르시는 분
제 경우 수학 배경이 얇아서인지는 몰라도, 머신러닝에 입문하면서 여러 책을 전전하며 항상 어떤 벽을 느껴왔습니다. 그리고 그 벽은 지금도 계속되기는 하지만, 이 책은 그 벽은 약간은 좁게 만들어준 책입니다. 저와 같은 어려움을 느끼시는 분들에게 적극 추천합니다.
참고
이 책의 코드는 github에 공개되어 있습니다. 머신러닝 입문자의 경우에 github에 공개된 코드를 리뷰해 보시는 것도 좋을것 같습니다.