본문 바로가기
+ 펴낸 책

파이토치 딥러닝 마스터

by 책만 2022. 6. 22.

파이토치 딥러닝 마스터

모의 암 진단 프로젝트로 배우는 신경망 모델 구축부터 훈련, 튜닝, 모델 서빙까지

 

엘리 스티븐스, 루카 안티가, 토마스 피이만 지음 | 현동석 옮김
604쪽 | 35,000원 | 2022년 6월 30일 출간 | 185*240*29 | ISBN 9791189909413

 

판매처 | [교보문고] [YES24] [알라딘] [영풍문고] [인터파크] + 전국 교보문고 매장

전자책판매처 | [리디북스] [교보문고] [YES24] [알라딘] | ISBN 9791189909475 | PDF 포맷 | (8월 31일 출간)


* 원서: Deep Learning with PyTorch: Build, train, and tune neural networks using Python tools

 

 소스 코드 다운로드: https://github.com/onlybooks/pytorch

★ 정오표:   https://www.onlybook.co.kr/entry/pytorch-errata 

 

파이토치 핵심 개발진이 직접 집필한 책으로, 최고 실무자가 바로 옆에 앉아서 딥러닝의 기초부터 실제 프로젝트 활용까지, 모델 성능 평가와 개선 방안을 차근차근 알려주는 느낌을 준다! 

 

텐서, 신경망 같은 딥러닝 데이터 구조의 개념과 원리부터 파이토치와 의료 데이터를 활용한 완전하게 동작 가능한 딥러닝 서비스 구축부터 배포까지, 딥러닝 전체 워크플로를 모두 다룬다!

 

파이토치를 활용해 신경망과 딥러닝 시스템을 만드는 방법을 알려준다. 종양 이미지 분류기라는 실전 예제 구축 작업을 바닥부터 배우는 실용적인 내용이 가득하다. 동시에 파이토치 텐서 API, 파이썬의 데이터 로딩, 훈련 모니터링, 결과 시각화 등 딥러닝 파이프라인 전체에 대한 최고의 실습 사례를 다룬다. 

 

| 이 책에서 다루는 내용 | 

심층 신경망 훈련
 모듈과 손실 함수 구현
 파이토치 허브의 사전 훈련된 모델 활용
 주피터 노트북 코드 샘플 탐구

  딥러닝 모델 성능의 분석, 평가, 개선 
  폐 종양 CT 영상 데이터를 활용한 모델 분석부터 서빙까지 엔드투엔드 모의 암 진단 프로젝트

파이썬을 사용하는 많은 딥러닝 도구가 있지만 그중 파이토치 라이브러리가 가장 파이썬스럽다.
파이토치는 넘파이나 사이킷런 같은 파이데이터 도구를 아는 이들에게 친숙하며 고급 기능의 제한 없이도 딥러닝을 단순하게 만든다.
또한 빠르게 모델을 만드는 데 뛰어나며 노트북부터 기업 규모까지 자연스러운 확장이 가능하다.
애플, 페이스북, JP모건 체이스 같은 기업에서 활용하는 파이토치는 여러분의 경력을 확대해 나가는 데에도 도움이되는 훌륭한 기술이다.

이 책에서는 파이토치를 활용해 신경망과 딥러닝 시스템을 만드는 방법을 알려준다. 
종양 이미지 분류기라는 실전 예제 구축 작업을 바닥부터 배우는 실용적인 내용이 가득하다. 
동시에 파이토치 텐서 API, 파이썬의 데이터 로딩, 훈련 모니터링, 결과 시각화 등 딥러닝 파이프라인 전체에 대한 최고의 실습 사례를 다룬다. 
이 책은 머신러닝에 관심이 있는 파이썬 프로그래머에게 훌륭한 학습서가 될 것이다.

 

추천의 글

드디어 우리는 파이토치에 대한 최고의 교본을 얻게 됐다. 기본은 물론 추상적인 내용에 대해 매우 구체적으로 다루는 책이다.
- 서미스 친탈라 / 파이토치 공동창시자

 

독자가 잘 이해할 수 있도록 딥러닝을 분류하여 논리적으로 만든 코드 샘플과 함께 제공한다.
- 매튜 장 / 엔비디아

 

시의적절하고 실용적이며 빈틈이 없다. 책장에 두지 말고 노트북 옆에 둘 것!
- 필리페 판 베르겐 / P² 컨설팅

 

딥러닝에 대해 매우 실용적으로 개괄해준다. 최고의 강의를 눈으로 읽을 수 있다.
- 올란도 알레호 멘데즈 모랄레스 엑스피리안

 

이 책에서는 기본적인 딥러닝의 원리와 가장 기본이 되는 텐서를 다루는 방법 등에 대한 내용을, 많이 사용하는 파이토치 핵심과 함께 설명해줍니다. 각 주제별로 핵심을 찌르는 그림들도 포함되어 있어 쉬운 이해를 돕습니다.

이 기본적인 지식을 바탕으로 2부에서는 실제 데이터를 사용해 폐암의 결절이나 종양 등을 예측하는 실제 프로젝트를 통해, 대용량의 데이터와 모델에 대해 다루어 실무를 간접적으로 체험할 수 있습니다. 명료한 핵심 설명과 실제 프로젝트에 대한 지식뿐만 아니라 여러분들이 수행하는 프로젝트, 특히 비전 관련 프로젝트에 바로 적용할 수 있을 정도의 실질적인 정보를 제공하는 훌륭한 책으로 모두에게 추천드립니다. 저도 아주 재미있게 읽었습니다. 

- 김성훈 / 홍콩과기대 컴퓨터공학부 부교수

 

의과대학에서 선형대수나 컴퓨터 과학을 제대로 배울 기회가 없었던 나는 이 책을 읽기 전까지 오늘날 딥러닝 툴들이 데이터 핵심 포맷으로 사용하는 텐서(Tensor)를 완벽하게 이해하기 어려웠다. 물론 지금도 그 깊은 수학을 잘 이해하고 있다고 자신하지는 못하지만 이 책을 통해 텐서에 대한 직관을 얻을 수 있었고, 딥러닝을 통해 어떤 문제를 해결하려면 주어진 텍스트, 이미지, 소리, 동영상 등 데이터의 형태에 상관없이 어떤 형태로든 텐서를 변화시켜야 한다는 사실을 알게 되었다. 세상의 많은 데이터들을 그런 텐서로 표현할 수 있고, 그것을 통해 어쩌면 우리의 사고 과정을 자동화할 수 있음에 경외심마저 생겨났다. 

오늘날 인공지능은 모든 산업과 일상에 영향을 주기 시작했고, 의학과 의료도 예외는 아니다. 의료 분야는 데이터에 대한 프라이버시와 보안이 매우 중요하고, 임상 시험을 통해 안정성과 효과성을 입증해야 하며, 결과에 대한 설명가능성과 모델의 해석 가능성을 매우 중요하게 따지기 때문에, 컴퓨터 과학자들이 보기에는 매우 보수적인 영역이라 할 수 있다. 그렇지만 모든 발전이 그렇듯이 ‘문제를 특정’했다는 것은 곧 그 문제를 해결할 길로 들어섰음을 의미하는 것이기도 하다.

환자의 말과 환자의 신체가 보내는 직간접적인 신호들을 경청하는 것이 의사의 일상이다. 이제 우리에게는 그런 신호들에서 의미 있는 패턴을 자동으로 찾아낼 수 있는 도구를 손에 넣을 수 있게 되었다. 이 도구는 흔히 말하는 “~이 없는 세상으로 다시 돌아갈 수 있을까?”라는 질문에서 “~”에 해당하는 것으로, 나는 이와 같은 ‘지능 기반 의료’가 필연적인 귀결이라고 본다. 파이토치의 일반적인 내용을 다루는 이 책에서도 공교롭게 CT 영상 데이터를 가지고 폐 결절을 진단하는 이야기를 펼치며 내용을 설명한다. 따라서 지능 기반 의료를 준비하는 의료인이나 예비 의료인들에게도 이 책은 파이썬, 파이토치, 텐서, 딥러닝 등을 이해하는 데 큰 도움을 줄 것이라 믿는다. 
- 고석범 / 신경과 전문의, 『헬스 케어 인공지능과 머신러닝』외 다수 번역 집필

 

책장을 둘러보면 이미 충분한 머신러닝과 딥러닝 책이 넘쳐나고, 매달 아카이브(arXiv)에 올라오는 머신러닝+인공지능ML+AI 관련 논문은 지수 그래프를 그리기 시작했다. 이렇게 인공지능과 관련해 폭발적인 지식이 쏟아져 나오는 상황에서 시간이 부족한 사람들을 위해 뭔가 선택을 돕는 기준점이 있어야 한다. 만일 무인도에 떨어진다고 할 때 가져갈 AI 관련 책을 딱 한 권만 선택해야 한다면, 『파이토치 딥러닝 마스터』를 확고부동한 1위로 뽑은 개인적인 이유를 여기서 소개하지 않을 수 없다.

이 책의 가장 큰 미덕은 복잡한 수식도 아니고, 멋진 파이토치 API 설명도 아닐 뿐더러, 소화하기 좋게 만들어 바로 쓸 수 있는 예제도 아니다. 그보다는, 현업 딥러닝 전문가의 작업을 바로 곁에서 목격하는 듯한 생생한 현장감에 있다. 이 책에서 전달하고자 하는 딥러닝 프로젝트의 진실은 모닝커피 한잔을 곁들인 멋진 논문 읽기가 아니라, 손과 신발에 흙을 잔뜩 묻혀가며 제대로 동작하기 전까지 무수한 잘못을 시행착오 끝에 찾아내야 하는 무척 고된 작업이다. 너무나도 뻔한 개와 고양이 분류나 기존 모델을 대상으로 하는 약간의 전이 학습(transfer learning)이 아니라, 정말로 세상을 위해 풀어야 할 복잡한 문제(CT 영상 데이터로 폐 종양 탐지)를 점진적으로 해결하는 과정에서 부딪히는 다양한 어려움을 극복해 나가는 모습을 보고 있노라면, 현업 딥러닝 개발자는 물론이고 장래 딥러닝 개발자들도 어떤 지식과 어떤 자세와 어떤 노력이 필요한지를 온몸으로 느끼게 될 것이다.
- 박재호 / ‘컴퓨터 vs 책’ 블로그 운영자, 유튜브 채널박재호 운영, 『클린 코드』 역자

 

지난 10년간의 인상적인 뉴스들을 돌이켜보면 알파고와 이세돌 9단의 대국이 빠질 수 없을 것입니다. 이제 신문과 뉴스에서는 인공지능이 어디까지 발전하고 있는지, 어떤 일들이 가능해졌는지를 흔히 접할 수 있습니다. 개발자들도 마찬가지입니다. 인공지능을 전공하지 않았더라도 GPT-3나 DALL·E 2 같은 모델들에 대해서 들어보고 또 그 모델들이 만들어내는 결과를 보면서, 누구나 한 번쯤 5~10년 후에 딥러닝이 얼마나 발전할지 걱정 섞인 고민을 해봤을 것입니다. 이렇듯 한 번쯤 미래에 대한 고민과 함께 딥러닝 학습을 생각해봤던 개발자들께 이 책을 추천하고 싶습니다. 

이 책에서는 지루한 이론이나 수식보다는 코드를 실행하고 결과를 직접 눈으로 보면서 처음부터 끝까지 흥미를 잃지 않고 파이토치와 딥러닝을 익힐 수 있습니다. 특히, 단순히 구현에만 그치지 않고 학습한 모델을 어떻게 평가하고 개선하는지를 따라가며 배우다 보면, 좋은 멘토와 함께 실무에서 프로젝트를 성공적으로 마무리한 기분이 드실 겁니다. 모쪼록 많은 분께서 이 책을 통해 파이토치를 접하시고 ‘딥러닝의 대중화’가 앞당겨지기를 기원합니다.
- 박정환 / 파이토치 한국 사용자 모임 대표

 

대학원생들에게 AI를 가르치는 과정에서 나는 파이토치보다는 텐서플로 예제를 활용해 딥러닝 원리를 강의한 적이 더 많았다. 물론, 기본적으로 파이토치와 텐서플로를 사용하는 개발자 입장에서는 두 기술 간에 별다른 구조적인 차이는 없을 것이라 생각한다.
이 책은 놀랍게도 파이토치에 기반한 사용 방법에 국한해 설명하기보다는 딥러닝 모델의 원리를 이해시키며, 모델을 생성하고 학습하는 데 공통적으로 필요한 원리를 잘 다뤄준다. 따라서 파이토치에 기반한 딥러닝 모델을 공부하고자 하는 학생뿐만 아니라, 딥러닝을 배우고 싶은 학생들에게 자신있게 추천할 수 있는 책이다. 더구나, 여러 가지 응용을 다양하게 다루기보다는, 의료 분야의 응용에 초점을 두고 데이터를 훈련시키고 모델을 적용하는 데 집중한 점은 이 책의 응용 적용이 의료 분야에 있어서 전문성을 기르는 데 도움을 줄 것이라 생각한다.
잘 훈련된 인공지능 인력이 여러모로 부족한 상황이다. 부디 많은 젊은 세대 혹은 타 분야 전문가분들이 이 책을 혼자, 그룹으로, 강의를 통해 배워서 인공지능 전문성과 역량을 키울 수 있기를 바란다.
- 최재식 / KAIST 김재철 AI대학원 교수, (주)인이지 대표이사

 

텐서플로나 최근 부상하고 있는 JAX 등 다양한 딥러닝 연구개발 오픈소스 라이브러리들이 있지만 여전히 AI 연구자들에게 가장 인기있고 널리 활용되는 라이브러리는 파이토치입니다. 특히 원서가 파이토치 사용자들에게 가장 널리 읽혀진 기본서임에도 불구하고 국내에 번역본이 출간되지 않아 그간 아쉬움이 컸습니다. 좋은 번역으로 출간된 이 책이 국내 AI 연구에 관심을 갖고 입문하는 분들께 많은 도움이 될 것이라 생각합니다.
네이버 책임리더로서 매우 바쁠 텐데도 후배들을 위해 이런 멋진 책을 번역해준 현동석 님께 다시 한번 축하와 감사 말씀을 드립니다!
- 하정우 / 네이버 AI랩 연구소장

 

파이토치를 활용해 딥러닝 모델을 구축해서 배포하기까지의 전체 프로젝트를 개념 설명과 코드 예제를 통해 알기쉽게 설명하는 입문서입니다. 이론과 실전의 균형이 잘 잡힌 자세한 설명이 돋보입니다. 특히 어려운 개념을 다룰 때 그림과 재미있는 비유를 사용하여 초보자도 이해하기 쉬운 점은 이 책의 큰 미덕입니다.
- 황승원 / 서울대학교 컴퓨터공학부 교수

 

| 이 책의 구성 | 

1부 ‘파이토치 핵심’은 파이토치 프로젝트를 이해하는 데 필요한 기반 기술을 익히고, 직접 만들어보기 시작한다. 그리고 파이토치 API와 함께 파이토치를 라이브러리로 만들어주는 숨겨진 몇 가지 기능을 살펴보고 초기 분류 모델을 훈련해본다. 1부가 끝나면 실제 프로젝트를 건드려 볼 준비가 된 셈이다.

 

1장 ‘딥러닝과 파이토치 라이브러리 소개’는 라이브러리로서 파이토치가 딥러닝 혁명에서 차지하는 위상을 소개하고 다른 딥러닝 프레임워크와 차별화되는 요인을 다룬다.

 

2장 ‘사전 훈련된 신경망’은 사전 훈련된 예제 신경망을 실행하면서 파이토치 동작을 확인해본다. 실습에서는 파이토치 허브의 모델을 어떻게 내려받고 실행하는지 설명한다.

 

3장 ‘텐서 구조체’는 파이토치의 기본 빌딩 블럭인 텐서(Tensor)를 소개하고 텐서 API와 더불어 세부 구현에서 숨겨진 부분도 보여준다.

 

4장 ‘실제 데이터를 텐서로 표현해보기’는 텐서로 얼마나 다양한 데이터를 표현할 수 있는지를 알아보고 딥러닝 모델을 위해 텐서를 어떻게 만들어야 하는지도 알려준다.

 

5장 ‘학습 기법’은 경사 하강을 통해 학습 메커니즘을 따라가 보고 파이토치가 어떻게 자동미분으로 경사 하강을 활성화하는지 알아본다.

 

6장 ‘신경망을 활용한 데이터 적합’은 nn과 optim 모듈을 이용하여 파이토치에서 회귀를 위한 신경망 모델을 만들고 훈련하는 과정을 보여준다.

 

7장 ‘새와 비행기 구별하기: 이미지 학습’은 앞 장에서 배운 내용을 토대로 이미지 분류를 위한 완전 연결 모델을 만들고 파이토치 API 지식을 넓힌다.

 

8장 ‘컨볼루션을 활용한 일반화’는 컨볼루션 신경망을 소개하고 신경망 모델의 파이토치 구현을 위한 고급 개념을 다룬다.

 

 

2부 ‘실전 이미지 학습: 폐암 조기 진단’은 폐암 자동 진단을 위한 종합적인 솔루션에 우리를 조금씩 가까이 데려간다. 이런 어려운 문제는 암 판별 같은 광범위한 문제를 푸는 데 필요한 실세계의 접근 방식을 보여주는 동기가 된다. 깔끔한 엔지니어링과 트러블슈팅 그리고 문제 해결에 집중하는 대규모 프로젝트다.

 

9장 ‘암과 싸워 이기기 위한 파이토치 활용’은 CT 이미지에서 출발해 폐 종양 분류를 위해 사용할 엔드투엔드 전략을 설명한다.

 

10장 ‘여러 데이터 소스를 통합 데이터셋으로 합치기’는 CT 스캔 이미지에 사람이 레이블링한 애노테이션 데이터를 읽고 필요한 형태의 정보로 바꾸어 텐서로 변환하는 작업을 표준 파이토치 API로 수행한다.

 

11장 ‘종양 탐지를 위한 분류 모델 훈련’은 10장에서 소개한 훈련 데이터를 사용하는 첫 분류 모델을 소개한다. 모델을 훈련하고 기본 성능 메트릭을 수집한다. 동시에 훈련 모니터링을 위한 텐서보드(TensorBoard)를 소개한다.

 

12장 ‘메트릭과 증강을 활용한 훈련 개선’은 표준 성능 메트릭을 알아보고 구현하며 이 메트릭을 사용해 이전 훈련에서 어떤 약점이 있는지를 찾아낸다. 이후 이런 약점을 극복하기 위해 데이터 밸런싱과 증강을 사용해 개선된 훈련셋을 만든다.

 

13장 ‘세그멘테이션을 활용한 의심 결절 탐색’은 전체 CT 스캔을 대상으로 종양이 있을 지점을 표시하는 히트맵(hitmap)을 만들기 위한 세그멘테이션과 픽셀투픽셀(pixel-to-pixel) 모델 아키텍처를 설명한다. 이 히트맵은 사람이 레이블링한 애노테이션 데이터가 없는 경우 CT 스캔에서 폐 결절(nodule)을 찾는 데 사용될 수 있다.

 

14장 ‘엔드투엔드 결절 분석, 그리고 남겨진 과제’는 최종 엔드투엔드 프로젝트를 구현한다. 분류에 따라 만들어진 새로운 세그멘테이션 모델을 사용해 암 환자를 진단한다.

 

 

3부 ‘드디어, 배포’에서는  배포를 다루는 1개 장으로 구성되어 있다.

 

15장 ‘제품으로 배포하기’에서는 파이토치 모델을 어떻게 하면 단순 웹서버로 배포하거나 C++ 프로그램에 내장 또는 스마트폰에 넣을 수 있는지에 대해 알아본다.

 

| 이 책의 대상 독자 | 

이 책은 딥러닝을 실무에 활용하거나 파이토치를 잘 쓰고 싶은 개발자를 대상으로 한다. 독자는 아마 현업 컴퓨터공학 전공자나 데이터 과학자, 소프트웨어 엔지니어, 혹은 관련 학과의 학부 이상 학생일 것이라 가정한다. 독자가 딥러닝에 대한 사전 지식이 없다고 가정했기 때문에, 어느 정도 경험 있는 실무자라면 이미 이미 알고 있는 개념을 반복적으로 설명한다. 초보 수준을 벗어난 독자라면 이미 알고 있는 주제라 하더라도 조금 다른 관점으로 설명한 부분이 잘 느껴지기 바란다.


이 책의 독자는 명령형 프로그래밍과 객체 지향 프로그래밍에 대해 이미 기본 지식이 있다고 가정한다. 이 책에서는 파이썬을 사용하므로 독자는 기본 문법과 운영 환경에 익숙해야 한다. 파이썬 패키지를 설치하는 방법이나 자신의 플랫폼에서 스크립트를 실행하는 방법 정도는 미리 알고 있어야 한다. C++, 자바, 자바스크립트, 루비 등의 언어를 사용해본 경우라면 큰 어려움은 없을 테지만, 잘 모른다면 추가로 시간을 할애해 지식을 갖춰야 할 것이다. 넘파이(NumPy)에 익숙하면 좋지만 반드시 요구되는 사항은 아니다. 그리고 행렬이나 벡터 혹은 내적(dot product)이 무엇인지 아는 정도의 기본 선형 대수 지식도 갖춰두면 좋다.

 

지은이 

엘리 스티븐스Eli Stevens

실리콘 밸리 스타트업에서 대부분의 커리어를 이어왔다. (기업용 네트워크 장비를 만드는) 소프트웨어 엔지니어부터 (종양영상학을 위한 소프트웨어 개발) CTO까지 다양한 경력을 쌓았으며 지금은 자율주행 산업에서 머신러닝 분야에 종사하고 있다.

루카 안티가Luca Antiga

2000년대에 생체의공학 분야 연구원으로 활동했고 지난 십 년 동안 AI 엔지니어링 회사의 공동창업자이자 CTO를 역임했다. 파이토치 코어를 비롯해 여러 오픈소스 프로젝트에 기여했다. 최근 데이터 정의 소프트웨어(data-defined software)를 위한 인프라스트럭처를 다루는 미국 소재 스타트업을 공동 창업했다.

토마스 피이만Thomas Viehmann

독일 뮌헨에서 머신러닝과 파이썬 전문 강사로 일하고 있으며 파이토치 코어 개발자다. 수학 박사 학위를 취득한 덕분에 이론을 어려워하지는 않지만, 이를 도전적인 컴퓨팅 과제에 적용할 때에는 매우 실용적으로 접근한다.

1980년 우리 모두가 꼬마였을 때 엘리는 코모도어 VIC 20으로, 루카는 싱클레어 스펙트럼 48K로, 토마스는 코모도어 C16으로 컴퓨터 세상에 첫발을 내디뎠다. 우리는 개인용 컴퓨터의 서막을 바라봤고 점차 빨라져 가는 컴퓨터에서 코드와 알고리즘을 작성하는 법을 배워가며 컴퓨터가 앞으로 우리를 어디로 데려다 줄지에 대해 꿈꿔왔다. 이때 우리는 스파이 영화의 주인공이 “컴퓨터, 확대해 봐.”라고 말하는 장면을 일제히 두 눈을 굴리며 바라봤지만, 영화 속 컴퓨터와 실제 컴퓨터 기능의 간극을 뼈저리게 깨닫기도 했다.

이후 전문직에 종사하는 동안 엘리와 루카는 각각 의학 영상 이미지를 분석하느라 고군분투하며 인체의 다양성을 다루는 알고리즘을 작성하는 어려움에 직면했다. 기간도 단축하고 그럭저럭 돌아가게 하기 위해 여러 알고리즘을 최적으로 섞는 방법에 대한 다양한 휴리스틱(heuristics)이 존재했다. 21세기로 넘어설 무렵 토마스는 신경망과 패턴 인식을 공부하는 한편, 모델링을 하면서 수학 박사 학위도 취득했다.

2010년대 초반 컴퓨터 비전 영역에서 두각을 나타낸 딥러닝은 의료용 이미지에서 병변이나 구조를 인식하는 의학 이미지 분석에 사용되기 시작했다. 2010년대 중반에 이르자 비로소 딥러닝은 우리의 개개 레이더 망에 감지되기 시작했다. 딥러닝이 소프트웨어 작성 영역에서 완전히 새로운 방식을 제안하고 있다는 점을 인지하는 데에는 약간의 시간이 필요했다. 데이터 관찰만으로 복잡한 작업을 어떻게 처리하는지 스스로 학습하는 범용 알고리즘이라는 새로운 체계 말이다.

80년대 노땅들의 관점에서 보면, 단 하룻밤 사이에 컴퓨터의 가능성이 고수 프로그래머의 두뇌를 넘어 데이터와 신경망 아키텍처 그리고 훈련 프로세스로 확장되는 순간이었다. 이 깨달음 직후 우리는 직접 수행해보기로 했다. 루카는 존경스러운 선구자격의 토치7(http://torch.ch)을 골랐다. 토치7은 빠르고 가벼우며 루아(Lua)와 C로 작성된 소스 코드로 쉽게 접근할 수 있었는데, 나름의 오랜 배경을 지닌 커뮤니티의 지원도 있었다. 첫눈에 루카는 토치7에 반해버렸다. 다만 토치7에는 단점도 있었으니, 유래없이 급성장 중인 파이썬 데이터 사이언스 생태계에서 멀어지고 있다는 점이었다. 반대로 그 당시 또 다른 프레임워크들이 파이썬에서 파생되고 있었다. 엘리는 대학 시절부터 AI에 흥미가 많았다. 하지만 그의 커리어는 다른 방향으로 진행 중이었고 열의를 가지고 취미로 하기에 초기 딥러닝 프레임워크는 너무 많은 노력이 필요했다.

이 때문에 2017년 1월 18일 첫 번째 파이토치가 릴리스되었을 때 우리 모두는 크게 흥분했다. 루카는 핵심 개발자로 기여했으며, 엘리는 초창기 커뮤니티의 일원으로서 특이한 버그를 고쳐 내고 기능을 추가하며 문서를 업데이트했다. 토마스는 수많은 기능과 버그 수정에 기여하고 결국 핵심 기여자 중 한 명이 되었다. 적절한 수준의 복잡성과 최소의 인지적인 부하만을 요구하면서 뭔가 큰 움직임이 시작되고 있었다. 토치7에서 배운 린(lean) 설계 교훈을 계승하며 자동미분이나 동적 계산 그래프, 넘파이 통합 같은 최신 기능도 추가됐다.

열정적으로 프로젝트에 참여하며 여러 파이토치 워크샵도 진행하고 나자 책 집필 작업은 자연스러운 다음 과정으로 느껴졌다. 우리 저자진은 파이토치를 시작한 몇 년 전의 우리에게 설득력 있게 다가갈 수 있는 책을 쓰자는 목표를 세웠다.

예상한 대로 우리는 거창한 아이디어로 시작했다. 기본을 가르치고 엔드투엔드 프로젝트를 따라 해보며 파이토치의 최고 모델과 최신 모델을 설명하려 했다. 하지만 이 모든 것을 다루려면 책 한 권으로는 부족할 것임을 금세 알아챘다. 그래서 초기 목표에 집중하기로 하고 파이토치 기저의 핵심 개념을 다루는 데 시간을 들이고 깊이를 더했다. 딥러닝에 대한 사전 지식이 거의 없어도 독자가 프로젝트 전체를 따라갈 수 있도록 저술했다. 실습 프로젝트로는 우리의 전공 분야인 의학 이미지 분석 과제를 선택했다.

 

옮긴이 현동석

서울대학교에서 컴퓨터공학을 전공한 후, 오랫동안 네이버나 마이크로소프트 등 여러 회사에서 검색 관련 개발을 수행했으며, 딥러닝 모델 제품화를 위한 서빙과 데이터 분석을 엮은 엔드투엔드 플랫폼도 만든 바 있다. 현재는 네이버에서 지식그래프 기반의 검색 결과를 제공하는 지식베이스 조직을 이끌고 있다.

만약 범용인공지능(AGI, artificial general intelligence)에게 질문할 기회가 생긴다면, 이 책이 출간되기 십 년 전쯤인 어느 날 앤드류 응(Andrew Ng)이 회사 키친에서 우연히 제프 딘(Jeff Dean)을 만나지 못했어도 GPU를 활용한 학습과 이미지로부터 사물 탐지, 그리고 지금의 네가 존재할 수 있었을까, 라고 물어보고 싶다. 저자진도 책에서 여러 번 언급하듯이 지난 십여 년의 딥러닝의 발전은 엄청났고 매우 빠르게 일어났다. 컴퓨터공학을 전공하고 업을 삼아 살아가는 우리에게 엄청난 공부거리가 생겨 부담이었지만, 한편으론 영화에서만 보던 상상이 꽤 가까운 현실로 자리 잡아 가는 설렘 속에 살게 된 것은 기쁜 일이다. 2015년의 일이다. 딥러닝이 등장한 지도 몇 년 됐으니 이젠 잘 정리된 책도 좀 나왔겠지, 라는 생각으로 여기저기 서적을 살펴보고 온라인서점 사이트에서 원서도 뒤적거려 보았으나 여전히 쓸 만한 내용은 찾기가 어려웠고 얇은 두께에 이끌려 샀던 책은 주마간산이라는 표현으로는 부족할 만큼 부실하게 훑고 넘어가는 경우도 많았다. “딥러닝, 무엇부터 공부하나요?”라고 물어보는 분들에게 늘 스탠포드 강의와 코세라(Cousera)를 추천할 수밖에 없었다. 도서로는 딱히 추천할 만한 책이 떠오르지 않았고 이안 굿펠로(Ian Goodfellow)가 쓴 딥러닝 책은 그 명성에 걸맞게 금과옥조 같은 내용이 가득했지만, 고백하자면 나에게 커누스의 『The Art of Computer Programming』처럼 읽기보다는 소장의 목적이 컸다.

그사이 딥러닝 프레임워크는 춘추전국 시대를 지나 텐서플로(TensorFlow)와 파이토치(PyTorch)로 양분되어 가고 있었고 응당 그래야 했던 것처럼 멋진 모델과 훈련 결과로 데모를 보여주는 것을 넘어 실제 서비스와 비즈니스에 활용되는 상용화 단계로 진화해갔다. 그즈음 나도 발맞추어 실무에 적용하고 제품화를 위한 엔드투엔드 플랫폼도 구축했으나, 텐서플로보다 조금은 늦게 빛을 보던 파이토치에 대한 서적이나 자료는 공식 사이트 외에는 찾기가 힘들었다. 그때 마침 출판사에서 이 책의 번역을 의뢰했으니 어찌 거절할 수 있었으랴. 국내 전문가 그룹에서도 한창 화제에 올랐던 책이 드디어 한글로 출간되고, 출간 작업에 역자로 참여하게 되어 뿌듯하기 그지 없다.

제목에 속거나 얇은 두께의 유혹에 못 이겨 구입했다가 후회한 여타의 딥러닝 책과는 달리 이 책은 파이토치 핵심 멤버였던 저자진의 면면부터 책에서 다루는 상세 내용까지, 인공지능 개발에 목마른 독자들의 갈증을 후련하게 해소시켜줄 것이라 믿어 의심치 않는다. 이 책은 빠르게 발전하는 딥러닝 분야의 현실을 전제하고 그 안에서 오랫동안 남을 지식을 제공하려는 저자진의 노력은 물론, 딥러닝에 대한 기본적인 이해부터 다양한 용어 해설, 실무에 적용하기 위한 테크닉과 도구 그리고 평가까지 모두를 담았다. 내용 중에 전문 용어에 대한 별도 공부가 필요할 수도 있겠지만 부디 포기하지 말고 끝까지 읽어보시고 인공지능 연구에 많은 지식과 도움을 얻어가시길 바란다.

 

[차례]

[1부] 파이토치 핵심

 

1장 딥러닝과 파이토치 라이브러리 소개

__1.1 딥러닝 혁명

__1.2 딥러닝을 위한 파이토치

__1.3 왜 파이토치인가?

____1.3.1 딥러닝 경쟁 구도

__1.4 파이토치 딥러닝 프로젝트 둘러보기

__1.5 하드웨어와 소프트웨어 요구사항

____1.5.1 주피터 노트북

__1.6 연습 문제

__1.7 핵심 요약

 

2장 사전 훈련된 신경망

__2.1 이미지를 인식하는 사전 훈련된 신경망

____2.1.1 이미지 인식을 위해 사전 훈련된 신경망 가져오기

____2.1.2 알렉스넷

____2.1.3 레즈넷

____2.1.4 준비, ...작 전에 잠깐만

____2.1.5 실행!

____2.2 가짜 이미지를 만드는 사전 훈련된 모델

____2.2.1 GAN 게임

____2.2.2 사이클GAN

____2.2.3 말을 얼룩말로 바꾸는 신경망

__2.3 장면을 설명하는 사전 훈련된 신경망

____2.3.1 뉴럴토크2

__2.4 토치 허브

__2.5 결론

__2.6 연습 문제

__2.7 핵심 요약

 

3장 텐서 구조체

__3.1 부동소수점 수의 세계

__3.2 텐서: 다차원 배열

____3.2.1 파이썬 리스트에서 파이토치 텐서로

____3.2.2 첫 텐서 만들어보기

____3.2.3 텐서의 핵심

__3.3 텐서 인덱싱

__3.4 이름이 있는 텐서

__3.5 텐서 요소 타입

____3.5.1 dtype으로 숫자 타입 지정하기

____3.5.2 모든 경우에 사용하는 dtype

____3.5.3 텐서의 dtype 속성 관리

__3.6 텐서 API

__3.7 텐서를 저장소 관점에서 머릿속에 그려보기

____3.7.1 저장 공간 인덱싱

____3.7.2 저장된 값을 수정하기: 텐서 내부 연산

__3.8 텐서 메타데이터: 사이즈, 오프셋, 스트라이드

____3.8.1 다른 텐서의 저장 공간에 대한 뷰 만들기

____3.8.2 복사 없이 텐서 전치하기

____3.8.3 더 높은 차원에서의 전치 연산

____3.8.4 인접한 텐서

__3.9 텐서를 GPU로 옮기기

____3.9.1 텐서 디바이스 속성 관리

__3.10 넘파이 호환

__3.11 일반화된 텐서도 텐서다

__3.12 텐서 직렬화

____3.12.1 h5py HDF5 병렬화하기

__3.13 결론

__3.14 연습 문제

__3.15 핵심 요약

 

4장 실제 데이터를 텐서로 표현해보기

__4.1 이미지 다루기

____4.1.1 컬러 채널 더하기

____4.1.2 이미지 파일 로딩

____4.1.3 레이아웃 변경하기

____4.1.4 데이터 정규화

__4.2 3차원 이미지: 용적 데이터

____4.2.1 특수 포맷 로딩

__4.3 테이블 데이터 표현하기

____4.3.1 실세계 데이터셋 사용하기

____4.3.2 와인 데이터를 텐서로 읽어오기

____4.3.3 점수 표현하기

____4.3.4 원핫 인코딩

____4.3.5 언제 카테고리화 할 것인가

____4.3.6 임계값으로 찾기

__4.4 시계열 데이터 다루기

____4.4.1 시간 차원 더하기

____4.4.2 시간 단위로 데이터 만들기

____4.4.3 훈련 준비

__4.5 텍스트 표현하기

____4.5.1 텍스트를 숫자로 변환하기

____4.5.2 문자 원핫 인코딩

____4.5.3 모든 단어를 원핫 인코딩하기

____4.5.4 텍스트 임베딩

____4.5.5 청사진으로서의 텍스트 임베딩

__4.6 결론

__4.7 연습 문제

__4.8 핵심 요약

 

5장 학습 기법

__5.1 시대를 초월하는 모델링 학습

__5.2 학습은 파라미터 추정에 불과하다

____5.2.1 온도 문제

____5.2.2 데이터 수집

____5.2.3 데이터 시각화

____5.2.4 먼저 선형 모델을 골라 시도해보기

__5.3 손실을 줄이기 위한 방안

____5.3.1 파이토치로 문제 풀어보기

__5.4 경사를 따라 내려가기

____5.4.1 손실 줄이기

____5.4.2 분석

____5.4.3 모델 적합을 위한 반복

____5.4.4 입력 정규화

____5.4.5 (다시 해보는) 시각화

__5.5 파이토치의 자동미분: 모든 것을 역전파하라

____5.5.1 기울기 자동 계산

____5.5.2 골라쓰는 옵티마이저

____5.5.3 훈련, 검증, 과적합

____5.5.4 자동미분의 주의사항과 자동미분 끄기

__5.6 결론

__5.7 연습 문제

__5.8 핵심 요약

 

6장 신경망을 활용한 데이터 적합

__6.1 인공 뉴런

____6.1.1 다중 계층 신경망 합성하기

____6.1.2 오차 함수

____6.1.3 우리에게 필요한 건 활성 함수

____6.1.4 그 밖의 활성 함수

____6.1.5 최적의 활성 함수 고르기

____6.1.6 신경망에서 학습의 의미

__6.2 파이토치 nn 모듈

____6.2.1 forward 대신 __call__ 사용하기

____6.2.2 다시 선형 모델로

__6.3 드디어 신경망

____6.3.1 선형 모델 대체하기

____6.3.2 파라미터 살펴보기

____6.3.3 선형 모델과 비교하기

__6.4 결론

__6.5 연습 문제

__6.6 핵심 요약

 

7장 새와 비행기 구별하기: 이미지 학습

__7.1 작은 이미지를 모아 놓은 데이터셋

____7.1.1 CIFAR-10 다운로드

____7.1.2 데이터셋 클래스

____7.1.3 데이터 변환

____7.1.4 데이터 정규화

__7.2 새와 비행기를 구별하기

____7.2.1 데이터셋 구축

____7.2.2 완전 연결 모델

____7.2.3 분류기의 출력

____7.2.4 출력을 확률로 표현하기

____7.2.5 분류를 위한 손실값

____7.2.6 분류기 훈련

____7.2.7 완전 연결의 한계

__7.3 결론

__7.4 연습 문제

__7.5 핵심 요약

 

8장 컨볼루션을 활용한 일반화

__8.1 컨볼루션

____8.1.1 컨볼루션의 역할

__8.2 컨볼루션 사용해보기

____8.2.1 경계 패딩하기

____8.2.2 컨볼루션으로 피처 찾아내기

____8.2.3 깊이와 풀링으로 한 단계 더 인식하기

____8.2.4 우리의 신경망에 적용하기

__8.3 nn.Module 서브클래싱하기

____8.3.1 nn.Module로 정의된 우리의 신경망

____8.3.2 파이토치가 파라미터와 서브모듈을 유지하는 방법

____8.3.3 함수형 API

__8.4 우리가 만든 컨볼루션 신경망 훈련시키기

____8.4.1 정확도 측정

____8.4.2 모델을 저장하고 불러오기

____8.4.3 GPU에서 훈련시키기

__8.5 모델 설계

____8.5.1 메모리 용량 늘리기: 너비

____8.5.2 모델이 수렴하고 일반화하도록 돕는 방법: 정규화

____8.5.3 더 복잡한 구조를 배우기 위해 깊이 파헤치기: 깊이

____8.5.4 모델의 성능 비교

____8.5.5 이미 오래된 방식

__8.6 결론

__8.7 연습 문제

__8.8 핵심 요약

 

[2부] 실전 이미지 학습: 폐암 조기 진단

 

9장 암과 싸워 이기기 위한 파이토치 활용

__9.1 사용 사례 소개

__9.2 대규모 프로젝트 준비

__9.3 CT 스캔이란

__9.4 프로젝트: 엔드투엔드 폐암 진단기

____9.4.1 신경망이 동작할 때까지 데이터를 던져넣을 수 없는 이유

____9.4.2 결절이란 무엇인가

____9.4.3 데이터 소스: LUNA 그랜드 챌린지

____9.4.4 LUNA 데이터 다운로드

__9.5 결론

__9.6 핵심 요약

 

10장 여러 데이터 소스를 통합 데이터셋으로 합치기

__10.1 원본 CT 데이터 파일

__10.2 LUNA 애노테이션 데이터 파싱

____10.2.1 훈련셋과 검증셋

____10.2.2 애노테이션 데이터와 후보 데이터 합치기

__10.3 개별 CT 스캔 로딩

____10.3.1 하운스필드 단위

__10.4 환자 좌표계를 사용해 결절 위치 정하기

____10.4.1 환자 좌표계

____10.4.2 CT 스캔 형태와 복셀 크기

____10.4.3 밀리미터를 복셀 주소로 변환하기

____10.4.4 CT 스캔에서 결절 추출하기

__10.5 간단한 데이터셋 구현

____10.5.1 getCtRawCandidate 함수로 후보 배열 캐싱하기

____10.5.2 LunaDataset.__init__으로 데이터셋 만들기

____10.5.3 훈련/검증 분리

____10.5.4 데이터 렌더링

__10.6 결론

__10.7 연습 문제

__10.8 핵심 요약

 

11장 종양 탐지를 위한 분류 모델 훈련

__11.1 기본 모델과 훈련 루프

__11.2 애플리케이션의 메인 진입점

__11.3 사전 훈련 설정과 초기화

____11.3.1 모델과 옵티마이저 초기화

____11.3.2 데이터 로더의 관리와 데이터 공급

__11.4 첫 번째 경로 신경망 설계

____11.4.1 핵심 컨볼루션

____11.4.2 전체 모델

__11.5 모델 훈련과 검증

____11.5.1 computeBatchLoss 함수

____11.5.2 훈련 때와 유사한 검증 루프

__11.6 성능 메트릭 출력

____11.6.1 logMetrics 함수

__11.7 훈련 스크립트 실행

____11.7.1 훈련에 필요한 데이터

____11.7.2 막간을 활용해 enumerateWithEstimate 함수 알아보기

__11.8 모델 평가: 정확도 99.7%라면 잘 끝난 것일까?

__11.9 텐서보드로 훈련 관련 메트릭을 그려보기

____11.9.1 텐서보드 실행

____11.9.2 메트릭 로깅 함수가 텐서보드를 지원하도록 만들기

__11.10 모델이 결절 탐지를 학습하지 못하는 이유

__11.11 결론

__11.12 연습 문제

__11.13 핵심 요약

 

12장 메트릭과 증강을 활용한 훈련 개선

__12.1 개선을 위한 상위 계획

__12.2 착한 개와 나쁜 녀석: 거짓 양성과 거짓 음성

__12.3 긍정과 부정의 경우를 도식화하기

____12.3.1 아무나 보고 짖는 록시의 장점은 재현율

____12.3.2 잠은 많아도 도둑은 잘 잡는 프레스톤의 특기는 정밀도

____12.3.3 logMetrics으로 정밀도와 재현율 구하기

____12.3.4 궁극의 메트릭: F1 점수

____12.3.5 새 메트릭으로 모델이 잘 동작하는지 확인하기

__12.4 이상적인 데이터셋의 모습

____12.4.1 데이터를 실제보다이상에 가깝게 만들기

____12.4.2 균형잡힌 LunaDataset으로 훈련시킨 결과의 차이

____12.4.3 과적합 증상 알아채기

__12.5 과적합 문제 다시 살펴보기

____12.5.1 과적합된 얼굴-나이 예측 모델

__12.6 데이터 증강으로 과적합 방지하기

____12.6.1 특별 데이터 증강 기술

____12.6.2 데이터 증강 효과 확인하기

__12.7 결론

__12.8 연습 문제

__12.9 핵심 요약

 

13장 세그멘테이션을 활용한 의심 결절 탐색

__13.1 프로젝트에 두 번째 모델 추가하기

__13.2 다양한 세그멘테이션 유형

__13.3 시맨틱 세그멘테이션: 픽셀 단위 분류

____13.3.1 유넷 아키텍처

__13.4 세그멘테이션을 위한 모델 업데이트

____13.4.1 기성품 모델을 프로젝트에 적용하기

__13.5 세그멘테이션을 위한 데이터셋 업데이트

____13.5.1 매우 제한된 입력 크기를 갖는 유넷

____13.5.2 2차원 vs 3차원 데이터의 유넷 사용시 장단점

____13.5.3 실측 데이터 만들기

____13.5.4 Luna2dSegmentationDataset 구현

____13.5.5 훈련 데이터와 검증 데이터 설계

____13.5.6 TrainingLuna2dSegmentationDataset 구현

____13.5.7 GPU에서 돌리는 증강

__13.6 세그멘테이션을 위한 훈련 스크립트 업데이트

____13.6.1 세그멘테이션과 증강 모델 초기화

____13.6.2 아담 옵티마이저 사용하기

____13.6.3 다이스 손실

____13.6.4 이미지를 텐서보드에 넣기

____13.6.5 메트릭 로깅 업데이트

____13.6.6 모델 저장

__13.7 결과

__13.8 결론

__13.9 연습 문제

__13.10 핵심 요약

 

14장 엔드투엔드 결절 분석, 그리고 남겨진 과제

__14.1 결승선을 향하여

__14.2 검증셋 독립

__14.3 CT 세그멘테이션과 결절 후보 분류 연결

____14.3.1 세그멘테이션

____14.3.2 복셀을 그룹화하여 결절 후보로 만들기

____14.3.3 결절을 찾았나? 거짓 양성을 줄이기 위한 분류

__14.4 정량적인 검증

__14.5 악성 예측

____14.5.1 악성 정보 습득

____14.5.2 AUC 베이스라인: 직경으로 분류하기

____14.5.3 이전 가중치의 재활용: 미세 튜닝

____14.5.4 텐서보드에서의 더 많은 출력

__14.6 진단을 통해 보게되는 것

____14.6.1 훈련셋, 검증셋, 테스트셋

__14.7 다음 단계는? 더 많은 데이터와 영감이 필요하다

____14.7.1 과적합 방지: 더 나은 정규화

____14.7.2 정제된 훈련 데이터

____14.7.3 결과 비교와 리서치 논문

__14.8 결론

____14.8.1 커튼 뒤에서

__14.9 연습 문제

__14.10 핵심 요약

 

[3부] 드디어, 배포

 

15장 제품으로 배포하기

__15.1 파이토치 모델 서빙

____15.1.1 플라스크에 들어간 모델

____15.1.2 배포 시 바라는 점

____15.1.3 배치 요청

__15.2 모델 내보내기

____15.2.1 ONNX로 파이토치를 넘어서는 호환성 확보

____15.2.2 파이토치로 내보내기: 추적

____15.2.3 추적된 모델로 만든 서버

__15.3 파이토치 JIT 동작

____15.3.1 전통적인 파이썬/파이토치를 넘어서기

____15.3.2 인터페이스와 백엔드 관점에서의 파이토치

____15.3.3 토치스크립트

____15.3.4 추적 가능하도록 토치스크립트로 만들기

__15.4 LibTorch: C++ 파이토치

____15.4.1 JIT로 처리된 모델을 C++로 실행하기

____15.4.2 시작부터 C++: C++ API

__15.5 모바일

____15.5.1 효율성 개선: 모델 설계와 양자화

__15.6 최근 기술: 파이토치 모델 엔터프라이즈 서빙

__15.7 결론

__15.8 연습 문제

__15.9 핵심 요약

'+ 펴낸 책' 카테고리의 다른 글

제품의 탄생  (0) 2022.11.30
클린 코드, 이제는 파이썬이다  (5) 2022.08.04
딥러닝을 이용한 정형 데이터 분석  (0) 2022.06.08
실전 파이썬 핸즈온 프로젝트  (0) 2022.05.23
자동차 인터페이스 디자인  (0) 2022.05.17

댓글