딥러닝 모델 설계를 떠받치는 기술

딥러닝이 안 풀릴 때 보는 케라스 해법 정리서

신경망의 깊숙한 데까지 파고들어 모델을 훈련하고 최적화하자!

인공지능의 세계로 들어가는 데는 딥러닝이 핵심적인 필요조건이다. 이 책을 통해 실무 문제에 직면한 데이터 과학자는 딥러닝 기술에 더 다가설 수 있고 딥러닝을 더 실용적으로 만들 수 있으며 딥러닝과 더 깊은 관계를 맺을 수 있다. 이 책에서는 실용적인 예제를 제시함으로써 딥러닝을 학문의 세계에서 실무의 세계로 옮긴다.

이 책을 통해 심층 신경망 훈련을 지켜보는 일과 딥러닝을 사용해 이진 분류 문제를 해결하는 데 텐서보드를 사용하는 법을 배울 수 있다. 또한 딥러닝 모델에서 하이퍼파라미터를 최적화하는 방법을 배울 수 있다. 워드 임베딩 및 seq2seq 모델과 더불어 CNN, RNN, LSTM을 처음부터 실용적으로 구현하며 실습할 수 있다. 더 나아가 이 책으로 자율 에이전트 문제를 해결하기 위해 심층 Q 신경망과 같은 발전된 주제를 탐구할 수 있고, 두 가지 상호 적대적인 신경망을 사용해 진짜처럼 보이는 가짜 그림을 생성하는 방법을 알 수 있다. 이러한 구현에 필요하고 인기도 있는, 파이썬 기반 딥러닝 프레임워크인 케라스와 텐서플로도 살펴본다. 각 장에서 딥러닝 신경망을 배우는 동안 여러분이 올바른 결정을 내리는 데 도움이 될 모범 사례와 안전한 선택지도 알 수 있다. 이 책의 내용을 배우고 나면 현업 문제를 딥러닝 신경망을 사용해 신속하게 해결할 수 있을 것이다.

★ 이 책에서 다루는 내용 ★

  • 텐서플로와 케라스를 사용해 회귀 문제와 분류 문제 풀기
  • 텐서보드 사용법을 배워 신경망을 관찰하며 훈련하기
  • 하이퍼파라미터 최적화와 안전한 선택지를 택하는 방법과 모범 사례 배우기
  • CNN, RNN, LSTM 신경망을 빌드하고 처음부터 워드 임베딩 사용하기
  • 기계번역 애플리케이션이나 채팅 애플리케이션에 쓸 seq2seq 모델을 구축하고 훈련하기
  • 심층 Q 신경망을 이해하고 이를 활용해 자율 에이전트 문제 해결하기
  • 심층 Q 신경망을 탐색하고 자율 에이전트 문제 처리하기

★ 주요 특징 ★

  • 딥러닝의 핵심 개념과 각 개념을 구현하는 기술을 신속히 찾아 볼 수 있다.
  • CNN, RNN, LSTM 같은 다양한 딥러닝 모델을 훈련하는 데 필수적인 조언, 요령, 기법 등을 제시한다.
  • 필수 수학과 필수 이론으로 보강한 각 장에서 케라스 및 텐서플로를 사용해 모델을 훈련하고 정밀하게 조율하기 위한 모범 사례와 안전한 선택지를 제시한다.

마이크 베르니코(Mike Bernico)

마이크 베르니코는 스테이트팜 상호금융(State Farm Mutual Insurance Companies)의 수석 데이터 과학자이다. 또한 스프링 필드에 자리 잡은 일리노이 대학교에서 초빙 교수로 일하면서 데이터 과학 요론과 고급 신경망 및 딥러닝을 가르친다. 같은 대학교에서 석사 학위를 받았다. 오픈소스 소프트웨어 옹호자로서 오픈소스가 세상에 끼칠 이점을 지지한다. 자전거 타기, 여행 사진 촬영 및 과실주 만들기와 같은 엄청난 취미 생활을 즐기면서도 늘 배우려고 애쓴다.

박진수

다양한 개발, 저술, 번역 경험을 바탕으로 다양한 IT 융복합 사업을 전개하기를 바라며 1인 기업으로 발판을 다지고 있다. 번역한 책으로 《따라 하면서 배우는 유니티 ML-Agents》가 있다.

  • ▣ 01장: 딥러닝 건축 재료
    • 심층 신경망 아키텍처
      • 뉴런
      • 딥러닝의 손실 함수와 비용 함수
      • 순전파 과정
      • 역전파 함수
      • 확률적 경사 하강과 미니배치 경사 하강
    • 딥러닝을 위한 최적화 알고리즘
      • 경사 하강 시 운동량을 사용하기
      • RMSProp 알고리즘
      • Adam 최적화기
    • 딥러닝 프레임워크
      • 텐서플로란 무엇인가?
      • 케라스란 무엇인가?
      • 텐서플로의 인기 있는 대안들
      • 텐서플로와 케라스에 필요한 GPU
      • 엔비디아 CUDA 툴킷과 cuDNN 설치
      • 파이썬 설치
      • 텐서플로와 케라스 설치
    • 딥러닝용 데이터셋 구축
      • 딥러닝의 편향 오차 및 분산 오차
      • train, val, test 데이터 집합
      • 심층 신경망의 편향과 분산 관리
      • k 겹 교차 검증
    • 요약
    •  
  • ▣ 02장: 딥러닝으로 회귀 문제를 풀기
    • 회귀 분석과 심층 신경망
      • 회귀 분석에 신경망을 사용할 때의 이점
      • 회귀 분석에 신경망을 사용할 때의 단점
    • 회귀 분석에 심층 신경망을 사용하기
      • 머신러닝 문제를 계획하는 방법
      • 예제에 쓸 문제를 정의하기
      • 데이터셋 적재
      • 비용 함수 정의
    • 케라스로 MLP를 구축하기
      • 입력 계층의 모양
      • 은닉 계층의 모양
      • 출력 계층의 모양
      • 신경망 아키텍처
      • 케라스 모델을 훈련하기
      • 모델의 성능을 측정하기
    • 케라스로 심층 신경망을 구축하기
      • 심층 신경망 성능 측정
      • 모델의 하이퍼파라미터 조율
    • 훈련된 케라스 모델을 저장하고 적재하기
    • 요약
    •  
  • ▣ 03장: 텐서보드로 신경망의 훈련 과정을 살펴보기
    • 텐서보드에 대한 개요
    • 텐서보드를 설정하기
      • 텐서보드 설치
      • 텐서보드가 케라스/텐서플로와 대화하는 방법
      • 텐서보드 실행
    • 케라스와 텐서보드를 연결하기
      • 케라스 콜백 소개
      • 텐서보드 콜백을 생성하기
    • 텐서보드를 사용하기
      • 훈련 시각화
      • 신경망 그래프 시각화
      • 문제가 생긴 신경망을 시각화하기
    • 요약
    •  
  • ▣ 04장: 딥러닝으로 이진 분류 문제를 풀기
    • 이진 분류 및 심층 신경망
      • 심층 신경망의 장점
      • 심층 신경망의 단점
    • 사례 연구: 간질 발작 인식
      • 데이터셋 정의하기
      • 데이터를 적재하기
      • 모델의 입력과 출력
      • 비용 함수
      • 계량을 사용해 성능을 평가하기
    • 케라스에서 이진 분류기를 만들기
      • 입력 계층
      • 은닉 계층
      • 출력 계층
      • 종합하기
      • 모델을 훈련하기
    • 케라스에서 검사점 콜백을 사용하기
    • 사용자 지정 콜백에서 ROC AUC를 측정하기
    • 정밀도, 재현율 및 f1 점수 측정하기
    • 요약
    •  
  • ▣ 05장: 케라스로 다중 클래스 분류 문제를 풀기
    • 다중 클래스 분류와 관련된 심층 신경망
      • 장점
      • 단점
    • 사례 연구: 손글씨 숫자 분류
      • 문제 정의
      • 모델 입력 및 출력
      • 비용 함수
      • 계량
    • 케라스로 다중 클래스 분류기를 만들기
      • MNIST 적재
      • 입력 계층
      • 은닉 계층
      • 출력 계층
      • 종합하기
      • 훈련
      • 다중 클래스 모델에서 사이킷런의 계량을 사용하기
    • 드롭아웃을 사용해 분산을 통제하기
    • 정칙화를 사용해 분산을 통제하기
    • 요약
    •  
  • ▣ 06장: 하이퍼파라미터 최적화
    • 신경망 아키텍처도 하이퍼파라미터라고 생각해야 하는가?
      • 거인의 어깨 위에 서기
      • 과적합이 될 때까지 추가한 다음에 정칙화하기
      • 실천적 조언
    • 어떤 하이퍼파라미터를 최적화해야 하는가?
    • 하이퍼 파라미터 최적화 전략으로는 어떤 것들이 있는가?
      • 공통 전략 93
      • 사이킷런의 임의 탐색 기능을 사용하기
      • 하이퍼밴드
    • 요약
    •  
  • ▣ 07장: CNN을 처음부터 훈련하기
    • 합성곱 소개
      • 합성곱의 계층은 어떻게 작용하는가?
      • 합성곱 계층의 이점
      • 풀링 계층
      • 배치 정규화
    • 케라스에서 합성곱 신경망을 훈련하기
      • 입력
      • 출력
      • 비용 함수와 계량
      • 합성곱 계층
      • 완전 연결 계층
      • 케라스의 다중 GPU 모델
      • 훈련
    • 데이터를 확대하기
      • 케라스의 ImageDataGenerator
      • 생성기를 사용한 훈련
    • 요약
    •  
  • ▣ 08장: 사전 훈련 CNN을 사용한 전이 학습
    • 전이 학습의 개요
    • 전이 학습을 사용해야만 하는 때
      • 제한된 데이터
      • 공통 문제 정의역
    • 원본 및 대상의 크기와 유사도의 영향
      • 더 많은 데이터가 항상 유용하다
      • 원본/대상 정의역 유사도
    • 케라스로 하는 전이 학습
      • 대상 정의역 개요
      • 원본 정의역 개요
      • 원본 신경망 아키텍처
      • 전이 신경망 아키텍처
      • 데이터 준비
      • 데이터 입력
      • 훈련(특징 추출)
      • 훈련(미세 조정)
    • 요약
    •  
  • ▣ 09장: RNN을 처음부터 훈련하기
    • 재귀 신경망
      • 뉴런이 재귀하는 이유는?
      • 장단기 기억 신경망
      • 시간 펼침 역전파
    • 시계열 문제
      • 저량 및 유량
      • ARIMA 및 ARIMAX 예측
    • LSTM을 사용한 시계열 예측
      • 데이터 준비
      • 신경망 출력
      • 신경망 아키텍처
      • 상태 저장 및 상태 비저장 LSTM
      • 훈련
      • 성능 측정
    • 요약
    •  
  • ▣ 10장: 처음부터 워드 임베딩으로 LSTM을 훈련하기
    • 자연어 처리 소개
      • 의미 분석
      • 문서 분류
    • 텍스트 벡터화
      • NLP 용어
      • 단어 주머니 모델
      • 어간 추출, 표제어 추출 및 불용어
      • 계수 벡터화와 TF-IDF 벡터화
    • 워드 임베딩
      • 간단한 예제
      • 예측을 통한 워드 임베딩 학습
      • 셈을 통한 워드 임베딩 학습
      • 단어에서 문서로 가져오기
    • 케라스 임베딩 계층
    • 자연어 처리를 위한 1D CNN
    • 문서 분류에 대한 사례 연구
      • 케라스 임베딩 계층 및 LSTM을 이용한 정서 분석
      • GloVe를 사용하는 문서 분류와 사용하지 않는 문서 분류
      • 데이터 준비
    • 요약
    •  
  • ▣ 11장: Seq2Seq 모델을 훈련하기
    • 시퀀스-투-시퀀스 모델
      • 시퀀스-투-시퀀스 모델 응용
      • 시퀀스-투-시퀀스 모델의 아키텍처
      • 문자 대 단어
      • 교사 강요
      • 주의집중
      • 번역 계량
    • 기계 번역
      • 데이터를 이해하기
    • 데이터를 적재하기
      • 원핫인코딩
      • 신경망 아키텍처를 훈련하기
      • 신경망 아키텍처(추론용)
      • 종합하기
      • 훈련
      • 추론
    • 요약
    •  
  • ▣ 12장: 심층강화학습을 사용하기
    • 강화학습 개요
      • 마르코프 결정 과정
      • Q 학습
      • 무한 상태 공간
      • 심층 Q 신경망
      • 이용 대 탐색
      • 딥마인드
    • 케라스 강화학습 프레임워크
      • Keras-RL 설치
      • OpenAI gym 설치
      • OpenAI gym 사용하기
    • 케라스에서 강화학습 에이전트를 구축하기
      • 카트폴
      • 루나랜더
    • 요약
    •  
  • ▣ 13장: 생성적 적대 신경망
    • GAN의 개요
    • 심층 합성곱 GAN의 아키텍처
      • 적대적 훈련 아키텍처
      • 생성기 아키텍처
      • 판별기 아키텍처
      • 적층한 훈련
    • GAN 훈련에 실패하는 방법
      • 안정성
      • 최빈값 붕괴
    • GAN을 위한 안전한 선택지
    • 케라스 GAN을 사용해 MNIST 이미지를 생성하기
      • 데이터셋을 적재하기
      • 생성기를 구축하기
      • 판별기를 구축하기
      • 적층 모델을 구축하기
      • 훈련 루프
      • 모델 평가
    • 케라스 GAN을 사용해 CIFAR-10 이미지를 생성하기
      • CIFAR-10을 적재하기
      • 생성기를 구축하기
      • 판별기 구축
      • 훈련 루프
      • 모델을 평가하기
    • 요약
  • 4쪽, '뉴런의 활성 함수'라는 제목 바로 아래 줄에서,

    도입하는 알과 --> 도입하는 일과

  • 7쪽, 첫 번째 단락 끝 부분에,

    빠르지 않는다는 --> 빠르지 않다는

  • 24쪽, '요약'이라는 제목의 위쪽 두 번째 줄에,

    k 겹 교차 검증(stratified k-fold) --> 층화(stratified) k겹 교차 검증

  • 45쪽, 제일 밑에서 두 번째 줄에,

    정말 하기 쉬우며 --> 정말 쉬우며

  • 64쪽, 그림 바로 아래 줄에,

    우리는 우리의 val_loss가 --> val_loss가

  • 72쪽, '범주형 출력'이라는 제목 아래 세 번째 줄에서,

    출력이 합쳤을 때 --> 출력을 합했을 때

  • 78쪽, '훈련'이라는 제목 바로 아래 줄에서,

    각주 번호 2를 삭제

  • 86쪽, 각주 5번의 두 번째 줄에서,

    가중치라고 여기면 --> 활성치라고 여기면

  • 95쪽, 첫 번째 코드의 두 번째 줄(batches로 시작되는 줄)을 네 칸만큼 들여서 쓰기

  • 95쪽, 제일 아래쪽 코드의 두 번째 줄(param으로 시작되는 줄)을 네 칸만큼 들여서 쓰기

  • 98쪽, 두 번째 코드의 두 번째 줄(batches로 시작되는 줄)~네 번째 줄(return으로 시작되는 줄)을 네 칸만큼 들여서 쓰기

  • 107쪽, 두 번째 코드의 두 번째 줄(inputs로 시작되는 줄)을 네 칸만큼 들여서 쓰기

  • 126쪽, 코드의 두 번째 줄에서,

    rescalea --> rescale

  • 143쪽, 첫 번째 줄에서,

    무역업자들 --> 중개인들

  • 144쪽, 세 번째 줄에서,

    훈련 데이터를 데스트 데이터에서 --> 훈련 데이터에서 테스트 데이터를

  • 155쪽, 마지막 줄에서,

    매장 계층 --> 임베딩 계층

  • 159쪽, 두 번째 단락의 마지막 줄에서,

    타결짓고 싶어할 것입니다 --> 합의하는 게 좋겠습니다

  • 165쪽, 밑에서 네 번째 줄에서,

    도마뱀 벡터 --> 도마뱀 벡터(Lizard)

  • 176쪽, '종합하기' 제목의 바로 아래 줄에서,

    부품들을 --> 구성요소들을

  • 185쪽, 두 번째 코드 단락 아래 두 번째 줄에서,

    있다어서 --> 있어서

  • 197쪽, 밑에서 다섯 번째 줄에서,

    탐이 --> 톰이

  • 200쪽, 코드 단락 아래 첫 번째 줄에서,

    각 구를 --> 각 구문을

  • 207쪽, 밑에서 두 번째 줄에서,

    이상적으로는 --> 이상적으로

  • 219쪽, 세 번째 본문 단락의 두 번째 줄에서,

    중이므로 --> 중임에도 불구하고

  • 221쪽, '이용 대 탐색' 제목 아래 두 번째 줄에서,

    바란다. --> 바란다는 말이다.

  • 222쪽, 두 번째 줄에서

    경우에 에이전트는 무작위 행동을 수행한다. --> 경우에만 에이전트가 무작위 행동을 수행하게 하자는 것이다.

  • 227쪽, 두 번째 줄에서,

    에이전트를 한 개를 생성하고 --> 에이전트 한 개를 생성해

  • 231쪽, 다섯 번째 줄에서,

    각주 번호인 16을 삭제

  • 236쪽, 첫 번쨰 줄에서,

    (z)의 벡터의 --> 으로 채워진 z라는 벡터의

  • 236쪽, 세 번째 줄에서,

    이 방법은 입력 내용이 실제로 진품 P(X)일 가능성을 결정하는 것이다. --> 이런 방식으로 입력 내용이 실제로 진품일 가능성인 P(X)를 결정할 수 있다.

  • 240쪽, 첫 번째 줄에서,

    loss 함수는 --> 손실 함수(loss function)는

  • 240쪽, 세 번째 줄에서,

    loss는 --> 손실(loss)는

  • 240쪽, 'GAN 훈련에 실패하는 방법'이라는 제목 바로 아래 줄에서

    훈련하는데 --> 훈련하는 데

  • 247쪽, 다섯 번째 줄에서,

    학습율을 --> 학습 속도(learning rate, 코드에서는 lr에 해당)를