"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
진짜 전문가가 되기 위한 머신러닝 디자인 패턴
지금은 바야흐로 인공지능의 시대라고 말해도 과언이 아닐 정도로 수많은 분야의 사람들이 기계학습, 특히 딥러닝을 활용하고 있다. 나 역시도 딥러닝에 대해 꾸준히 학습 해 가면서 시대에 뒤처지지 않고 좋은 개발자가 되기 위해 노력 중이다. 이런 상황 속에서 딥러닝 네트워크에 대해서만 막연하게 학습하는 것은 그저 암기할 대상만 늘어날 뿐 전혀 실용적이지 않아 보였다.
개발 공부를 하면서 학습한 내용을 실용적으로 만들기 위해서는 하나의 프로세스를 수행하기 위한 과정을 실천할 수 있어야 한다. 물론 학습 초기 단계에서는 문법에 익숙해지고, 간단한 어플리케이션을 만들 수 있는 것으로도 충분하다. 그러나 충분히 숙련된 이후에도 이 단계에 머물러 있는 것은 튜토리얼 단계에만 머물러 있는 게이머와 비슷하다. 본격적인 여행을 나서기 위해선 다양한 상황에 대처할 수 있는 스킬들과 지식을 쌓아 다양한 상대를 만나더라도 충분히 유연한 대처가 가능해져야 한다. 물론 모든 프로세스를 완벽하게 익혀야 한다는 뜻은 아니다. 무수히 많은 상대에 대한 지식을 미리 쌓기보단 필요에 의해 그때그때 적당한 지식을 습득하는 편이 더 효율적일 것이다.
그런 의미에서 O'REILLY의 <Machine Learning Design Patterns, 머신러닝 디자인 패턴>은 상당히 효율적으로 구성된 교본이다. 단순히 딥러닝의 네트워크나 원리에 대한 설명에 대해서만 공부해 왔다면, 이 책을 통해 실전 기술들을 충분히 익힌다면 충분히 훌륭한 딥러닝 엔지니어가 될 수 있을 것이다.
실용적으로 보이는 30가지의 디자인 패턴
<Machine Learning Design Patterns, 머신러닝 디자인 패턴>에서는 머신러닝에 관한 30가지 디자인 패턴에 대해 소개한다. 각각의 디자인 패턴들은 아래와 같은 6개의 상위 그룹으로 묶여 있다.
- 데이터 표현 디자인 패턴
- 문제 표현 디자인 패턴
- 모델 학습 디자인 패턴
- 탄력성 디자인 패턴
- 재현성 디자인 패턴
- 책임 있는 AI
각각의 디자인 패턴의 상위 그룹들은 해당 상황에서 마주할 수 있는 대표적인 문제점들에 대해 정형화된 풀이 과정을 소개해 준다. 우선데이터 표현의 경우는 모델의 입력 데이터를 활용할 수 있는 정형화된 방법들을 소개해 준다. 다음 문제 표현의 경우 모델을 구현하기 위한 문제 정의 과정에서 활용할 수 있는 방법이 나오게 된다. 세 번째 모델 학습의 경우 학습 과정에서 유용하게 사용할 수 있는 몇 가지 방법들을 소개해 준다. 네 번째 탄력성에서는 실제 제품화된 모델이 안정적으로 운영되기 위한 방법들을 소개해 준다. 다섯 번째 재현성은 특히 딥러닝 학습 환경에서 발생하는 재현 불가능한 상황들에 대한 해결 방법을 알려준다. 마지막으로 책임 있는 AI에서는 개발자의 관점이 아닌 모델을 둘러싼 이해관계자가 제기할 수 있는 여러 문제점과 해결책을 이야기한다.
그동안 딥러닝을 학습하고, 활용하기 위한 활동들을 해오면서 여러 문제 상황들을 마주하였다. 특히 많은 고민을 해봤던 것은 문제 표현 디자인 패턴에서의 "디자인 패턴 10: 리벨런싱"이다. 학습을 하기 위해 실제 데이터를 수집하다 보면 종종 데이터 불균형 문제가 발생한다. 이는 수집된 데이터의 양이 적어서 발생하는 경우도 있지만, 발생 빈도가 압도적으로 낮아 생기는 문제도 있다.
예를 들면, 코딩 연습을 하기 위한 플랫폼인 프로그래머스에서 제공해주는 문제 중 "채용 공고 추천"을 풀어 본 적이 있다. 처음 연습을 위해 다양한 머신러닝 기법들을 고심해가며 학습을 시켜보았다. 아무리 많은 방법을 써봐도 85% 정도의 정확도를 넘어설 수가 없었다. 과제가 거의 끝나갈 무렵 데이터를 확인해 보니 라벨의 비율 자체가 85%로 데이터 불균형 상황이었다. 즉, 데이터 불균형으로 인해 학습이 전혀 되지 않았던 것이다.
이런 불균형 상황에 대해 이 책에서는 몇 가지 방법을 제시한다. 우선 다운 샘플링을 통해 기본 데이터셋의 균형을 바꾸는 방법이 있다. 다음으로 라벨마다 가중치를 다르게 주어 모델이 특정 클래스를 처리하는 방식을 바꾸는 방법도 소개한다. 그리고 업 샘플링 기법을 통해 소수의 예제를 복사하는 방식도 보여준다.
그 외에도 다양한 디자인 패턴들을 보며 상당히 실용적인 패턴들이 많아 보였다. 특히 앞의 세 챕터에서 다루는 문제들은 실제 딥러닝 학습 과정에서 들어본 것도 있었고, 연습을 위해 kaggle의 competition을 참여해 보면서 들었던 많은 고민들에 포함된 것들도 있었다. 그 이후 챕터들은 실제 모델을 제품화하거나, 검증, 평가 과정을 거치면서 마주하는 상황들을 소개해 주어 실제 딥러닝 엔지니어가 된다면 이런 고민도 해야 하는구나 하는 생각이 들었다.
개인적으로 생각하는 책의 특징들
이 책을 읽으면서 받은 인상에 대해 간략하게 소개하고자 한다. 먼저 많은 번역서를 읽다 보면 전문 용어의 낯선 한글 번역이 오히려 책을 읽기 더 어렵게 하는 경우가 있다. 하지만 여기서는 적절한 한글 번역과 영어를 쓰기도 하고 영어 발음을 그대로 적기도 하였는데, 나름 적절하게 혼용해서 사용해서 읽는 것이 수월하게 느껴졌다.
다음으로 책의 구성은 모든 디자인 패턴에 대해서 각각 문제를 제시하고, 이를 해결하기 위한 디자인 패턴을 소개, 패턴의 문제점과 대안을 제시하는 구성으로 되어 있다. 이를 통해 각각의 디자인 패턴에 대해서 배경이 되는 문제에 대해 충분히 이해한 다음 해결 방법에 대해 익힐 수 있어서 충분한 도움이 되었다.
마지막으론 번역에 대한 이야기이다. 이 책의 대부분은 괜찮았지만, 특정 부분에서 신경 쓰이는 번역투가 있어 이해하는데 어려움이 있었다.
멀티 라벨 디자인 패턴이란 주어진 학습 데이터에 둘 이상의 라벨을 할당할 수 있는 문제를 말한다. 신경망의 경우, 멀티라벨 디자인 패턴 설계는 모델의 최종 출력 계층에 사용되는 활성화 함수를 변경하고 애플리케이션의 모델 출력을 어떻게 파싱할 지 선택해야 한다. 이는 멀티 클래스 분류 문제와는 다르다. 멀티클래스 분류에서는 둘 이상의 클래스 중 정확하게 하나의 라벨만 데이터에 할당하기 때문이다. 둘 이상의 클래스 중 2개 이상의 라벨을 선택해야 하기 때문에 멀티라벨 디자인 패턴을 멀티 라벨이나 멀티클래스 분류라고 부르기도 한다.
p. 126
특히 이해하기 어려운 부분에 대해 소개하자면, 멀티 라벨과 멀티 클래스에 대해 소개해주는 부분이다. 각 문장별로 달라지는 설명이 난해하게 다가왔다. 이 부분의 번역 외의 다른 모든 것들은 상당히 좋은 인상의 책이었다.
어떤 사람들이 읽으면 좋을까?
이 책은 딥러닝을 충분히 공부하고 실제 서비스화 해보고 싶은 생각이 있는 사람이라면 한 번쯤 읽어봄직하다고 생각한다. 상당히 구체적이고 실제 서비스 환경에서 접해봄직한 문제들을 보여주고 실제 해결 방법까지 제시하기 때문에 서비스 구축 과정 내내 유용할 것이다. 또한 꼭 서비스화를 위한 딥러닝 학습이 아니더라도, 이 책에서 말하는 30가지의 디자인 패턴에 대해 숙지하고 있다면 좀 더 전문적인 딥러닝 개발자가 될 수 있다고 확신한다.
이제 딥러닝을 입문하고자 하는 사람이라면 이 책을 읽기보다는 <밑바닥부터 시작하는 딥러닝> 시리즈의 책을 통해 먼저 딥러닝의 기초를 충분히 다지는 것이 더 좋다. 이 책에서는 딥러닝 기초에 대한 내용은 모두 설명하지 않거나 언급만 하는 수준으로 넘어가기 때문에 충분한 기초를 다지고 오는 것을 추천한다.
또한 pytorch나 tensorflow의 각 함수들이 대략적으로 어떤 기능인지를 파악한, 갓 초심자를 벗어난 학습자들이라도 이 책은 아직 버거울 가능성이 높다. 실제 모델이 어떻게 학습이 되는지, 데이터는 어떤 방식으로 불러오는지, 딥러닝이 학습할 수 있는 것은 어떤 것인지를 먼저 익히고 오는 것이 좋은데, <만들면서 배우는 파이토치 딥러닝>을 통해 효율적으로 학습할 수 있다.
결론
디자인 패턴과 MLOps는 스스로를 비전공 개발자라고 생각하는 나에게 있어서 큰 약점이라 생각되어 언젠간 제대로 공부해야겠다는 생각을 하고 있었다. 이에 따라 막연하게 MLOps에 대해 한번쯤 공부해야 겠다는 생각이 들던 즈음, 이 책을 보고 상당히 반가웠다. 이 책이 배송되고, 실제로 읽어보면서 상당 부분을 흥미진진하게 읽었다. 나름 개발 과정에 있어 고민했던 부분에 대한 내용이 나와 크게 공감하였다. 또한 종종 문제를 마주하긴 했는데, 어떤 키워드인지 감이 잡히지 않는 것들도 명쾌하게 정리해주어 비슷한 문제 상황을 빨리 다시 보고 싶다는 생각이 들기도 하였다.
'서평' 카테고리의 다른 글
[남독] 소크라테스 익스프레스, 철학을 요람부터 무덤까지 (0) | 2022.01.02 |
---|---|
[남독] 개발자에서 아키텍트로 (0) | 2021.12.25 |
[남독] 나보다 소중한 사람이 생겨버렸다. (0) | 2021.11.01 |
[남독] 처음 배우는 그래픽 레코딩 (2) | 2021.10.29 |
[남독] 제대로 배우는 수학적 최적화 (4) | 2021.10.27 |