밑바닥부터 시작하는 딥러닝 2 - 3장

Jajuna_99·2022년 9월 23일
0

word2vec

전 장과는 다른 통계 기반 기법과는 다른 추론 기반 기법이 등장하고 당연하게도 딥러닝 부분도 포함한다.

추론 기반 기법과 신경망

통계 기반 기법의 문제점 (p.115)

  • 통계 기반 기법은 말뭉치 전체의 통계를 단 1회의 처리로 단어의 분산 표현을 얻는다. -> 시간이 오래 걸리고 컴퓨팅 자원이 많이 들어갈 수 밖에 없다.
  • 반면 추론 기반 기법은 신경망을 이용해 미니배치로 학습하는 것이 일반적이다. -> 소량의 학습 샘플씩 반복해서 학습하며 가중치를 갱신해간다. -> 병렬 계산이 가능하고, 계산량이 큰 작업도 가능하게 만든다.
  • 배치 학습과 미니 배치 학습으로 구분할 수도 있겠다.
  • 여기서 추론이란 주변 단어(맥락)이 주어졌을 때 타깃이 되는 단어(미지의 단어)가 무슨 단어가 될 지 추측 하는 작업이다.
  • 추론 문제를 반복해서 풀면서 단어의 출현 패턴을 학습하는 것이다.

신경망에서의 단어 처리

신경망을 이용해 단어를 처리하기 위해서는 단어를 우선 고정 길이의 벡터로 변환해야 한다. (one-hot) 사용

  • 원-핫 벡터 : 벡터의 원소 중 하나만 1이고 나머지는 0인 벡터
  • 예를 들어 'You say goodbye and I say hello.'에 경우 각 단어들을 (전처리 후) 하나의 원소로 갖는 고정 길이의 벡터로 만든다. -> 이 경우는 원소가 7개 -> 각 단어 대응하는 원소가 1이다.
  • 그리고 7개 뉴런으로 구성된 입력층을 만든다.
  • 입력층 뉴런과 가중치합이 은닉층 뉴런이 된다. 책에서는 완전연결계층으로 구성한다. (p.119)
  • 값이 1인 원소 빼고 나머지는 행렬 곱에서 걸러져 은닉층으로 도달하지 못한다. (p.119) -> 개선 예정

단순한 word2vec (p.121)

word2vec에서 제안하는 CBOW(continuous bag-of-words) 모델을 구현할 예정이다.

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

    • 입력층을 2개로 하는데 맥락 수의 따라 입력층에 개수도 비례한다.
    • 은닉층은 입력층에 변환된 값이 오는데 입력층이 여러 개이면 전체를 '평균'한다. 121 \over 2 (h1+h2)(h_1 + h_2)
    • 출력층 또한 각각 단어에 대응하며 각 뉴런들은 단어의 '점수'를 의미한다. -> 소프트맥스로 '확률'로 변환
    • 이러한 가중치가 쌓일수록(학습할수록) 맥락에서 출현하는 단어를 잘 추측하는 방향으로 분산 표현들이 갱신될 것이다.
    • 은닉층의 뉴런수는 입력층의 뉴런수보다 적게해야 된다. -> 밀집벡터를 얻기 위해, 하지만 이 과정에서 사람이 이해할 수 없는 코드로 인코딩 된다. 구현(p.125)
  • 이어서 전체적인 CBOW의 구조를 설명한다.

    • 위 과정에서 만든 출력층 값을 소프트맥스 층에서 확률로 만든다. -> 이 확률을 정답 레이블로부터 교차 엔트로피 오차(CEE)를 구한 후 그 값을 손실로 사용해 학습을 진행한다.
  • 입력층 가중치(WinW_{in})와 출력층 가중치(WoutW_{out}) 중 입력층 가중치만 사용하는 것이 대중적인 선택이라고 한다. (p.130)

학습 데이터 준비 (p.131)

word2vec 에서는 신경망의 입력은 '맥락'이고, 정답이 되는 데이터는 '타깃'이니 이 둘을 우선적으로 준비해야겠다.

데이터 준비 작동 과정

  • 말뭉치 텍스트를 단어 ID로 전처리한다. -> preprocess() 사용
  • 맥락과 타깃을 만든다.
  • 맥락과 타깃을 각각 넘파이 다차원 배열로 반환
  • 원-핫 벡터로 변환

주의해야 할 점

  • 맥락은 보통 복수이니 함수 구현 때 어미에 's'를 붙여주자.
  • 맥락 입력은 원-핫으로 변환 될 때 형상이 변한다. -> 이 예에서는 하나 늘어난다.

CBOW 모델 구현 (p.135)

모델 구조는 위에 구현한 CBOW + 소프트맥스와 손실함수 계층을 합친 층을 더한 구조이다.
여기에 순전파와 역전파까지 구현한다. 이 예에서 매개변수 갱신 최적화 방법은 Adam을 사용한다.

word2vec 보충 (p.141)

CBOW의 확률 관점

  • CEE = L=ktklogykL = - \displaystyle\sum_k t_k \log y_k
    yky_k = k번째에 해당하는 사건이 일어날 확률
    tkt_k = 정답 레이블, 원-핫 벡터로 표현

위 식을 참고로 다음 식 유도 가능 :

  • L=logP(wtwt1,wt+1)L = -\log P(w_t | w_{t-1}, w_{t+1})
    음의 로그 가능도(negative log likelihood) : 로그를 취한 뒤 마이너스 붙이기

위 식을 말뭉치 전체로 확장하면 :

  • L=L = -1T1\over Tt=1TlogP(wtwt1,wt+1)\displaystyle\sum^T_{t=1}\log P(w_t | w_{t-1}, w_{t+1})

CBOW 모델의 학습이 수행하는 일은 이 손실 함수 LL의 값을 가능한 작게 하는 것이겠다.

skip-gram의 확률 관점
word2vec에서 제안한 모델은 2개이고 skip-gram이 그 두번째이다.

  • skip-gram은 CBOW의 맥락과 타깃을 역전시킨 것이다.
  • 즉, 타깃으로부터 주변 맥락을 추론하는 모델이다.
  • 그러니 입력층 벡터는 1개, 출력층은 맥락의 수와 선형적으로 비례한다.
  • 출력층에서 개별적으로 손실을 구하고, 개별 손실들을 모두 더한 값을 최종 손실로 한다.

skip-gram의 확률 모델 표기

  • P(wt1,wt+1wt)P( w_{t-1}, w_{t+1} | w_t)
    wtw_t이 일어난 후 wt1w_{t-1}wt+1w_{t+1}이 동시에 일어날 확률

skip-gram 모델에서는 맥락의 단어들 사이에 관령성이 없다고 가정하고(조건부 독립) 분해 :

  • = P(wt1,wt+1wt)P( w_{t-1}, w_{t+1} | w_t) = P(wt1wt)P(w_{t-1} | w_t)P(wt+1wt)P(w_{t+1} | w_t)

CEE 적용해서 손실함수 유도 :

  • LL = logP(wt1,wt+1wt)-\log P( w_{t-1}, w_{t+1} | w_t)
    = logP(wt1wt)-\log P(w_{t-1} | w_t)P(wt+1wt)P(w_{t+1} | w_t)
    = (logP(wt1wt)+logP(wt+1wt))-(\log P(w_{t-1} | w_t) + \log P(w_{t+1} | w_t))
    로그의 성질 사용

말뭉치 전체에 적용 :

  • LL = -1T1\over Tt=1T(logP(wt1wt)+logP(wt+1wt))\displaystyle\sum^T_{t=1}(\log P(w_{t-1} | w_t) + \log P(w_{t+1} | w_t))

참고
동시 확률 : P(A,B)P(A, B)
사후 확률 : P(AB)P(A | B)
ex) P(wtwt1,wt+1)P(w_t | w_{t-1}, w_{t+1}) = wt1w_{t-1}wt+1w_{t+1}이 일어난 후 wtw_t이 일어날 확률

두 모델의 차이점

  • skip-gram은 맥락의 수만큼 추측하기 때문에 그 손실 함수는 각 맥락에서 구한 손실의 총합이어야 한다.
  • CBOW는 타킷 하나의 손실을 구한다.
  • skip-gram 모델의 결과가 단어 분산 표현의 정밀도 면에서 앞서는 경우가 많다. -> 특히 말뭉치가 커질수록

통계 기반 vs 추론 기반 (p.146)

확실히 초깃값을 수정하거나, 학습 효율, 분산 표현의 성격이나 정밀도 면에서 우세한 면이 있으나 추론 기반이 통계 기반보다 정확하다고 할 수는 없다. -> 정량 평가 겨로가 의외로 추론 기반과 통계 기반기법의 우열을 가릴 수 없었다고 한다.

word2vec 이후 추론 기반 과 통계 기반을 융합한 GloVe 기법이 있다고 한다.

요약

간단한 word2vec 모델을 구현해보았다. 제대로 된 말뭉치도 아니고 모델은 더더욱 아니지만 뭔가 하나씩 배우고 있다는 느낌은 확실히 들어 좋다.

profile
Learning bunch, mostly computer and language

0개의 댓글