브라우저에서 딥러닝 모델을 빌드하고 실행하는 TensorFlow.js
딥러닝 기초부터 구글 브레인 팀의 노하우까지!
딥러닝은 컴퓨터 비전, 이미지 처리, 자연어 처리 등 다양한 분야에 변화를 불러왔다. 이제 자바스크립트 개발자는 파이썬이나 R에 의존하지 않고 TensorFlow.js를 사용하여 딥러닝 모델을 구축할 수 있다. 이 책은 『케라스 창시자에게 배우는 딥러닝』 책을 토대로 구글 브레인 팀 핵심 개발자 3인이 TensorFlow.js에 맞춰 코드를 재작성했고, 자바스크립트 생태계를 위한 새로운 내용을 많이 추가했다. TensorFlow.js의 개요부터 이미지와 사운드 인식, 전이 학습, 모델 시각화, 시퀀스와 텍스트를 위한 딥러닝, 생성적 딥러닝 등 딥러닝 기초부터 심층 강화 학습까지 TensorFlow.js로 딥러닝을 시작하기에 필요한 모든 것을 설명한다. 브라우저에서 얼마나 많은 작업을 수행할 수 있는지 알면 놀랄 것이다. 자바스크립트에 능숙한 개발자라면 TensorFlow.js로 딥러닝을 시작해보자.
· 한국어판 예제 데모 사이트: https://ml-ko.kr/tfjs
Contents
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장. 합성곱 신경망을 사용해 이미지와 사운드 인식하기
4.1 벡터에서 텐서로 이미지 표현하기
__4.1.1 MNIST 데이터셋
4.2 첫 번째 합성곱 신경망
__4.2.1 conv2d 층
__4.2.2 maxPooling2d 층 1
__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.1.1 스칼라(랭크-0 텐서)
__C.1.2 tensor1d(랭크-1 텐서)
__C.1.3 tensor2d(랭크-2 텐서)
__C.1.4 랭크-3과 고차원 텐서
__C.1.5 데이터 배치 개념
__C.1.6 실제 텐서 예시
__C.1.7 텐서 버퍼에서 텐서 만들기
__C.1.8 값이 0인 텐서와 값이 1인 텐서 만들기
__C.1.9 랜덤한 값을 가진 텐서 만들기
C.2 기본 텐서 연산
__C.2.1 단항 연산
__C.2.2 이진 연산
__C.2.3 텐서 연결과 슬라이싱
C.3 TensorFlow.js의 메모리 관리: tf.dispose( )와 tf.tidy( )
C.4 그레이디언트 계산
C.5 연습 문제
부록 D. 용어 사전
Author
프랑소와숄레,에릭 닐슨,스탠 바일시,샨칭 차이,박해선
가장 널리 사용되는 딥러닝 프레임워크인 케라스의 창시자다. 현재 구글의 소프트웨어 엔지니어로 케라스 팀을 이끌고 있으며, 추상화, 추론 그리고 인공 지능의 일반성을 높이기 위한 방법을 연구한다.
가장 널리 사용되는 딥러닝 프레임워크인 케라스의 창시자다. 현재 구글의 소프트웨어 엔지니어로 케라스 팀을 이끌고 있으며, 추상화, 추론 그리고 인공 지능의 일반성을 높이기 위한 방법을 연구한다.