디자인 패턴이란 전문가 수백 명의 경험을 간단하고 접근하기 쉽게 체계화한 것이다. 이 책에는 데이터의 표현, 운영, 반복성, 재현성, 유연성, 설명 가능성, 공정성에 대한 30가지 디자인 패턴이 담겨 있다. 각 패턴에는 문제에 대한 설명, 다양한 잠재적 솔루션, 상황에 적합한 기술 노하우가 포함되어 있다. 머신러닝 프로세스 전반에 걸쳐 마주하는 일반적인 문제를 해결하고 싶은 실무자라면, 저명한 3명의 구글 엔지니어가 이 책에서 분류한 ‘이미 입증된 방법’을 배우고 실천해보자.
주요 내용
ML 모델을 학습, 평가, 배포할 때 겪는 일반적인 문제와 해결법
임베딩, 특징 교차 등을 포함한 다양한 ML 모델 유형의 데이터 표현
특정 문제에 적합한 모델 유형을 선택하는 법
체크포인트, 배포 전략, 하이퍼파라미터 튜닝을 사용하는 강력한 학습 루프 구축
새로운 데이터를 반영하기 위한 재훈련, 업데이트할 수 있는 확장 가능한 ML 시스템 배포
이해관계자를 위한 모델 예측을 해석하고 공정성을 확인하는 법
모델의 정확도, 재현성, 탄력성을 향상하는 법
추천사
이 책은 다양하면서도 질 높은 예제를 담고 있습니다. 머신러닝 문제에 대한 검증된 솔루션을 필요로 하는 모든 데이터 과학자와 머신러닝 엔지니어라면 반드시 읽어봐야 할 책입니다.
_데이비드 캔터, ML Commons의 이그제큐티브 디렉터
머신러닝 솔루션을 구축하는 과정에서 겪는 어려움을 덜어내고 싶은 분들을 위한 책입니다.
_윌 그레니스, 구글 클라우드 CTO 오피스의 매니징 디렉터
저자소개
저자
발리아파 락슈마난
구글 클라우드 플랫폼의 데이터 분석 및 AI 솔루션 글로벌 책임자. 팀원들과 함께 데이터 분석 및 머신러닝 제품을 사용하여 비즈니스 문제에 대한 소프트웨어 솔루션을 개발한다. 발리아파는 구글의 어드밴스드 솔루션 랩(Advanced Solutions Lab)에서 ML 이머전 프로그램(ML Immersion program)을 만들었으며, 구글에 합류하기 전에는 Climate Corporation의 데이터 과학 디렉터, NOAA의 연구원으로 재직했다.
저자
세라 로빈슨
구글 클라우드 플랫폼의 개발자 애드보킷. 머신러닝을 담당하고 있으며 데모, 온라인 콘텐츠, 이벤트를 통해 개발자와 데이터 과학자가 머신러닝을 애플리케이션에 통합하기 위한 지식을 전파한다. 브랜디스 대학교에서 학사 학위를 받았고, 구글에 합류하기 전에는 Firebase에서 개발자 애드보킷으로 재직했다.
저자
마이클 먼
구글의 머신러닝 솔루션 엔지니어. 고객의 머신러닝 모델을 설계, 구현, 배포하는 작업을 지원한다. 또한 어드밴스드 솔루션 랩에서 ML 이머전 프로그램을 가르치고 있다. 마이클은 뉴욕시립대학교에서 수학 박사 학위를 받았으며 구글에 합류하기 전에는 연구 교수로 일했다.
역자
임지순
낮에는 계약서와 코드를 두드리고 밤에는 신시사이저와 기타를 난도질하는 공학과 미디어의 주변인. 임베디드 프로그래머, 미들웨어 개발자, 프로젝트 매니저, 사업 개발 등 다양한 직군에 종사해왔으며 최근에는 엔터테인먼트 산업에서 다양한 웹 프로젝트를 진행 중이다. 사회적인 덕후로 생존하기 위해 오늘도 코드, 그리고 글과 씨름하고 있다. 참여 도서로는 『머신러닝 디자인 패턴』(한빛미디어, 2021), 『초소형 머신러닝 TinyML』(한빛미디어, 2020), 『라즈베리 파이로 배우는 컴퓨터 아키텍처』(위키북스, 2017) 등이 있다.
이화여대 신산업융합대학 겸임교수로 데이터 분석 및 AI 강의를 하고 있으며, 카논그룹의 CTO로 재직 중이다. 이전에는 IBM의 Data&AI 팀에서 엔지니어로 근무했으며, 이후 카카오벤처스 패밀리사인 1z Labs를 공동창업한 후, 지분을 매각한 바 있다. 연세대학교에서 데이터 분석 전공으로 석사 과정을 졸업하고 박사 과정을 수료했다. SK C&C, KISTI, NRF, DBpia 등에서 프로젝트를 진행하였으며 Apache Zeppelin, Qiskit, KoGPT-2 등 오픈소스 프로젝트에 기여했다. 삼성, 현대, LG, 딜로이트 등 기업을 대상으로 강연하고 연세대학교, 이화여대, 중앙대학교, 동덕여대, 상명대학교, 순천대학교 등에서도 강연했다. 참여 도서로는 『머신러닝 디자인 패턴』(한빛미디어, 2021), 『Do it 강화 학습 입문』(이지스퍼블리싱, 2021), 『코딩진로』(호모루덴스, 2021), 『초소형 머신러닝 TINYML』(한빛미디어, 2020), 『쉽게 배우는 AWS AI 서비스』(한빛미디어, 2022), 『하이퍼레저 블록체인 개발』(한빛미디어, 2019), 『블록체인의 정석』(지앤선, 2019) 등이 있다. 깃허브에서 @YUNHO0130으로 활동하고 기술 블로그와 유튜브 채널을 운영하고 있다.
구글의 뛰어난 머신러닝 석학들이 모여 집필한 『머신러닝 디자인 패턴』은 기업에서 발생하는 대부분의 시나리오에 대응할 수 있는 30가지 패턴들을 다루고 있습니다. 이 책에 담긴 검증된 아키텍처와 비즈니스 사용 사례는 머신러닝을 구축하는 시간을 줄여주며, 비즈니스에 머신러닝을 적용하는 효과적인 방법을 알려줍니다. 단순히 ‘돌아가는 코드를 수록해놓은 책’이 아니라 다양한 기술 의사결정의 기준점이 되어줄 책입니다.
오늘도 많은 개발자가 불안한 마음을 안은 채로 딥러닝과 머신러닝 모델을 만들고 있습니다. 불안한 모두에게 이 책은 ‘나침반’이 되어줄 겁니다. 특정 상황에서 자신이 내린 기술 의사결정이 올바른 것인지, 제약은 무엇이고 트레이드오프는 무엇인지를 올바른 방향으로 안내합니다. 이 책을 읽으며 편법이라고 생각했던 현업의 기법들이 사실은 정석이었음을 깨닫고, 확신과 안도감을 느끼셨으면 합니다. 사실은 편법이 아니라 제한된 리소스에서 수행할 수 있는 최선의 기술 의사결정인 것이죠.
수많은 고난에도 불구하고, 오늘도 딥러닝과 머신러닝 모델을 학습시키고 있는 모든 분에게 이 책을 추천합니다.
1. 머신러닝 파이프라인에 대해 잘표현된 책으로 데이터를 최적으로 학습시키기 위한 전처리 및 분석 방법, 학습의 패턴 및 다양한 기법과 그에 해당 트레이드 오프 대안 방법을 잘 풀이함
2. 학습을 위한 패럴리즘 방식 및 비동기식 학습 등을 소개해 주어 하드웨어적으로 생각할 수 있는 기회를 제공
3. SQL을 사용하여 예측을 수행할 수 있어 다양하고 폭넓게 공부할 수 있음
단점
1. 없음
후기
1. ML/DL을 처음 접하다보면 이미지나 텍스트 등의 하나의 종류의 데이터를 주로 처리해 해당 데이터에만 효과적으로처리하는 모델을 공부하다 보면 다른 다양한 패턴 및 기법들의 경우 접할 기회가 어려워진다. 이 책의경우 다양한 패턴 및 기법들을 소개해주어 많은 영감을 주는 책이라고 생각한다.
머신러닝에 보다 깊은 이해와, 실제 머신러닝 코드 제작 시의 효율성 극대화를 위해 이 책을 읽게 되었다.
‘머신러닝 디자인 패턴’ 은 머신러닝이나 데이터에 관한 기본적인 지식을 갖춘 후에 추천되는 책이다. 앞서 머신러닝 등에 대해 여러 책들을 읽어보며 기반을 다져왔지만, 아직 직접 빅 데이터를 처리하거나 학습해본 적은 많이 없어서, 책을 읽으면서 막힌 구간도 좀 있었다.
이렇게 기초보다는 머신러닝을 어느 정도 학습하고 숙련된 독자를 위한 책이지만, 직접 실무에서 수행하는 개발자들에게는 무엇보다 좋은 책이라고 생각했다.
데이터 수집 – 학습 – 검증에 이르기까지, 프로세스 중에서 가장 중요한 것은 기반인 머신러닝 패턴의 설계이다. 이는 모델의 목표나 최적화 대상, 어떤 데이터가 들어가는지 등에 따라 다양해지며, 정확하고 정밀한 머신러닝 패턴을 짜는 것이 시작이다.
책에서는 머신러닝의 기본 종류인 회귀, 분류에 기반해, 다양한 머신러닝 사례를 들어 각 문제별로 사용가능한 패턴을 제시하고 있다. 특히, 필요 데이터가 부족하거나, 정확하지 않을 때 모델에 적용할 수 있는 패턴 등 실제 발생 가능한 거의 대부분의 문제에 대해 솔루션을 제공해 주었다.
이는 특히 머신러닝 실무자들에게, 프로그래밍을 하다 벽에 부딫힐 때 찾아보면 도움이 될 만한 책이라고 생각한다.
책의 마지막에, 그럴 때 쉽게 찾아 볼 수 있도록 패턴 요약과 다이어그램을 수록해 놓았다. 아마도 실무에서 계속 찾아볼 책인 것 같다.
책을 천천히 읽으며 당장 다양한 머신러닝 문제에 각 패턴을 어떻게 적용할 지를 생각해 보는 것도 도움이 될 것이다.
머신러닝 솔루션 구축을 위한 설계, 학습, 배포, 파이프라인, 서빙 등 워크플로 단계별 머신러닝 디자인 패턴을 30가지 유형으로 정리한 책이다.
프로그래밍 세계의 디자인 패턴과 마찬가지로 머신러닝의 제품화 또한 분야별 다양한 전문가들이 애용하는 디자인 패턴을 잘 숙지하여 활용한다면 잘못된 설계 및 구현으로 인한 시행착오를 줄일 수 있는 것은 물론 잘 고민된 패턴 덕분에 추후 유연한 확장성을 가질 수 있다.
문제는 머신러닝 솔루션이 출시된 역사가 매우 짧아 고수마다 개발하는 패턴이 제 각각이고 쉽게 공유되지 않아 나같은 초보자들이 참고할 만한 책을 찾기가 어려웠는데 구글 클라우드 플랫폼을 운영하는 저자들이 분야별 전문가들의 노하우를 30개 유형의 패턴으로 정리하여 드디어 참고할만한 서적이 생겼다는 점을 가장 큰 장점으로 소개할 수 있을듯 하다.
책에 소개된 30개의 패턴은 머신러닝 솔루션 구축에 필요한 거의 전 과정의 고민이 담겨있다. 데이터, 문제, 학습 등 모델 중심의 패턴부터 서빙, 평가, 워크플로, 파이프라인 등 인프라 중심의 패턴 그리고 의사결정을 위한 업무 운영을 위한 패턴까지 소개되어 있다.
책에 소개된 워크플로 단계별 30가지 패턴은 아래 그림에 잘 정리되어 있다.
8장 말미에는 데이터 유형에 따라 흔히 사용되는 일반적인 패턴이 소개되기에 이미 실무에서 진행 중인 프로젝트가 있다면 해당 내용을 먼저 참조하는 것이 책의 빠른 이해를 위해 도움이 될 것 같다. 30가지의 패턴이 다루는 범위가 워낙 방대하기에 처음부터 읽어도 당장 필요로 하지 않는 것들은 망각되기 쉬워 학습 효율이 떨어질 수 있다.
예를 들면 컴퓨터 비전의 경우 책에 소개된 패턴 중 일반적으로 사용되는 유형은 리프레이밍, 중립 클래스, 멀티모달, 전이 학습, 임베딩, 멀티라벨, 캐스케이드, 2단계 예측으로 소개하고 있다.
이 중 개인적으로는 실무에서 고민했던 문제의 해결책인 멀티모달 패턴이 반가웠다. 깊이 있는 내용은 아니지만 머신러닝 업무를 진행한 적이 있는 이라면 누구나 한 번쯤은 고민해 볼만한 문제 중 하나이다.
예를 들어 책의 아래 이미지 예시와 같이 이미지와 tablular 데이터가 함께 입력으로 들어와 특정 값을 예측해야 하는 경우 이를 어떤 방식으로 결합하여야 하는지에 대해 고민하는 문제일 경우 멀티모달이 제시하는 패턴을 활용하면 절반 이상의 고민은 해결되는 셈이다.
각각의 소개된 패턴은 먼저 상황별 문제가 소개된다. 머신러닝 솔루션화에 있어 어떤 문제가 있는지 먼저 소개한 후 이를 해결하기 위한 방법으로 각 패턴을 소개한다.
이어서 패턴의 상세한 원리가 소개되고 그럼에도 발생할 수 밖에 없는 트레이드 오프는 무엇인지 소개하며 제시된 패턴의 개선을 위한 사용상의 유의점과 여지를 남겨둔다.
패턴 소개 마지막 부분에는 실질적으로 구현을 위한 Tensorflow, Keras의 API의 핵심 코드가 소개되며 빅쿼리 예시문도 자주 소개된다.
예를 들면 임베딩의 경우 텐서플로는 layers.Embedding 코드를 활용하고 특징 교차 생성 시 빅쿼리의 경우 ML.FEATURE_CROSS 코드를 활용한다는 식으로 예제 코드가 등장한다.
각각의 패턴을 특정 상황마다 그대로 따라 하는 것만으로도 훌륭한 지침서이지만 역으로 설계 단계에서 놓치는 부분이 없는지 고민을 위한 체크리스트 용도로도 제 격이라는 생각이 든다.
축적된 노하우의 역사가 다른 분야에 비해 비교적 짧은 머신러닝 솔루션 프로젝트는 아는 만큼만 보이는 함정에서 벗어나는 것이 매우 중요하다고 생각한다.
예를 들면 나 같은 경우 다양한 입력값에 유연하게 대비하기 위한 스테이트리스 서빙이나 트랜스폼 패턴의 존재 조차 몰랐다. 아마도 이런 패턴을 숙지하지 않고 아는 수준 정도로 개발하였다면 각 패턴마다 소개된 문제 혹은 트레이트 오프 부분에 영락없이 걸려 세월만 낭비하고 있었을 것이다.
그 외에도 워크플로 파이프라인, TPU Strategy 등의 분산 전략, 체크포인트 저장 전략 등의 패턴은 어렴풋이는 알고 있었지만 이 책 덕분에 보다 확실히 알 수 있게 되어 앞으로의 업무에 많은 도움이 될 것 같다.
특히 책 한 권으로 비즈니스 및 의사 결정까지 커버해 보려는 저자들의 꼼꼼함이 돋보였다. 7장에는 주로 책임과 관련된 패턴들이 등장하는데 이 영역은 개발 자체보다는 의사결정에 보다 초점을 맞춘 듯 하다.
물론 29 유형의 XAI 패턴의 경우 설명 가능한 AI를 위한 코드나 API들이 소개되긴 하지만 이는 궁극적으로 의사 결정을 위한 중요한 수단이 된다. 또한 30 유형의 공정성 렌즈 패턴의 경우도 편향으로 발생하는 차별적인 부분의 위험 회피를 위해 노력한다.
8장에서 개발을 위한 파이프라인과 완전 자동화된 프로세스가 분리되어 소개된 점도 많은 참고가 되었다. 은근히 헷갈렸던 부분인데 알기 쉽게 잘 정리되어 있다.
지금까지 30가지 유형의 패턴을 일일이 다 정리하기에는 무리가 있어 개인적으로 필요로 했던 내용들을 중심으로 리뷰를 진행해보았다.
머신러닝을 입문부터 공부했던 독자라면 아마도 2 ~ 4장에 등장하는 패턴은 비교적 익숙할 것이다. 앞서 언급한 대로 모델이나 학습 중심의 패턴이 모여 있기 떄문이다. 임베딩, 앙상블, 전이학습, 하이퍼파라미터튜닝 파트는 따로 패턴을 읽지 않아도 대부분의 독자분들이 잘 숙지하고 있을 거라 생각한다.
그렇지만 그 중에서도 유용한 과대적합, 특징해시, 멀티모달, 특징교차 등 겪어본 적 없는 신선한 패턴도 상당수 등장하고 있다.
5 ~ 7장에 등장하는 패턴은 그간 입문서에 잘 소개되지 않은 부분으로 아마도 이 책을 표지나 제목만으로 구매하려 했던 독자라면 원하는 내용이 대부분 이 파트에 실려있을거라 생각한다.
스테이트서 서빙, 배치 서빙, 2단계 예측(모바일 등 엣지를 위한 버전 별도 운영), 키 기반 예측, 워크플로 파이프라인, 특징 저장소, 모델 버전 관리 등의 패턴은 특히 데이터 및 머신러닝 엔지니어 혹은 솔루션 개발자에게 매우 큰 도움이 될 것이다.
책의 수준은 다소 높다. 적어도 Python 프로그래밍, 자료구조 및 알고리즘, 머신러닝의 입문지식 및 기본 알고리즘 정도는 알고 있어야 이해에 큰 무리가 없을듯 하다.
엔지니어 분들은 물론 프로젝트를 총괄자나 의사결정권자도 전체 흐름을 파악하기에 매우 좋은 책이라는 생각이 든다.
앞서 언급했듯 머신러닝 패턴을 다루는 책은 워낙 희귀함에도 불구하고 이 책은 알기 쉽게 잘 정리되어 있고 비교적 짧은 용량 대비 실전에 적용하는데 무리가 없는 파급력을 갖고 있다고 본다. 머신러닝의 제품화를 꿈꾸는 모든 이에게 추천하고 싶다.
일반적인 코드에도 디자인 패턴이 중요하듯이 머신러닝 또한 공통적으로 뽑아낼 수 있는 패턴들이 중요하다.
책 앞머리에도 옮긴이가 이 ML디자인 패턴의 중요성에 대해 잘 설명해놓았다. 이젠 어느 정도의 ML 과도기가 끝난 듯 하므로 ML디자인 패턴을 적극 활용해 업무에 참고하는 것이 좋겠다.
책은 크게 5개 파트의 디자인 패턴으로 나뉜다. 데이터 표현, 문제 표현, 모델 학습, 탄력성, 재현성.
그러니까 무작정 맨땅에 헤딩식으로 ML을 배웠을 떄 나타나는 각종 상황들을 아예 유형화해놓은 책이라고 할까. 그래서 그런지 직접 ML 코드를 작성해본 사람이라면 공감갈 내용들이 많이 나와있다. 혹은 처음 ML을 배우려고 하는 사람이라면 ML디자인패턴을 참고해서 처음부터 하게 될 여러 삽질을 방지할 수도 있겠다.
그리고 문제를 푸는 방식의 모범 답안이나 생각의 전환 등을 참고할 때도 좋겠다. 회귀 문제라고 해서 꼭 회귀로만 풀어야 되는 것이 아니라 분류로도 풀 수 있다는 것을, 그리고 그렇게 함으로써 얻을 이익 등에 대해서도 잘 알 수 있다.
또 각 디자인 패턴별 구체적 상황 또한 제시하고 있어 어떤 데이터와 상황일 때 어떤 ML을 만들어야 되는지, 그리고 주의할 사항은 무엇인지에 대해서도 아주 자세히 참고할 수 있겠다.
책을 읽다가 몇몇 부분은 굉장히 익숙한 내용이 나올 수도 있는데 그런 경우라면 과감히 넘기고 다른 새로운 상황을 습득하는 데에 중점을 둬도 좋겠다. 사실상 ML을 공부하는 것과 실전에 활용하는 것은 다른 부분이 많다. 만약 이미 잘 사용하고 있는 디자인 패턴 내용이라면 다른 새로운 패턴과 발상을 배우는 것도 좋은 선택이다.
파트별 주요 키워드를 조금 정리해봤다.
1. 데이터 표현
특징 해시-FARM_FINGERPRINT() *빅쿼리에서 사용할 수 있는 함수
특징 교차-ML.FEATURE_CROSS() *빅쿼리에서 사용할 수 있는 함수
2. 문제 표현
리프레이밍-회귀 문제를 분류 문제로, 분류 문제를 회귀 문제로 간주
앙상블
캐스케이드-특정 예외사항에 대한 대비 모델까지 완성되어야 하는 경우.
예를 들어 역의 자전거 비축 비용을 추정하기 위해 샌프란시스코의 자전거 대여소와 반납소 사이의 거리를 예측한다고 하면 4시간보다 길게 대여하는 비정상적인 데이터 사용자와 짧게 대여하는 사용자간 행동이 아주 다르기 때문에 ML 설계 또한 이 2 상황을 모두 포함할 수 있어야 한다. 그렇다면 먼저 일반적인(단거리) 상황인지, 장거리 상황인지를 먼저 분류하고 각각을 모델로 만드는 편이 낫다.
중립클래스
3. 모델 학습
체크포인트
전이 학습(transfer learning)
4. 탄력성
스트레이트리스 서빙 함수
연속모델 평가
5. 재현성
브리지 스키마
워크플로 파이프라인
특징 저장소
책 마지막 부분에 각 ML디자인 패턴의 주요 용어와 하는 역할을 간단하게 도식화한 자료가 있는데 책 전체 내용을 정리하기에 유용해 보인다.
- 인공지능과 머신러닝, 딥러닝 기술의 발전으로 풀리지 않던 많은 문제들이 해결되기 시작했습니다. 다양한 분야에서 딥러닝 기술을 적용하려 많은 연구들이 진행되었고, 이 중 유의미한 성과를 내는 연구 결과도 있었습니다.
- 반면 많은 연구들이 실제 현장에 적용되지 못한 연구들도 많습니다. 어쩌다 이런 일이 발생한 것일까요?
- 머신러닝과 딥러닝은 운영 비용이 비쌉니다.
- 데이터를 기반으로 알고리즘을 만드는 학문이다 보니, 데이터를 만들고 해석하는데 많은 비용이 발생합니다.
- 다른 학문에 비해 해석 가능한 영역이 좁다 보니, 많은 학습을 반복적으로 수행합니다.
- ML 모델의 수명주기는 반복적이며, 지속 가능한 모델을 요구합니다.
## 디자인 패턴
- 컴퓨터 프로그래밍에서 디자인 패턴은 반복적으로 발생하는 문제들에 대해 많은 사람들이 하나의 대응 방법을 체계적으로 정리한 학문입니다.
- 문제들은 늘 발견되고, 다양해지기 때문에 디자인 패턴 역시 지속적으로 발전하는 학문입니다.
- 머신러닝 디자인 패턴은 머신러닝과 딥러닝 모델을 학습하고, 배포하는 과정에서 반복적으로 발견되는 문제들을 정리한 책입니다.
- 따라서 머신러닝과 딥러닝을 이론 또는 코드를 학습하는 책이 아니라, 실제로 운영되는 환경에서 발생하는 문제들에 대한 책입니다.
## MLOps와 DevOps
- Devops는 과거에 분리되었던 개발과 운영을 하나로 통합하여 불필요한 비용을 제거합니다. 그에 대한 결과로 탄력적인 개발이 가능하고, 개발 속도가 기하급수적으로 빨라졌습니다.
- 개발 혁신이라고도 불리는 DevOps는 현재 필수 요소로 자리 잡아, 많은 사람들이 DevOps를 적용하려 노력하고 있습니다.
- 반면 머신러닝과 딥러닝 분야에서는 MLOps라는 바람이 불고 있습니다. 지금까지 데이터 사이언티스트와 데이터 엔지니어링, 모델 서빙이 분리되어 모델 학습과 배포, 운영이 분리된 환경에서 개발이 진행되고 있었습니다.
- 이러한 환경은 많은 문제를 야기했고, 성공적인 머신러닝 알고리즘을 도입하는데 장애물이 되기도 하였습니다. MLOps는 모델 학습과 배포, 운영을 하나의 연속된 과정으로 합쳐 다양한 부분에서 자동화를 이뤄내는 효과를 가져옵니다.
## CI, CD, CT
- DevOps에서 말하는 CI/CD는 Continuous Integration(CI), Continuous Delivery(CD)를 의미합니다. 지속적인 통합과 지속적인 배포를 추구하여 개발 혁신을 이뤄냈습니다.
- MLOps는 DevOps의 CI/CD 정신을 계승하고 Continuous Training(CT)을 추가적으로 고려한 확장된 자동화 파이프라인을 추구합니다.
## 대상 독자
- 머신러닝을 처음 접하고, 시스템을 도입해 보려는 사람에게는 오히려 적절하지 않을 수 있습니다. 머신러닝 시스템을 위해 준비해온 데이터 전처리, 수동적인 배포 과정은 머신러닝의 마법 같은 결과를 보고 지나온 가시밭길 고통을 잊을 수 있기 때문입니다.
- 반면 머신러닝을 어느 정도 자유롭게 활용할 수 있고, 이전 경험을 되살려 다른 프로젝트에도 머신러닝을 적용하고 확장하는 사람에게는 등대 같은 책이 되어줄 것입니다. 반복된 데이터 수집, 데이터 전처리, 모델 학습, 이전 모델과의 비교, 배포... 끝나지 않을 것 같은 쳇바퀴를 끝낼 수 있습니다. 바로 자동화된 파이프라인을 통해서요.
머신러닝, 딥러닝이 많은 각광을 받게 되면서 처음에 가장 관심이 쏠린 부분은 아무래도 모델링 혹은 학습 부분입니다. 생산 단계(Production Level)보다 연구 단계(Research Level)이 선행되다 보니 많은 서적이 정해진 데이터셋 하에서 좋은 모델을 설계하여 성능을 내는 쪽에 편중되어 있었습니다.
하지만 최근에는 머신러닝이 많은 서비스에 적용되면서 서빙 단계에서 머신러닝을 잘 사용하기 위한 MLOps 등이 많은 주목을 받고 있습니다. 코세라에도 Andrew Ng 교수님이 MLOps 개설하셨고, (그러나 본인은 등장하지 않으시는...) 국내 강의 사이트인 패스트캠퍼스에도 MLOps 강의가 생겼습니다. 또한 기업의 MLOps 만을 담당하는 스타트업도 있지요.
이제는 서가에서도 머신러닝의 서빙과 관련된 서적을 어렵지 않게 발견할 수 있는데요. 본 책 역시 Production Level 이 강조되는 흐름에 발맞춰 등장한 MLOps 책 중 하나라고 할 수 있겠습니다.
디자인 패턴 사전
본 책에서는 총 30가지의 머신러닝 디자인 패턴에 대해 논하고 있습니다. 머신러닝을 설계하다보면 고려해야 할 사항이 상당히 많은데요. 이러한 고려사항에 대해서 일정한 패턴을 정해두면 재현성있는 결과를 도출할 수 있습니다. 본 책에서 제시하고 있는 30가지 패턴은 여러 도메인에서 데이터를 적용하고 모델을 서빙하는 과정에 있어서 고려해야 할 사항을 빠짐없이 제시하고 있습니다.
머신러닝을 서빙하는 사람이라면 데이터를 준비하는 과정부터 모델 서빙, 그리고 결과로부터 모델을 설명하는 과정까지 여러 과정을 고려해야만 하는데요. 실제 데이터는 연구 단계에서와 달리 굉장히 고려해야 할 사항이 많기 때문에 예상치 못한 변수가 많이 발생하게 되는데요. 이 책에서는 이런 변수를 사전에 방지하기 위한 여러가지 방법을 사전식으로 조목조목 짚어가며 설명하고 있습니다. 어떤 도메인의 서비스라도 자사 서비스에 머신러닝을 적용하고자 하는 사람이라면 한 권 쯤 비치해두고 볼 만한 책이라고 할 수 있겠습니다.
디자인 패턴이란 전문가 수백 명의 경험을 간단하고 접근하기 쉽게 체계화한 것이다. 이 책에는 데이터의 표현, 운영, 반복성, 재현성, 유연성, 설명 가능성, 공정성에 대한 30가지 디자인 패턴이 담겨 있다. 각 패턴에는 문제에 대한 설명, 다양한 잠재적 솔루션, 상황에 적합한 기술 노하우가 포함되어 있다. 머신러닝 프로세스 전반에 걸쳐 마주하는 일반적인 문제를 해결하고 싶은 실무자라면, 저명한 3명의 구글 엔지니어가 이 책에서 분류한 ‘이미 입증된 방법’을 배우고 실천해보자.
[목차]
CHAPTER 1 머신러닝 디자인 패턴의 필요성
CHAPTER 2 데이터 표현 디자인 패턴
CHAPTER 3 문제 표현 디자인 패턴
CHAPTER 4 모델 학습 디자인 패턴
CHAPTER 5 탄력성 디자인 패턴
CHAPTER 6 재현성 디자인 패턴
CHAPTER 7 책임 있는 AI
CHAPTER 8 연결 패턴
[주요 내용]
- ML 모델을 학습, 평가, 배포할 때 겪는 일반적인 문제와 해결법
- 임베딩, 특징 교차 등을 포함한 다양한 ML 모델 유형의 데이터 표현
- 특정 문제에 적합한 모델 유형을 선택하는 법
- 체크포인트, 배포 전략, 하이퍼파라미터 튜닝을 사용하는 강력한 학습 루프 구축
- 새로운 데이터를 반영하기 위한 재훈련, 업데이트할 수 있는 확장 가능한 ML 시스템 배포
- 이해관계자를 위한 모델 예측을 해석하고 공정성을 확인하는 법
- 모델의 정확도, 재현성, 탄력성을 향상하는 법
[서평]
시중의 머신러닝 입문 서적 대부분은 머신러닝이 무엇인지와 어떻게 작용하는 지에 대한 내용이 대부분이다. 그 다음 AI 연구랩에서 나온 새로운 방법의 수학적 측면을 설명하고 AI프레임워크를 사용하여 구현하는 방법을 배우는 방식이다.
반면 이책은 경험이 풍부한 머신러닝 실무자가 머신러닝을 실제 문제에 적용할 때 사용하는 팁과 트릭의 근간이 되는 이유, 이를 깨달은 힘겨운 과정에 대한 경험을 배울수 있다. 이책은 머신러닝 과학자가 아니라 기업의 머신러닝 엔지니어를 위한 책이다.
이책에서는 지금 활발히 진행중인 분야에 대해서는 다루고 있지않고 있다. 예를 들어 양방향 인코더, 어텐션 메커니즘, 단락 계층등에 대한 내용은 거의 찾을 수 없을 것이다.
이 책은 기업의 머신러닝 엔지니어가 일상 업무에 사용할 만한 일반적인 패턴만을 포함하고자 했기 때문이다. 데이터 아키텍처를 예를 들면 데이터 아키텍처에 대한 대학 과정은 다양한 데이터 구조의 구현을 탐구해야 하고, 데이터 아키텍처 연구원은 수학적 속성을 공식적으로 표현하는 방법을 배워야 한다. 그러나 실무자에게 필요한 것은 더 실용적인 내용이다. 기업의 소프트웨어 개발자는 배열, 링크드 리스트, 맵, 세트, 트리를 효과적으로 사용하는 방법만 알면된다. 이책은 구글의 뛰어난 머신러닝 석학들이 모여서 집필한 “머신러닝 디자인 패턴”은 기업에서 발생하는 대부분의 시나리오에 대응할 수 있는 30가지 패턴들을 다루고 있습니다. 검증된 아키텍처와 비즈니스 사용 사례를 통해 바퀴를 재발명하는 데 들어가는 시간을 줄이고, 꼭 필요한 비즈니스에 집중 할수 있을겁니다.
다양한 기술 의사결정에 있어서 기준점이 될어 줄뿐만 아니라 데이터 분석팀을 어떻게 구성할지 부터 아키텍처 구성에 있어서 확신과 안도감을 줄수 있는 지침서 입니다.
34,200원으로 싸지는 않은 책이지만 그만한 가치는 하는 책이라고 생각합니다. 최근 AI가 많이 유행해짐에 따라서, 기업에서도 많은 수요가 생기고 학생 및 직장인분들도 AI 공부를 하는 상황입니다. 그래서, PyTorch, TensorFlow 등을 이용해서 CIFAR-10 등의 벤치마크 데이터를 돌려보거나 사이드 프로젝트를 하는 사람도 많아졌습니다.
하지만, 기업의 채용공고를 보면 알겠지만 우대사항에 "모델 서빙을 직접 해본 경험이 있으신 분" 이라는 문구가 많이 생겨나고 있습니다. 모델을 만드는 것도 중요하지만, 이를 어떻게 배포하고 관리하는지 또한 중요한 영역이고 마침표가 되는 부분이기 때문입니다.
이 책은 그러한 마침표의 이정표가 되는 책이라고 생각합니다. AI 리서치를 하시는 분들에게는 불필요한 책이겠지만 취업을 준비하는 학생분들과 엔지니어분들이 읽으시면, 도움이 많이 될거라고 생각합니다. 전체적으로 많이 만족한 책인 것 같습니다.
우선, 이 책은 머신러닝에 대한 사전 지식과 가병누 프로젝트 경험이 있는 분들에게 적합합니다. 업무 경험은 아니더라도, 캐글이나 데이콘 같은 대회를 1,2개 나간 경험이 있다면 좀 더 와닿을 것 같습니다. 즉, 현실 데이터를 이용해서 어떤 결과를 머신러닝 알고리즘으로 만들어보려고 시도한 경험이 있다면 이 책의 보기 적합한 수준이라고 생각합니다. 또한, 이 책에서는 쿼리문과 keras, tensorflow2 에 대한 소스코드가 나옵니다. 그러니, 이에 대한 어느정도 문법을 이해한 상태여야 책을 좀 더 잘 이해할 수 있습니다.
(저자에 의하면) 책은 최신 알고리즘 등을 다루지 않습니다. 학계를 위한 책이 아닌 기업에서 머신러닝 엔지니어를 하고 있는 분들을 위한 책이라고 합니다. 실제 내용을 봐도 어떤 문제에 부딪혀 있을 때 여러가지 디자인 패턴을 통해 이를 극복하려는 이유에 대해 설명하고 이를 실습할 수 있습니다. 내용들이 워낙 현실에서 머신러닝 업무를 하면서 겪은 케이스들을 다루기에 실무를 하면서 쿡북으로 보기 좋은 책이라는 생각이 듭니다. 쉬운 책은 아니고, 중급서 이상의 수준이라고 생각하면 좋을 것 같습니다.
내용은 다양한 케이스에 다양한 패턴들이 들어와서 실제 그러한 문제를 겪어보지 못한 케이스들에 대한 내용도 있어서 이해하는데 시간이 좀 걸리기도 했습니다. 현업 경험이 부족하더라도 캐글이나 데이콘 같은 대회 경험이 많은 분들이 확실히 도움받을 책이라고 생각이 들었습니다. 책에서 모든 디자인 패턴을 이해하지는 못하였고, 여러 번 봐야되는 챕터들이 많기에 단기간에 이해하려 하지말고 일단 빠르게 훏어보고 필요할때마다 꺼내서 보면 좋은 책이라는 생각이 들었습니다. 머신러닝 디자인 패턴을 다룬 책은 아직 국내에 생소한데 실험적인 부분에서 좋은 책이라고 생각합니다. 오픈소스나 구글링을 보면 좀더 최신 케이스들이 있겠지만 이 책에서 다루는 디자인 패턴이나 원론들이 유행에 안 맞거나 하는 것 같지는 않습니다. 원리와 기법에 초점을 두고 본다면 이 책에 내용들은 반드시 피와살이 될 거라고 생각합니다.
효율적인 머신러닝 파이프라인과 MLOps를 구축하는 30가지 디자인 패턴을 배울 수 있는 책이다. 데이터 준비, 모델 구축, MLOps의 일반적인 문제에 대한 솔루션 구현하기를 강의하며 머신러닝이라는 바다를 항해하는 데 꼭 필요한 나침반 같은 역할을 한다.
디자인 패턴이란 전문가 수백 명의 경험을 간단하고 접근하기 쉽게 체계화한 것이다. 이 책에는 데이터의 표현, 운영, 반복성, 재현성, 유연성, 설명 가능성, 공정성에 대한 30가지 디자인 패턴이 담겨 있다. 각 패턴에는 문제에 대한 설명, 다양한 잠재적 솔루션, 상황에 적합한 기술 노하우가 포함되어 있다.
저명한 3명의 구글 엔지니어가 쓴 이 책은 특히 머신러닝 프로세스 전반에 걸쳐 마주하는 일반적인 문제를 해결하고 싶은 실무자들에게 큰 도움이 될 것이다. 검증된 아키텍처와 비즈니스 사용 사례는 머신러닝을 구축하는 시간을 줄여주며, 비즈니스에 머신러닝을 적용하는 효과적인 방법을 알려준다.
특히 단순히 ‘돌아가는 코드를 수록해놓은 책’이 아니라 다양한 기술 의사결정의 기준점이 되어줄 책이라는 책소개에 격하게 동감한다. 특정 상황에서 자신이 내린 기술 의사결정이 올바른 것인지, 제약은 무엇이고 트레이드오프는 무엇인지를 올바른 방향으로 안내한다.
ML 모델을 학습, 평가, 배포할 때 겪는 일반적인 문제와 해결법 외에도 임베딩, 특징 교차 등을 포함한 다양한 ML 모델 유형의 데이터 표현과 특정 문제에 적합한 모델 유형을 선택하는 법, 체크포인트, 배포 전략, 하이퍼파라미터 튜닝을 사용하는 강력한 학습 루프 구축, 새로운 데이터를 반영하기 위한 재훈련, 업데이트할 수 있는 확장 가능한 ML 시스템 배포, 이해관계자를 위한 모델 예측을 해석하고 공정성을 확인하는 법, 모델의 정확도, 재현성, 탄력성을 향상하는 법들이 가득하다.
지금은 바야흐로 인공지능의 시대라고 말해도 과언이 아닐 정도로 수많은 분야의 사람들이 기계학습, 특히 딥러닝을 활용하고 있다. 나 역시도 딥러닝에 대해 꾸준히 학습 해 가면서 시대에 뒤처지지 않고 좋은 개발자가 되기 위해 노력 중이다. 이런 상황 속에서 딥러닝 네트워크에 대해서만 막연하게 학습하는 것은 그저 암기할 대상만 늘어날 뿐 전혀 실용적이지 않아 보였다.
개발 공부를 하면서 학습한 내용을 실용적으로 만들기 위해서는 하나의 프로세스를 수행하기 위한 과정을 실천할 수 있어야 한다. 물론 학습 초기 단계에서는 문법에 익숙해지고, 간단한 어플리케이션을 만들 수 있는 것으로도 충분하다. 그러나 충분히 숙련된 이후에도 이 단계에 머물러 있는 것은 튜토리얼 단계에만 머물러 있는 게이머와 비슷하다. 본격적인 여행을 나서기 위해선 다양한 상황에 대처할 수 있는 스킬들과 지식을 쌓아 다양한 상대를 만나더라도 충분히 유연한 대처가 가능해져야 한다. 물론 모든 프로세스를 완벽하게 익혀야 한다는 뜻은 아니다. 무수히 많은 상대에 대한 지식을 미리 쌓기보단 필요에 의해 그때그때 적당한 지식을 습득하는 편이 더 효율적일 것이다.
그런 의미에서 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에 대해 한번쯤 공부해야 겠다는 생각이 들던 즈음, 이 책을 보고 상당히 반가웠다. 이 책이 배송되고, 실제로 읽어보면서 상당 부분을 흥미진진하게 읽었다. 나름 개발 과정에 있어 고민했던 부분에 대한 내용이 나와 크게 공감하였다. 또한 종종 문제를 마주하긴 했는데, 어떤 키워드인지 감이 잡히지 않는 것들도 명쾌하게 정리해주어 비슷한 문제 상황을 빨리 다시 보고 싶다는 생각이 들기도 하였다.