이 상품은 구매 후 지원 기기에서 예스24 eBook앱 설치 후 바로 이용 가능한 상품입니다.
|
[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 핵심 요약
|
Eli Stevens
Luca Antiga
Thomas Viehmann
|
| 이 책에서 다루는 내용 |- 심층 신경망 훈련- 모듈과 손실 함수 구현- 파이토치 허브의 사전 훈련된 모델 활용- 주피터 노트북 코드 샘플 탐구- 딥러닝 모델 성능의 분석, 평가, 개선 - 폐 종양 CT 영상 데이터를 활용한 모델 분석부터 서빙까지 엔드투엔드 모의 암 진단 프로젝트| 이 책의 구성 | 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)이 무엇인지 아는 정도의 기본 선형 대수 지식도 갖춰두면 좋다.| 하드웨어와 소프트웨어 요구사항 |- 8기가 RAM이 장착된 GPU- 최소 200기가의 디스크 공간- 파이썬 3.6 이상[지은이의 말]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)로 양분되어 가고 있었고 응당 그래야 했던 것처럼 멋진 모델과 훈련 결과로 데모를 보여주는 것을 넘어 실제 서비스와 비즈니스에 활용되는 상용화 단계로 진화해갔다. 그즈음 나도 발맞추어 실무에 적용하고 제품화를 위한 엔드투엔드 플랫폼도 구축했으나, 텐서플로보다 조금은 늦게 빛을 보던 파이토치에 대한 서적이나 자료는 공식 사이트 외에는 찾기가 힘들었다. 그때 마침 출판사에서 이 책의 번역을 의뢰했으니 어찌 거절할 수 있었으랴. 국내 전문가 그룹에서도 한창 화제에 올랐던 책이 드디어 한글로 출간되고, 출간 작업에 역자로 참여하게 되어 뿌듯하기 그지 없다. 제목에 속거나 얇은 두께의 유혹에 못 이겨 구입했다가 후회한 여타의 딥러닝 책과는 달리 이 책은 파이토치 핵심 멤버였던 저자진의 면면부터 책에서 다루는 상세 내용까지, 인공지능 개발에 목마른 독자들의 갈증을 후련하게 해소시켜줄 것이라 믿어 의심치 않는다. 이 책은 빠르게 발전하는 딥러닝 분야의 현실을 전제하고 그 안에서 오랫동안 남을 지식을 제공하려는 저자진의 노력은 물론, 딥러닝에 대한 기본적인 이해부터 다양한 용어 해설, 실무에 적용하기 위한 테크닉과 도구 그리고 평가까지 모두를 담았다. 내용 중에 전문 용어에 대한 별도 공부가 필요할 수도 있겠지만 부디 포기하지 말고 끝까지 읽어보시고 인공지능 연구에 많은 지식과 도움을 얻어가시길 바란다. - 현동석
|