본문 바로가기
BI/인공지능

기본기부터 심화까지 '핸즈온 머신러닝'

by wizmusa 2023. 10. 28.

핸즈온 머신러닝(3판)

사이킷런, 케라스, 텐서플로 2로 완벽 이해하는 머신러닝, 딥러닝 이론 & 실무

저자: 오렐리앙 제롱(Aurélien Géron) 번역: 박해선 / 한빛미디어 / 2023-09-29
https://www.hanbit.co.kr/store/books/look.php?p_code=B1539397165

운좋게 AI 일을 시작한 이래로 머신러닝 책을 꽤 읽었습니다. 간혹 아쉬웠던 때가 있었습니다. 입문서를 떼고 나면 그 다음에 할 만한 게 썩 마땅하지 않고, 심화서를 펼치면 저자가 요구하는 배경지식이 제 경험과 상이할 때가 있었습니다. 출판사에서 책 소개를 더 하기도 하고 선수과정을 안내하기도 합니다만 딱 맞아 떨어지지 않곤 했습니다. 흔한 일입니다.

 

'핸즈온 머신러닝(3판)'은 이전판에 비해 분량부터 압도적입니다. 살짝 놀랐습니다.

 

미리 분철한 상태라 다행입니다.

분철한 채로 나와서 가지고 다니기에 편합니다. 출판사가 잘 배려했습니다. 1권이 2권보다 두껍습니다. 머신러닝의 기본 개념부터 유용한 수준이면서도 기본적인 학습 절차를 다룹니다. scikit-learn(sklearn) 라이브러리를 요모조모 빠진 구석 없이 사용합니다. 그러면서 파라미터 공간은 무엇인지 epoch은 무엇인지 세세하게 알려줍니다. 통계 지식이 없는 독자는 경사하강법 같이 많이 들어보았어도 익숙하지는 못한 개념을 많이 접하게 됩니다. 도식 설명부터 코드 설명까지 일일이 챙겼기에 수식은 이해하지 못해도 무방합니다.

2권부터는 1권 말미에 맛만 봤던 딥러닝에 본격적으로 들어갑니다. 1권을 달달 외울 필요는 없지만 scikit-learn에는 익숙해지고 나서 2권에 들어가기를 권합니다. scikit-learn이 다루는 전통적인 통계와 데이터마이닝 기법은 머신러닝에 이어집니다. 반면 딥러닝은 최근 들어 아이디어와 기법이 눈부시게 발전했습니다. 상당 부분이 TensorFlow와 Keras 코드이더라도 다른 많은 부분은 scikit-learn과 파이썬 기본 기능입니다. 기본적인 코드의 기능이 다소 낯설다면 결국 TensorFlow 부분마저 이해하기 힘들 겁니다. 더구나 이미지, 텍스트 데이터를 넘나들고 생성 AI와 강화학습까지 언급하기에 정신을 차리기 힘들 지경입니다. 큰 모델을 다루며 GPU RAM까지 들여 봐야 하므로 부담스러울 수도 있겠습니다.

 

이런 일들이 어렵지 않은 사람은 없습니다. 용기를 내어 완독하기를 바랍니다. 완독하고 나서는 Kaggle을 둘러 보았을 때에 쉽지 않은 주제는 있겠으나 시작하지 못할 주제는 없다고 단언합니다. 욕심내지 않되 끈질기게 읽어내면 얻는 게 많을 겁니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


반응형

[1부 머신러닝]

 

1장 한눈에 보는 머신러닝

1.1 머신러닝이란?

1.2 왜 머신러닝을 사용하나요?

1.3 애플리케이션 사례

1.4 머신러닝 시스템의 종류

_1.4.1 훈련 지도 방식

__지도 학습

__비지도 학습

__준비도 학습

__자기 지도 학습

__강화 학습

_1.4.2 배치 학습과 온라인 학습

__배치 학습

__온라인 학습

_1.4.3 사례 기반 학습과 모델 기반 학습

__사례 기반 학습

__모델 기반 학습

1.5 머신러닝의 주요 도전 과제

_1.5.1 충분하지 않은 양의 훈련 데이터

_1.5.2 대표성 없는 훈련 데이터

_1.5.3 낮은 품질의 데이터

_1.5.4 관련없는 특성

_1.5.5 훈련 데이터 과대적합

_1.5.6 훈련 데이터 과소적합

_1.5.7 핵심 요약

1.6 테스트와 검증

_1.6.1 하이퍼파라미터 튜닝과 모델 선택

_1.6.2 데이터 불일치

연습문제

 

2장 머신러닝 프로젝트 처음부터 끝까지

2.1 실제 데이터로 작업하기

2.2 큰 그림 보기

_2.2.1 문제 정의

_2.2.2 성능 측정 지표 선택

_2.2.3 가정 검사

2.3 데이터 가져오기

_2.3.1 구글 코랩을 사용하여 예제 코드 실행하기

_2.3.2 코드와 데이터 저장하기

_2.3.3 대화식 환경의 편리함과 위험

_2.3.4 책의 코드와 노트북의 코드

_2.3.5 데이터 다운로드

_2.3.6 데이터 구조 훑어보기

_2.3.7 테스트 세트 만들기

2.4 데이터 이해를 위한 탐색과 시각화

_2.4.1 지리적 데이터 시각화하기

_2.4.2 상관관계 조사하기

_2.4.3 특성 조합으로 실험하기

2.5 머신러닝 알고리즘을 위한 데이터 준비

_2.5.1 데이터 정제

_2.5.2 텍스트와 범주형 특성 다루기

_2.5.3 특성 스케일과 변환

_2.5.4 사용자 정의 변환기

_2.5.5 변환 파이프라인

2.6 모델 선택과 훈련

_2.6.1 훈련 세트에서 훈련하고 평가하기

_2.6.2 교차 검증으로 평가하기

2.7 모델 미세 튜닝

_2.7.1 그리드 서치

_2.7.2 랜덤 서치

_2.7.3 앙상블 방법

_2.7.4 최상의 모델과 오차 분석

_2.7.5 테스트 세트로 시스템 평가하기

2.8 론칭, 모니터링, 시스템 유지 보수

2.9 직접 해보세요!

연습문제

 

3장 분류

3.1 MNIST

3.2 이진 분류기 훈련

3.3 성능 측정

_3.3.1 교차 검증을 사용한 정확도 측정

_3.3.2 오차 행렬

_3.3.3 정밀도와 재현율

_3.3.4 정밀도/재현율 트레이드오프

_3.3.5 ROC 곡선

3.4 다중 분류

3.5 오류 분석

3.6 다중 레이블 분류

3.7 다중 출력 분류

연습문제

 

4장 모델 훈련

4.1 선형 회귀

_4.1.1 정규 방정식

_4.1.2 계산 복잡도

4.2 경사 하강법

_4.2.1 배치 경사 하강법

_4.2.2 확률적 경사 하강법

_4.2.3 미니배치 경사 하강법

4.3 다항 회귀

4.4 학습 곡선

4.5 규제가 있는 선형 모델

_4.5.1 릿지 회귀

_4.5.2 라쏘 회귀

_4.5.3 엘라스틱넷

_4.5.4 조기 종료

4.6 로지스틱 회귀

_4.6.1 확률 추정

_4.6.2 훈련과 비용 함수

_4.6.3 결정 경계

_4.6.4 소프트맥스 회귀

연습문제

 

5장 서포트 벡터 머신

5.1 선형 SVM 분류

_5.1.1 소프트 마진 분류

5.2 비선형 SVM 분류

_5.2.1 다항식 커널

_5.2.2 유사도 특성

_5.2.3 가우스 RBF 커널

_5.2.4 계산 복잡도

5.3 SVM 회귀

5.4 SVM 이론

5.5 쌍대 문제

_5.5.1 커널 SVM

연습문제

 

6장 결정 트리

6.1 결정 트리 학습과 시각화

6.2 예측

6.3 클래스 확률 추정

6.4 CART 훈련 알고리즘

6.5 계산 복잡도

6.6 지니 불순도 또는 엔트로피?

6.7 규제 매개변수

6.8 회귀

6.9 축 방향에 대한 민감성

6.10 결정 트리의 분산 문제

연습문제

 

7장 앙상블 학습과 랜덤 포레스트

7.1 투표 기반 분류기

7.2 배깅과 페이스팅

_7.2.1 사이킷런의 배깅과 페이스팅

_7.2.2 OOB 평가

7.3 랜덤 패치와 랜덤 서브스페이스

7.4 랜덤 포레스트

_7.4.1 엑스트라 트리

_7.4.2 특성 중요도

7.5 부스팅

7.5.1 AdaBoost

_7.5.2 그레이디언트 부스팅

_7.5.3 히스토그램 기반 그레이디언트 부스팅

_7.6 스태킹

연습문제

 

8장 차원 축소

8.1 차원의 저주

8.2 차원 축소를 위한 접근법

_8.2.1 투영

_8.2.2 매니폴드 학습

8.3 주성분 분석

_8.3.1 분산 보존

_8.3.2 주성분

_8.3.3 d차원으로 투영하기

_8.3.4 사이킷런 사용하기

_8.3.5 설명된 분산의 비율

_8.3.6 적절한 차원 수 선택

_8.3.7 압축을 위한 PCA

_8.3.8 랜덤 PCA

_8.3.9 점진적 PCA

8.4 랜덤 투영

8.5 지역 선형 임베딩

8.6 다른 차원 축소 기법

연습문제

 

9장 비지도 학습

9.1 군집

_9.1.1 k-평균

__k-평균 알고리즘

__센트로이드 초기화 방법

__k-평균 속도 개선과 미니배치 k-평균

__최적의 클러스터 개수 찾기

_9.1.2 k-평균의 한계

_9.1.3 군집을 사용한 이미지 분할

_9.1.4 군집을 사용한 준지도 학습

_9.1.5 DBSCAN

_9.1.6 다른 군집 알고리즘

9.2 가우스 혼합

_9.2.1 가우스 혼합을 사용한 이상치 탐지

_9.2.2 클러스터 개수 선택

_9.2.3 베이즈 가우스 혼합 모델

_9.2.4 이상치 탐지와 특이치 탐지를 위한 알고리즘

연습문제

 

[2부 신경망과 딥러닝]

10장 케라스를 사용한 인공 신경망 소개

10.1 생물학적 뉴런에서 인공 뉴런까지

_10.1.1 생물학적 뉴런

_10.1.2 뉴런을 사용한 논리 연산

_10.1.3 퍼셉트론

_10.1.4 다층 퍼셉트론과 역전파

_10.1.5 회귀를 위한 다층 퍼셉트론

_10.1.6 분류를 위한 다층 퍼셉트론

10.2 케라스로 다층 퍼셉트론 구현하기

_10.2.1 시퀀셜 API로 이미지 분류기 만들기

__케라스로 데이터셋 적재하기

__시퀀셜 API로 모델 만들기

__모델 컴파일

__모델 훈련과 평가

__모델로 예측 만들기

_10.2.2 시퀀셜 API로 회귀용 다층 퍼셉트론 만들기

_10.2.3 함수형 API로 복잡한 모델 만들기

_10.2.4 서브클래싱 API로 동적 모델 만들기

_10.2.5 모델 저장과 복원하기

_10.2.6 콜백 사용하기

_10.2.7 텐서보드로 시각화하기

10.3 신경망 하이퍼파라미터 튜닝하기

_10.3.1 은닉 층 개수

_10.3.2 은닉 층의 뉴런 개수

_10.3.3 학습률, 배치 크기 그리고 다른 하이퍼파라미터

연습문제

 

11장 심층 신경망 훈련

11.1 그레이디언트 소실과 폭주 문제

_11.1.1 글로럿과 He 초기화

_11.1.2 고급 활성화 함수

__LeakyReLU

__ELU와 SELU

__GELU, Swish, Mish

_11.1.3 배치 정규화

__케라스로 배치 정규화 구현하기

_11.1.4 그레이디언트 클리핑

11.2 사전 훈련된 층 재사용하기

_11.2.1 케라스를 사용한 전이 학습

_11.2.2 비지도 사전 훈련

_11.2.3 보조 작업에서 사전 훈련

11.3 고속 옵티마이저

_11.3.1 모멘텀 최적화

_11.3.2 네스테로프 가속 경사

_11.3.3 AdaGrad

_11.3.4 RMSProp

_11.3.5 Adam

_11.3.6 AdaMax

_11.3.7 Nadam

_11.3.8 AdamW

_11.3.9 학습률 스케줄링

11.4 규제를 사용해 과대적합 피하기

_11.4.1 l1과 l2 규제

_11.4.2 드롭아웃

_11.4.3 몬테 카를로 드롭아웃

_11.4.4 맥스-노름 규제

11.5 요약 및 실용적인 가이드라인

연습문제

 

12장 텐서플로를 사용한 사용자 정의 모델과 훈련

12.1 텐서플로 훑어보기

12.2 넘파이처럼 텐서플로 사용하기

_12.2.1 텐서와 연산

_12.2.2 텐서와 넘파이

_12.2.3 타입 변환

_12.2.4 변수

_12.2.5 다른 데이터 구조

12.3 사용자 정의 모델과 훈련 알고리즘

_12.3.1 사용자 정의 손실 함수

_12.3.2 사용자 정의 요소를 가진 모델을 저장하고 로드하기

_12.3.3 활성화 함수, 초기화, 규제, 제한을 커스터마이징하기

_12.3.4 사용자 정의 지표

_12.3.5 사용자 정의 층

_12.3.6 사용자 정의 모델

_12.3.7 모델 구성 요소에 기반한 손실과 지표

_12.3.8 자동 미분으로 그레이디언트 계산하기

_12.3.9 사용자 정의 훈련 반복

12.4 텐서플로 함수와 그래프

_12.4.1 오토그래프와 트레이싱

_12.4.2 텐서플로 함수 사용법

연습문제

 

13장 텐서플로를 사용한 데이터 적재와 전처리

13.1 데이터 API

_13.1.1 연쇄 변환

_13.1.2 데이터 셔플링

_13.1.3 여러 파일에서 한 줄씩 번갈아 읽기

_13.1.4 데이터 전처리

_13.1.5 데이터 적재와 전처리 합치기

_13.1.6 프리페치

_13.1.7 케라스와 데이터셋 사용하기

13.2 TFRecord 포맷

_13.2.1 압축된 TFRecord 파일

_13.2.2 프로토콜 버퍼 개요

_13.2.3 텐서플로 프로토콜 버퍼

_13.2.4 Example 프로토콜 버퍼 읽고 파싱하기 

_13.2.5 SequenceExample 프로토콜 버퍼로 리스트의 리스트 다루기

13.3 케라스의 전처리 층

_13.3.1 Normalization 층

_13.3.2 Discretization 층

_13.3.3 CategoryEncoding 층

_13.3.4 StringLookup 층

_13.3.5 Hashing 층

_13.3.6 임베딩을 사용해 범주형 특성 인코딩하기

_13.3.7 텍스트 전처리

_13.3.8 사전 훈련된 언어 모델 구성 요소 사용하기

_13.3.9 이미지 전처리 층

13.5 텐서플로 데이터셋 프로젝트

연습문제

 

14장 합성곱 신경망을 사용한 컴퓨터 비전

14.1 시각 피질 구조

14.2 합성곱 층

_14.2.1 필터

_14.2.2 여러 가지 특성 맵 쌓기

_14.2.3 케라스로 합성곱 층 구현하기

_14.2.4 메모리 요구 사항

14.3 풀링 층

14.4 케라스로 풀링 층 구현하기

14.5 CNN 구조

_14.5.1 LeNet-5

_14.5.2 AlexNet

_14.5.3 GoogLeNet

_14.5.4 VGGNet

_14.5.5 ResNet

_14.5.6 Xception

_14.5.7 SENet

_14.5.8 주목할 만한 다른 구조

_14.5.9 올바른 CNN 구조 선택

14.6 케라스로 ResNet-34 CNN 구현하기

14.7 케라스의 사전 훈련 모델 사용하기

14.8 사전 훈련된 모델을 사용한 전이 학습

14.9 분류와 위치 추정

14.10 객체 탐지

_14.10.1 완전 합성곱 신경망

_14.10.2 YOLO

14.11 객체 추적

14.12 시맨틱 분할

연습문제

 

15장 RNN과 CNN을 사용한 시퀀스 처리

15.1 순환 뉴런과 순환 층

_15.1.1 메모리 셀

_15.1.2 입력과 출력 시퀀스

15.2 RNN 훈련하기

15.3 시계열 예측하기

_15.3.1 ARMA 모델

_15.3.2 머신러닝 모델을 위한 데이터 준비하기

_15.3.3 선형 모델로 예측하기

_15.3.4 간단한 RNN으로 예측하기

_15.3.5 심층 RNN으로 예측하기

_15.3.6 다변량 시계열 예측하기

_15.3.7 여러 타임 스텝 앞 예측하기

_15.3.8 시퀀스-투-시퀀스 모델로 예측하기

15.4 긴 시퀀스 다루기

_15.4.1 불안정한 그레이디언트 문제와 싸우기

_15.4.2 단기 기억 문제 해결하기

__LSTM 셀

__GRU 셀

__1D 합성곱 층으로 시퀀스 처리하기

__WaveNet

연습문제

 

16장 RNN과 어텐션을 사용한 자연어 처리

16.1 Char-RNN으로 셰익스피어 문체 생성하기

_16.1.1 훈련 데이터셋 만들기

_16.1.2 Char-RNN 모델 만들고 훈련하기

_16.1.3 가짜 셰익스피어 텍스트 생성하기

_16.1.4 상태가 있는 RNN

16.2 감성 분석

_16.2.1 마스킹

_16.2.2 사전 훈련된 임베딩과 언어 모델 재사용하기

16.3 신경망 기계 번역을 위한 인코더-디코더 네트워크

_16.3.1 양방향 RNN

_16.3.2 빔 서치

16.4 어텐션 메커니즘

_16.4.1 트랜스포머 구조: 어텐션만 있으면 된다

__위치 인코딩

__멀티 헤드 어텐션

16.5 언어 모델 분야의 최근 혁신

16.6 비전 트랜스포머

16.7 허깅 페이스의 트랜스포머스 라이브러리

연습문제

 

17장 오토인코더, GAN 그리고 확산 모델

17.1 효율적인 데이터 표현

17.2 과소완전 선형 오토인코더로 PCA 수행하기

17.3 적층 오토인코더

_17.3.1 케라스로 적층 오토인코더 구현하기

_17.3.2 재구성 시각화

_17.3.3 패션 MNIST 데이터셋 시각화

_17.3.4 적층 오토인코더를 사용한 비지도 사전 훈련

_17.3.5 가중치 묶기

_17.3.6 오토인코더 한 개씩 훈련하기

17.4 합성곱 오토인코더

17.5 잡음 제거 오토인코더

17.6 희소 오토인코더

17.7 변이형 오토인코더

_17.7.1 패션 MNIST 이미지 생성하기

17.8 생성적 적대 신경망

_17.8.1 GAN 훈련의 어려움

_17.8.2 심층 합성곱 GAN

_17.8.3 ProGAN

__미니배치 표준 편차 층

__동일한 학습 속도

__픽셀별 정규화 층

_17.8.4 StyleGAN

__매핑 네트워크

__합성 네트워크

17.9 확산 모델

연습문제

 

18장 강화 학습

18.1 보상을 최적화하기 위한 학습

18.2 정책 탐색

18.3 OpenAI Gym

18.4 신경망 정책

18.5 행동 평가: 신용 할당 문제

18.6 정책 그레이디언트

18.7 마르코프 결정 과정

18.8 시간차 학습

18.9 Q-러닝

_18.9.1 탐험 정책

_18.9.2 근사 Q-러닝과 심층 Q-러닝

18.10 심층 Q-러닝 구현

18.11 심층 Q-러닝의 변형

_18.11.1 고정 Q-가치 타깃

_18.11.2 더블 DQN

_18.11.3 우선 순위 기반 경험 재생

_18.11.4 듀얼링 DQN

18.12 다른 강화 학습 알고리즘

연습문제

 

19장 대규모 텐서플로 모델 훈련과 배포

19.1 텐서플로 모델 서빙

_19.1.1 텐서플로 서빙 사용하기

__SavedModel로 내보내기

__텐서플로 서빙 설치하고 시작하기

__REST API로 TF 서빙에 쿼리하기

__gRPC API로 TF 서빙에 쿼리하기

__새로운 버전의 모델 배포하기

_19.1.2 버텍스 AI에서 예측 서비스 만들기

_19.1.3 버텍스 AI에서 배치 예측 작업 실행하기

19.2 모바일 또는 임베디드 디바이스에 모델 배포하기

19.3 웹 페이지에서 모델 실행하기

19.4 계산 속도를 높이기 위해 GPU 사용하기

_19.4.1 GPU 구매하기

_19.4.2 GPU RAM 관리하기

_19.4.3 디바이스에 연산과 변수 할당하기

_19.4.4 다중 장치에서 병렬 실행하기

19.5 다중 장치에서 모델 훈련하기

_19.5.1 모델 병렬화

_19.5.2 데이터 병렬화

__미러드 전략을 사용한 데이터 병렬화

__중앙 집중적인 파라미터를 사용한 데이터 병렬화

__대역폭 포화

_19.5.3 분산 전략 API를 사용한 대규모 훈련

_19.5.4 텐서플로 클러스터에서 모델 훈련하기

_19.5.5 버텍스 AI에서 대규모 훈련 작업 실행하기

_19.5.6 버텍스 AI의 하이퍼파라미터 튜닝

연습문제

마치며

 

[3부 부록]

 

부록 A 연습문제 정답

 

부록 B 머신러닝 프로젝트 체크리스트

B.1 문제를 정의하고 큰 그림을 그립니다

B.2 데이터를 수집합니다

B.3 데이터를 탐색합니다

B.4 데이터를 준비합니다

B.5 가능성 있는 몇 개의 모델을 고릅니다

B.6 모델을 미세 튜닝합니다

B.7 솔루션을 출시합니다

B.8 시스템을 론칭합니다!

 

부록 C 자동 미분

C.1 수동 미분

C.2 유한 차분 근사

C.3 전진 모드 자동 미분

C.4 후진 모드 자동 미분

 

부록 D 특수한 데이터 구조

D.1 문자열

D.2 래그드 텐서

D.3 희소 텐서

D.4 텐서 배열

D.5 집합

D.6 큐

 

부록 E 텐서플로 그래프

E.1 TF 함수와 콘크리트 함수

E.2 함수 정의와 함수 그래프 탐험하기

E.3 트레이싱 자세히 보기

E.4 오토그래프로 제어 흐름 표현하기

E.5 TF 함수에서 변수와 다른 리소스 다루기

E.6 케라스로 TF 함수 사용하기(또는 사용하기 않기)

 

반응형