(리뷰 보기)
- 대상 독자: 프로그래밍에 익숙하고 수학은 많이 까먹은 개발자들
딥러닝 입문용 책 중 가장 유명하고 많이 팔린 책이 아닐까 싶다. 프로그래머의 관점에서 신경망을 최소한의 라이브러리로 구현하는데 중점을 둔다.
Backpropagation 을 설명할 때 계산 그래프를 적극 활용한다. 계산 그래프에 익숙해지면 아주 기본적인 미분 개념만으로도 역전파를 손쉽게 구할 수 있다. Chain Rule이나 편미분같은 장벽을 돌아갈 수 있는 방법이 아닐까 싶다.
(하지만 제도권 교육에 익숙한 나같은 사람에겐 계산 그래프 또한 생소한 개념이었다. 오히려 Chain Rule과 편미분을 같이 소개해준 뒤에 계산 그래프가 더 잘 이해가 되었다.)
TensorFlow가 계산 그래프 기반으로 구현되었기 때문에 여기에 익숙해지면 TensorFlow 학습에 큰 도움이 된다.
스탠포드의 CS231n 수업에서 많이 활용한 개념인데 이 책도 강의를 많이 참고한 터라 CS231n 수업의 부교재로 써도 손색이 없다.
Batch Normalization, 다양한 최적화 기법(Momentum, Adam 등), CNN 등 입문용 책 중 다루는 범위가 가장 넓다.
Backpropagation 과 Gradient Descent 를 설명할 때 수식을 적극 활용한다. 구현 코드도 Matlab 기반이므로 공학 베이스를 가진 사람들이 접근하기 용이하다.
반대로 이야기하면 그 외의 사람들에겐 다소 어렵게 느껴진다. 공학이 익숙하지 않은 사람들과 이 책으로 스터디를 진행해 보았는데, 쏟아지는 수식과 기호들이 손에 잘 잡히지 않았다.
다루는 내용이 많지 않기 때문에 수학적 베이스가 탄탄하다면 딥러닝에 대해 빠르게 훑어볼 수 있는 책이라 생각된다.
신경망 첫걸음 (이 포스트의 주인공)
부제에 ‘수포자도 이해하는…’ 이라는 문구가 들어가 있는데 이 책을 가장 잘 표현하는 말이라 생각된다.
회귀, 행렬, 역전파 등의 개념을 최대한 직관적으로 설명하기 위해서 많은 노력을 기울인다. 수식을 내어놓고 수식의 원리를 설명하는 방식이 아니라, 한 눈에 이해되지만 최적화된 방법은 아닌 접근에서부터 시작해서 아주 자연스럽게 수식을 유도해낸다.
(개인적으로는 최종 Output layer의 오차를 Hidden layer로 전파시키고 이를 이용해서 Backpropagation 공식을 완성시키는 과정이 감명깊었다. 이 내용을 편미분과 Chain Rule의 조합으로만 접근하면 상당히 긴 수식을 전개해야만 하는데, 좀 더 단순화되고 직관적인 방식으로 절대 까먹지 않을 것 같다.)
1부에서는 일부러 코드를 배제하고 개념 설명에 집중한 것도 좋았다. 개인적으로는 개념이 이해되지 않은 상황에서는 코드가 큰 도움이 되지 않았다. 심지어 잘 이해되지 않은 상황에서 코드만 따라 쳐보고 잘 돌아가니 이해했다고 착각하는 경우도 있었기에 이런 접근법이 내게는 더 유용했다.
부록의 기초 미분은 부록으로 빠져있기엔 아까울정도로 훌륭했다. 신경망을 이해하는데 필요한 정도의 미분을 아주 자세하고 직관적으로 설명해주고 Chain Rule까지 물흐르듯 이해된다. 수학에 막연한 두려움을 가지고 있는 사람들을 위해 부록으로 따로 뺀 모양인데 그런 사람들일수록 꼭 읽어봤으면 하는 부분이다.
2부에서 파이썬으로 구현하는 부분은 사실 너무 광범위한 내용을 짧은 분량 안에 담으려고 해서 실질적으로 도움이 될 것인지에 대해서는 의문점이 남는다.
프로그래밍이 익숙한 사람들은 어떻게든 여러 자료들을 참고해가며 이해하겠지만, 그렇지 않은 사람들을 대상으로 쓴 내용 치고는 함수의 사용법은 인터넷을 검색해보라는 식으로는 쉽지 않아보인다. 차라리 프로그래밍에 익숙한 사람을 가정하고 numpy 관련 내용을 좀 더 자세히 설명하는 것이 유용하지 않았을까 하는 의견이다.
대상 독자와 분량을 감안하여 최적화 기법과 CNN등은 대부분 빠져있는데, 그래도 신경망 학습에 필수적인 Batch Gradient 정도는 소개해주었으면 하는 아쉬움이 남는다. (처음 Batch Gradient를 이해하고 구현해보려 했을 때 많은 삽질을 겪은 개인적 경험때문일 것이다.)