본문 바로가기

book

밑바닥부터 시작하는 딥러닝.2

확실히 원리 기반으로 책이 설명되어 있는거 같아서 좋은거 같다.

1편에 이어서 2편도 공부해보고 느낀점은 간략히 정리하려고 한다.

2편을 볼려면, 그래도 1편을 보고 나서 학습하는게 좋을거 같다.

이 책의 특징은 라이브러리나, 프레임워크를 사용하지 않고 딥러닝 원리를 설명하는데 있다.

(numpy정도는 제외!!)

번역 진행시 윤영선 교수님의 기여로 원서보다 조금 알기쉽게 추가된 내용이 있다고 하는데, 더 좋아진거 같다.

간단하게 Chap별로 중요한 keyword정도 뽑아보면서 정리하려고 한다.

 

 

CHAPTER 1 신경망 복습

1.1 수학과 파이썬 복습

  • 벡터(1차원 배열), 행렬(2차원 배열)
  • numpy의 브로드캐스팅 기능 : 배열의 차원이 달라도 자동적으로 확장하는 기능
  • 백터의 내적 : 두 벡터가 얼마나 같은 방향을 향하고 있는가 (길이가 1인 경우 같은 방향이면 1, 반대 방향이면 -1)
  • np.dot, np.matmul
  • 행렬의 곱 ( 2x3, 3x5 = 2x5) : 이 부분이 동일해야 함
  • h = xW + b (h : 은닉층의 뉴런, x : 입력값, W:가중치, b:편향) 모두 행렬로 구성된다.

1.2 신경망의 추론

  • 신경망의 작업은 "학습", "추론" 으로 구분
  • 신경망(완전연결계층) : 입력층 → 은닉층 → 출력층
  • 화살표 : 가중치 부여 + 활성화 함수 적용값 + 편향 (뉴런에 영향 받지 않는 값, 정소) 
  • 완전연결계층에 의한 변환은 '선형'변환
    L 비선형효과를 부여하는것이 '활성화 함수'
    L 비선형 함수를 이용해서 신경망의 표현력을 높임
    L 활성화 함수는 다양함 (ex : 시그모이드 함수)
  • 순전파 : 입력층 → 출력층 방향으로 진행 (그반대 진행은 역전파)

1.3 신경망의 학습

  • 학습을 먼저 하고 그 이후에 추론을 진행한다.
  • 손실함수 
    L 손실 (loss) : 신경망의 성능을 나타내는 척도
    L 교차 엔트로피 오차(Cross Entropy Error)를 이용
  • 손실함수를 적용한 신경망 계층 구성
    X → Affline → Sigmoid → Affine → Softmax → Cross Entropy Error → L
                                                                              → t (정답 레이블)
  • 소프트맥스 함수 : 0.0이상 ~ 1.0 이하의 실수, 출력값을 '확률'로 해석함
  • 윈핫 벡터 : 단 하나의 원소만 1이고, 나머지는 0인 벡터 ex : [0,0,1]
  • 미분과 기울기 : 신경망 학습의 목표인, 손실을 최소화 하는 매개변수를 찾은 역활
  • 각 매개변수에 대한 손실의 기울기 계산
    L 오차역전법 이용 : 연쇄법칙을 이용함 (합성함수에 대한 미분의 법칙)
  • 계산그래프 : 덧셈노드, 곱셈노드, Repeat노드, Sum노드, MatMul노드 

1.4 신경망으로 문제를 풀다

  • 에폭 : 학습의 단위, 1에폭은 학습데이터를 모두 살펴본 시점

1.5 계산 고속화

  • 비트 정밀도
    L numpy의 부동소수점은 기본적으로 64비트
    L 신경망 추론, 학습시 32비트도 무방
    L 가중치 계산시, 16비트도 무방
  • GPU (쿠파이)
    L 파이선 Library, GPU를 이용한 병렬계산 수행 
    L 엔비디아 GPU에서만 동작함
    L CUDA라는 GPU전용 범용 병렬 컴퓨팅 플랫폼 설치 필수
    L Numpy와 호환되는 API제공

 

CHAPTER 2 자연어와 단어의 분산 표현

2.1 자연어 처리란

  • NLP (Natural Language Processing) : 자연어 처리 (우리말을 컴퓨터에게 이해시키는 기술, 분야)
  • 시소러스(유의어사전)를 활용한 기법 (2장)
  • 통계기반 기법 (2장)
  • 추론기반 기법 (3장)

2.2 시소러스

  • WordNet과 같은 유명한 사항이 있다.
  •  시대의 변화 대응이 어렵다.
  • 사람의 인견비가 많이 든다.
  • 단어의 미묘한 차이를 표현할 수 없다.

2.3 통계 기반 기법

  • 말뭉치(대량의 사람이 직접 작성한 대량의 텍스트 테이터)
  • 분산표현 : 색을 표현하는 RGB 백터 표현(120, 29, 10) 처럼 단어도 그렇게 표현을 진행해보자
  • 분포가설 : 단어의 의미는 주변단어에 의해서 형성된다.
  • 윈도우 크기 : 주변에 단어를 몇개나 포함할지 (연관성을 찾기 위해서)
  • 단어간의 유사도 : 코사인유사도 이용해서 계산

2.4 통계 기반 기법 개선하기

  • 점별 상호정보량(PMI) : the와 같은 단어의 빈도가 많이 발생하는 현상
  • 양의 상호정보량(PPMI) : PMI에서 두 단어가 동시발생 횟수가 0인경우 문제 회피
  • 차원감소 : 벡터의 차원을 줄이는 것 (중요한 정보는 최대한 유지)
    L SVD (특잇값분해)
  • 고속 SVD를 이용하기 이해서 sklearn를 이용한다.

CHAPTER 3 word2vec

3.1 추론 기반 기법과 신경망

  • 2장에서는 '통계기반기법' 이번장에서는 '추론기반기법'을 학습
  • 통계 기반 기법의 문제점
    L 100만 x 100만개의 큰 행렬을 만드는 현실적인 어려움 발생
  • 통계기반은 한번에 과정을 수행하는데, 추론기반은 미니배치를 통해서 작게 나누어서 학습이 가능
  • 문장에 대해서 원핫표현으로 구성

3.2 단순한 word2vec

  • CBOW모델 : 맥락(주변의 단어)으로 부터 타깃(중앙단어)을 추측하는 용도의 신경망

3.3 학습 데이터 준비

3.4 CBOW 모델 구현

  • MatMul계층과 Softmax with Loss계층을 사용

3.5 word2vec 보충

  • 2가지 모델 : CBOW모델, skip-gram모델 (CBOW모델을 역전시킨 모델)
  • skip-gram
  • 단어 분산 표현의 정밀도 면에서 skip-gram모델의 결과가 더 좋은 경우가 많다.
  • 학습속도는 CBOW모델이 더 빠르다. (skip모델은 손실을 맥락의 수만큼 구해야 되기 때문에)
  • Glove기법 : word2vec이후 추론 기반과 통계기반 기법응 융햡한 기법

CHAPTER 4 word2vec 속도 개선

4.1 word2vec 개선 ①

  • 어휘가 100만개, 은닉층에 100개의 뉴런이 있는 경우, 속도 문제 발생
  • Embedding 계층을 도입한다.
  • 기존의 MatMul계층을 Embedding계층으로 전환하여 진행

4.2 word2vec 개선 ②

  • 은닉층 이후의 처리 (행렬 곱과 Softmax 계층의 계산)
  • 네거티브 샘플링 기법 : 다중 분류에서 이진분류로 진행
  • 이진분류 문제
    L 시그모이드 함수를 적용해서 확률로 변환
    L 손실 : 손실함수로 '교차 엔트로피 오차'를 사용
  •  

4.3 개선판 word2vec 학습

  •  

4.4 word2vec 남은 주제

  •  

4.5 정리

 

CHAPTER 5 순환 신경망(RNN)

5.1 확률과 언어 모델

5.2 RNN이란

  • 순환신경망
  • BPTT : 오차역전파법 (시간방향으로 펼친 신경망의 오차역전파법)
  • Truncated BPTT : 시간 축 방향으로 너무 길어진 신경망을 적당한 지점에서 자르는 기법
    L 데이터를 순서대로 제공하기
    L 미니배치별로 데이터를 제공하는 시작위치 옮기기
  • Time RNN : T개 단계분의 작업을 한꺼번에 처리하는 계층

5.3 RNN 구현

5.4 시계열 데이터 처리 계층 구현

5.5 RNNLM 학습과 평가

5.6 정리

 

CHAPTER 6 게이트가 추가된 RNN

6.1 RNN의 문제점

6.2 기울기 소실과 LSTM

6.3 LSTM 구현

6.4 LSTM을 사용한 언어 모델

6.5 RNNLM 추가 개선

6.6 정리

 

CHAPTER 7 RNN을 사용한 문장 생성

7.1 언어 모델을 사용한 문장 생성

7.2 seq2seq

7.3 seq2seq 구현

7.4 seq2seq 개선

7.5 seq2seq를 이용하는 애플리케이션

7.6 정리

 

CHAPTER 8 어텐션

8.1 어텐션의 구조

8.2 어텐션을 갖춘 seq2seq 구현

8.3 어텐션 평가

8.4 어텐션에 관한 남은 이야기

8.5 어텐션 응용

8.6 정리

 

APPENDIX A 시그모이드 함수와 tanh 함수의 미분

A.1 시그모이드 함수

A.2 tanh 함수

A.3 정리

 

APPENDIX B WordNet 맛보기

B.1 NLTK 설치

B.2 WordNet에서 동의어 얻기

B.3 WordNet과 단어 네트워크

B.4 WordNet을 사용한 의미 유사도

 

APPENDIX C GRU

C.1 GRU의 인터페이스

C.2 GRU의 계산 그래프