구글 브레인 팀에게 배우는 딥러닝 with TensorFlow.js
브라우저에서 딥러닝 모델을 빌드하고 실행하는 TensorFlow.js
딥러닝 기초부터 구글 브레인 팀의 노하우까지!
딥러닝은 컴퓨터 비전, 이미지 처리, 자연어 처리 등 다양한 분야에 변화를 불러왔다. 이제 자바스크립트 개발자는 파이썬이나 R에 의존하지 않고 TensorFlow.js를 사용하여 딥러닝 모델을 구축할 수 있다. 이 책은 『케라스 창시자에게 배우는 딥러닝』 책을 토대로 구글 브레인 팀 핵심 개발자 3인이 TensorFlow.js에 맞춰 코드를 재작성했고, 자바스크립트 생태계를 위한 새로운 내용을 많이 추가했다. TensorFlow.js의 개요부터 이미지와 사운드 인식, 전이 학습, 모델 시각화, 시퀀스와 텍스트를 위한 딥러닝, 생성적 딥러닝 등 딥러닝 기초부터 심층 강화 학습까지 TensorFlow.js로 딥러닝을 시작하기에 필요한 모든 것을 설명한다. 브라우저에서 얼마나 많은 작업을 수행할 수 있는지 알면 놀랄 것이다. 자바스크립트에 능숙한 개발자라면 TensorFlow.js로 딥러닝을 시작해보자.
«구글 브레인 팀에게 배우는 딥러닝 with TensorFlow.js»는 1~4장을 공개합니다.
목차
- - 제 1 부 - 동기 부여와 기본 개념
- 1장 딥러닝과 자바스크립트
- 1.1 인공 지능, 머신 러닝, 신경망 그리고 딥러닝
- 1.1.1 인공 지능
- 1.1.2 전통적인 프로그래밍과 머신 러닝의 차이점
- 1.1.3 신경망과 딥러닝
- 1.1.4 왜 딥러닝인가? 왜 지금인가?
- 1.2 왜 자바스크립트와 머신 러닝을 합쳐야 하나요?
- 1.2.1 Node.js를 사용한 딥러닝
- 1.2.2 자바스크립트 생태계
- 1.3 왜 TensorFlow.js인가?
- 1.3.1 TensorFlow, Keras, TensorFlow.js에 대한 간략한 역사
- 1.3.2 TensorFlow.js를 선택하는 이유: 비슷한 라이브러리와의 간략한 비교
- 1.3.3 전 세계에서 TensorFlow.js가 어떻게 사용되고 있나요?
- 1.3.4 이 책이 TensorFlow.js에 대해 가르쳐 줄 것과 그렇지 않은 것
- 1.4 연습 문제
- 1.5 요약
- - 제 2 부 - TensorFlow.js 소개
- 2장 TensorFlow.js 시작하기: 간단한 선형 회귀
- 2.1 예제 1: TensorFlow.js를 사용해 다운로드 시간 예측하기
- 2.1.1 프로젝트 개요: 소요 시간 예측
- 2.1.2 코드와 콘솔의 상호 작용 안내
- 2.1.3 데이터 생성과 포매팅
- 2.1.4 간단한 모델 정의하기
- 2.1.5 훈련 데이터에서 모델 훈련하기
- 2.1.6 훈련된 모델을 사용해 예측 만들기
- 2.1.7 첫 번째 예제 요약
- 2.2 Model.fit( ) 내부: 예제 1의 경사 하강법 분석
- 2.2.1 경사 하강법 최적화 이해하기
- 2.2.2 역전파: 경사 하강법 내부
- 2.3 여러 입력 특성을 가진 선형 회귀
- 2.3.1 보스턴 주택 데이터셋
- 2.3.2 깃허브에서 보스턴 주택 프로젝트를 가져와 실행하기
- 2.3.3 보스턴 주택 데이터 얻기
- 2.3.4 보스턴 주택 문제를 정확하게 정의하기
- 2.3.5 데이터 정규화
- 2.3.6 보스턴 주택 데이터에서 선형 회귀 훈련하기
- 2.4 모델 해석 방법
- 2.4.1 학습된 가중치에서 의미 추출하기
- 2.4.2 모델에서 가중치 추출하기
- 2.4.3 모델 해석 가능성에 대한 주의 사항
- 2.5 연습 문제
- 2.6 요약
- 3장 비선형성 추가: 가중치 합을 넘어서
- 3.1 비선형성과 그 필요성
- 3.1.1 신경망의 비선형성에 대한 직관 기르기
- 3.1.2 하이퍼파라미터 최적화
- 3.2 출력층의 비선형성: 분류를 위한 모델
- 3.2.1 이진 분류
- 3.2.2 이진 분류기의 품질 측정: 정밀도, 재현율, 정확도, ROC 곡선
- 3.2.3 ROC 곡선: 이진 분류의 균형 관계 확인하기
- 3.2.4 이진 크로스 엔트로피: 이진 분류를 위한 손실 함수
- 3.3 다중 분류
- 3.3.1 범주형 데이터의 원-핫 인코딩
- 3.3.2 소프트맥스 활성화 함수
- 3.3.3 범주형 크로스 엔트로피: 다중 분류를 위한 손실 함수
- 3.3.4 오차 행렬: 다중 분류를 상세하게 분석하기
- 3.4 연습 문제
- 3.5 요약
- 4.1.1 MNIST 데이터셋
- 4장 합성곱 신경망을 사용해 이미지와 사운드 인식하기
- 4.1 벡터에서 텐서로 이미지 표현하기
- 4.2 첫 번째 합성곱 신경망
- 4.2.1 conv2d 층
- 4.2.2 maxPooling2d 층
- 4.2.3 합성곱과 풀링의 반복
- 4.2.4 flatten 층과 밀집 층
- 4.2.5 합성곱 신경망 훈련하기
- 4.2.6 합성곱 신경망을 사용해 예측하기
- 4.3 브라우저를 넘어서: Node.js로 모델 훈련 속도 높이기
- 4.3.1 tfjs-node 사용하기
- 4.3.2 Node.js에서 모델을 저장하고 브라우저에서 불러오기
- 4.4 음성 인식: 합성곱 신경망을 오디오 데이터에 적용하기
- 4.4.1 스펙트로그램: 사운드를 이미지로 표현하기
- 4.5 연습 문제
- 4.6 요약
- 5장 전이 학습: 사전 훈련된 신경망 재사용하기
- 5.1 전이 학습: 사전 훈련된 모델을 재사용하기
- 5.1.1 출력 크기가 같은 전이 학습: 동결 층
- 5.1.2 출력 크기가 같지 않은 전이 학습: 베이스 모델의 출력을 사용해 새로운 모델 만들기
- 5.1.3 미세 튜닝을 통해 전이 학습을 최대로 활용하기: 오디오 예제
- 5.2 합성곱 신경망에서 전이 학습을 통한 객체 탐지
- 5.2.1 합성된 장면을 기반으로 한 간단한 객체 탐지 문제
- 5.2.2 간단한 객체 탐지 자세히 알아보기
- 5.3 연습 문제
- 5.4 요약
- - 제 3 부 - TensorFlow.js를 사용한 고급 딥러닝
- 6장 데이터 다루기
- 6.1 tf.data를 사용해 데이터 관리하기
- 6.1.1 tf.data.Dataset 객체
- 6.1.2 tf.data.Dataset 만들기
- 6.1.3 데이터셋에서 데이터 가져오기
- 6.1.4 tfjs-data 데이터셋 다루기
- 6.2 model.fitDataset으로 모델 훈련하기
- 6.3 데이터 추출의 일반적인 패턴
- 6.3.1 CSV 데이터 다루기
- 6.3.2 tf.data.webcam()을 사용해 비디오 데이터 가져오기
- 6.3.3 tf.data.microphone()을 사용해 오디오 데이터 가져오기
- 6.4 데이터에 있는 문제 처리하기
- 6.4.1 데이터 이론
- 6.4.2 데이터 문제를 감지하고 처리하기
- 6.5 데이터 증식
- 6.6 연습 문제
- 6.7 요약
- 7장 데이터와 모델 시각화
- 7.1 데이터 시각화
- 7.1.1 tfjs-vis를 사용해 데이터 시각화하기
- 7.1.2 통합 사례 연구: tfjs-vis를 사용한 날씨 데이터 시각화
- 7.2 훈련된 모델 시각화
- 7.2.1 합성곱 신경망의 내부 활성화 값 시각화하기
- 7.2.2 합성곱 층을 최대로 활성화하는 이미지 시각화하기
- 7.2.3 합성곱 분류 결과에 대한 시각적 해석
- 7.3 추가 자료
- 7.4 연습 문제
- 7.5 요약
- 8장 과소적합, 과대적합과 머신 러닝의 일반적인 워크플로
- 8.1 온도 예측 문제 구성
- 8.2 과소적합, 과대적합 그리고 해결책
- 8.2.1 과소적합
- 8.2.2 과대적합
- 8.2.3 가중치 규제로 과대적합 감소하고 시각화하기
- 8.3 머신 러닝의 일반적인 워크플로
- 8.4 연습 문제
- 8.5 요약
- 9장 시퀀스와 텍스트를 위한 딥러닝
- 9.1 두 번째 날씨 예측: RNN 소개
- 9.1.1 밀집 층이 순서를 모델링하지 못하는 이유
- 9.1.2 RNN이 순서를 모델링하는 방법
- 9.2 텍스트를 위한 딥러닝 모델 만들기
- 9.2.1 머신 러닝에서의 텍스트 표현 방법: 원-핫 인코딩과 멀티-핫 인코딩
- 9.2.2 감성 분석 문제를 위한 첫 번째 모델
- 9.2.3 더 효율적인 단어 표현: 단어 임베딩
- 9.2.4 1D 합성곱 신경망
- 9.3 어텐션 메커니즘을 사용한 시퀀스-투-시퀀스 작업
- 9.3.1 시퀀스-투-시퀀스 작업 정의
- 9.3.2 인코더-디코더 구조와 어텐션 메커니즘
- 9.3.3 어텐션 기반의 인코더-디코더 모델 자세히 알아보기
- 9.4 추가 자료
- 9.5 연습 문제
- 9.6 요약
- 10장 생성적 딥러닝
- 10.1 LSTM을 사용해 텍스트 생성하기
- 10.1.1 다음 문자 예측기: 간단하게 텍스트를 생성하는 방법
- 10.1.2 LSTM 텍스트 생성 예제
- 10.1.3 온도: 생성된 텍스트의 무작위성 조절하기
- 10.2 변이형 오토인코더: 이미지를 위한 효율적이고 구조적인 벡터 표현 찾기
- 10.2.1 오토인코더와 VAE: 기본 아이디어
- 10.2.2 VAE 예제: 패션 MNIST
- 10.3 GAN으로 이미지 생성하기
- 10.3.1 GAN의 기본 아이디어
- 10.3.2 ACGAN의 구성 요소
- 10.3.3 ACGAN 훈련 자세히 알아보기
- 10.3.4 MNIST ACGAN 훈련과 이미지 생성
- 10.4 추가 자료
- 10.5 연습 문제
- 10.6 요약
- 11장 심층 강화 학습
- 11.1 강화 학습 문제 정의
- 11.2 정책 네트워크와 정책 그레이디언트: 카트-막대 예제
- 11.2.1 카트-막대 강화 학습 문제
- 11.2.2 정책 네트워크
- 11.2.3 정책 네트워크 훈련하기: REINFORCE 알고리즘
- 11.3 가치 네트워크와 Q-러닝:스네이크 게임 예제
- 11.3.1 강화 학습 문제로서의 스네이크 게임
- 11.3.2 마르코프 결정 과정과 Q-가치
- 11.3.3 심층 Q-네트워크
- 11.3.4 심층 Q-네트워크 훈련하기
- 11.4 추가 자료
- 11.5 연습 문제
- 11.6 요약
- - 제 4 부 - 정리와 마무리 멘트
- 12장 모델 테스트, 최적화, 배포
- 12.1 TensorFlow.js 모델 테스트하기
- 12.1.1 전통적인 단위 테스트
- 12.1.2 골든 값으로 테스트하기
- 12.1.3 지속적인 훈련 고려 사항
- 12.2 모델 최적화
- 12.2.1 훈련 후 가중치 양자화를 통한 모델 크기 최적화
- 12.2.2 GraphModel 변환을 사용한 추론 속도 최적화
- 12.3 다양한 플랫폼과 환경에 TensorFlow.js 모델 배포하기
- 12.3.1 웹에 배포할 때 추가적인 고려 사항
- 12.3.2 클라우드 서비스에 배포
- 12.3.3 크롬 확장 같은 브라우저 확장 프로그램으로 배포하기
- 12.3.4 자바스크립트 기반 모바일 애플리케이션에 TensorFlow.js 모델 배포하기
- 12.3.5 자바스크립트 기반 크로스 플랫폼 데스크톱 애플리케이션에 TensorFlow.js 모델 배포하기
- 12.3.6 위챗과 다른 자바스크립트 기반 모바일 앱 플러그인 시스템에 TensorFlow.js 모델 배포하기
- 12.3.7 단일 보드 컴퓨터에 TensorFlow.js 모델 배포하기
- 12.3.8 배포 방식 정리
- 12.4 추가 자료
- 12.5 연습 문제
- 12.6 요약
- 13장 정리, 결론 그리고 그 외 사항
- 13.1 검토할 주요 개념
- 13.1.1 AI, 머신 러닝, 딥러닝
- 13.1.2 머신 러닝 중에서 딥러닝이 독보적인 이유
- 13.1.3 딥러닝에 대한 고수준의 소개
- 13.1.4 딥러닝을 가능하게 한 핵심 기술
- 13.1.5 자바스크립트에서 딥러닝으로 가능한 애플리케이션과 기회
- 13.2 딥러닝 워크플로와 TensorFlow.js 소개
- 13.2.1 지도 학습 딥러닝의 일반적인 워크플로
- 13.2.2 TensorFlow.js의 모델과 층
- 13.2.3 TensorFlow.js에서 사전 훈련된 모델 사용하기
- 13.2.4 딥러닝의 가능성
- 13.2.5 딥러닝의 한계
- 13.3 딥러닝 트렌드
- 13.4 추가 학습을 위한 안내
- 13.4.1 캐글에서 실전 머신 러닝 문제 연습하기
- 13.4.2 아카이브에서 최신 개발 논문 읽기
- 13.4.3 TensorFlow.js 생태계
- 부록 A 실습 환경 설정
- 부록 B tfjs-node-gpu와 필수 라이브러리 설치
- B.1 리눅스에서 tfjs-node-gpu 설치하기
- B.2 윈도에서 tfjs-node-gpu 설치하기
- 부록 C TensorFlow.js 텐서와 연산 튜토리얼
- C.1 텐서 생성과 텐서 축 규칙
- C.2 기본 텐서 연산
- C.3 TensorFlow.js의 메모리 관리: tf.dispose( )와 tf.tidy( )
- C.4 그레이디언트 계산
- C.5 연습 문제<
- 부록 D 용어 사전