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

jLica·2023년 7월 7일
0

3장 - word2vec

이번 장에서는 통계 기반 기법보다 강력한 '추론 기반 기법'을 살펴본다.

3.1 - 추론 기반 기법과 신경망

  • 통계 기반 기법
  • 추론 기반 기법

두 기법은 모두 단어를 벡터로 표현하는 방법이다. 서로 방식은 다르지만, 그 배경에는 모두 분포 가설이 있다.

3.1.1 - 통계 기반 기법의 문제점

통계 기반 기법의 문제는 다음과 같다.

  • SVD를 n×nn \times n 행렬에 적용하는 비용은 O(n3)O(n^3)이다. 굉장히 오래 걸린다.
  • 데이터를 한꺼번에 처리해서 병렬 처리가 어렵다.

반면, 추론 기반 기법은 미니배치 학습이 가능하다. 데이터를 나눠 학습하기 때문에 병렬 계산이 가능하다는 점은 매력적이다.

3.1.2 - 추론 기반 기법 개요

추론 문제를 풀고 학습하는 것이 중점이다. 즉, 단어의 출현 패턴을 학습하는 것이다. '모델 관점'에서 보면 이 문제는 다음과 같이 보인다.

3.1.3 - 신경망에서의 단어 처리

신경망은 단어를 있는 그대로 처리할 수 없으니 '고정 길이의 벡터'로 변환해야 한다. 대표적으로는 원핫onehot^{one-hot} 표현 (또는 원핫 벡터)를 이용한다.

원핫 표현이란 벡터의 원소 중 하나만 1이고 나머지는 모두 0인 벡터를 말한다. 앞에 나왔던 "You say goodbye and I say hello."를 예시로 들어 보겠다.

원핫 벡터의 특징은 다음과 같다.

  • 어휘 수를 길이로 가진다. 즉, 벡터의 길이가 고정된다.
  • 인덱스와 단어 ID가 같은 원소를 1로, 나머지를 모두 0으로 설정한다.

단어를 벡터로 나타낼 수 있고, 신경망을 구성하는 '계층'들은 벡터를 처리할 수 있다. 다시 말해, 단어를 신경망으로 처리할 수 있다. 예를 들면 다음과 같다.

여기서는 뉴런 사이의 결합을 화살표로 그렸는데, 이후로는 가중치를 명확하게 보여주기 위해 아래와 같은 그림이 되겠다. 참고로 이번 장에서 사용하는 완전연결계층에서는 편향을 생략했다.

편향을 생략한 완전연결계층은 '행렬곱' 계산에 해당한다.

그런데 단어를 원핫 벡터로 나타냈으면 가중치와의 행렬곱은 간단한 얘기가 된다.

원핫 벡터는 원소 중 하나만 1이기 때문에, 가중치 행렬에서 행벡터 하나를 '뽑아낸' 것과 같다. 행렬곱을 할 필요 없이 특정 행을 추출하기만 하면 된다.

3.2 - 단순한 word2vec

word2vec에서 제안하는 모델은 2가지가 있다.

  • CBOW 모델
  • skip-gram 모델

이번 절에서 사용할 신경망은 CBOWcontinuous bagofwords^{continuous \space bag-of-words} 모델이다.

CBOW 모델은 맥락으로부터 타깃target^{target}을 추측하는 용도의 신경망이다. 타깃은 중앙 단어이고, 맥락은 주변 단어를 나타낸다.

나중에 나올 skip-gram은 CBOW의 반대격이라 생각하면 된다. 중심 단어로 맥락을 추측하는 모델이다.

3.2.1 - CBOW 모델의 추론 처리

CBOW 모델의 입력은 맥락이다. 맥락은 "you"와 "goodbye" 같은 단어들의 목록이다. 가장 먼저 이 맥락을 원핫 표현으로 변환하여 CBOW 모델이 처리할 수 있도록 준비한다. 이상을 기초로 CBOW 모델의 신경망을 다음과 같이 그릴 수 있다.

두 입력층에서 은닉층으로의 변환은 똑같은 완전연결계층(가중치는 Win\bold W_{in})이 처리한다. 그리고 은닉층에서 출력층 뉴런으로의 변환은 다른 완전연결계층(가중치는 Wout\bold W_{out})이 처리한다.

이 그림에서 입력층이 2개인 이유는 맥락으로 고려할 단어를 2개로 정했기 때문이다. 맥락에 포함시킬 단어가 NN개라면, 입력층도 NN개가 된다.

이제 은닉층에 주목해 보자. 은닉층의 뉴런은 입력층의 완전연결계층에 의해 변환된 값이 되는데, 입력층이 여러 개이면 전체의 평균을 얻으면 된다.

마지막으로 출력층 뉴런은 각 단어의 '점수'를 뜻하며, 값이 높을수록 대응 단어의 출현 확률도 높아진다. 점수는 소프트맥스 함수를 적용해서 '확률'을 얻을 수 있다.

위의 예시에서 입력층과 은닉층 사이의 완전연결계층의 가중치 Win\bold W_{in}7×37 \times 3 행렬이고, 이 가중치가 바로 단어의 분산 표현의 정체이다. 그림으로 표현하면 다음과 같다.

가중치 Win\bold W_{in}의 각 행에는 해당 단어의 분산 표현이 담겨 있다고 볼 수 있다. 놀랍게도 이렇게 해서 얻은 벡터에는 '단어의 의미'가 녹아들어 있다.

  • 은닉층의 뉴런 수를 입력층의 뉴런 수보다 적게 하는 게 포인트이다. 이렇게 해야 은닉층에는 단어 예측에 필요한 정보를 '간결하게' 담게 되고, 결과적으로 밀집벡터 표현을 얻을 수 있다.
  • 이때 은닉층의 정보는 인간이 이해할 수 없는 정보로 쓰여 있다. 이게 '인코딩'에 해당한다. 한편, 은닉층의 정보로부터 원하는 결과를 얻는 작업을 '디코딩'이라고 한다.

지금까지는 CBOW 모델을 뉴런 관점에서 봤는데, 이번에는 계층 관점에서 살펴보자.

가장 앞단에는 2개의 MatMul(행렬곱) 계층이 있고, 이어서 '평균'을 계산한다. 마지막으로 은닉층 뉴런에 또 다른 MatMul 계층이 적용되어 점수가 출력된다. 이 예시에서는 완전연결계층에서 편향을 생략했으므로 MatMul 계층의 순전파와 같아진다.

3.2.2 CBOW 모델의 학습

출력층에서 나온 점수에 소프트맥스 함수를 적용하면 '확률'을 얻을 수 있는데, 이 확률은 맥락이 주어졌을 때 어떤 단어가 출현할지에 대한 것이다.

다음의 예에서 맥락은 "you"와 "goodbye"이고, 정답 레이블은 "say"이다. 가중치가 적절히 설정된 신경망이라면 정답에 해당하는 뉴런의 값이 클 것이라 기대할 수 있다.

CBOW 모델의 학습에서는 올바른 예측이 가능하도록 가중치를 조정하는 일을 한다. 결과적으로 가중치 Win\bold W_{in}에(정확하게는 Win\bold W_{in}Wout\bold W_{out} 모두에) 단어의 출현 패턴을 파악한 벡터가 학습된다.

CBOW 모델은 단어 출현 패턴을 학습에 사용한 corpus로부터 배운다. 따라서 corpus에 따라 얻게 되는 단어의 분산 표현이 달라진다.

CBOW 모델은 다중 클래스 분류를 수행하는 신경망이다. 따라서 이 신경망을 학습할 때는 소프트맥스와 교차 엔트로피 오차만 이용하면 된다.

소프트맥스 함수를 이용해 점수를 확률로 변환하고, 그 확률과 정답 레이블로부터 교차 엔트로피 오차를 구한 후, 그 값을 손실로 사용해 학습을 진행한다. 그림으로 나타내면 다음과 같다.

CBOW 모델에 Softmax with Loss 계층(Softmax 계층과 Cross Entropy Error 계층)을 추가했을 뿐이다. 이상이 CBOW 모델의 손실을 구하는 계산의 흐름이자, 이 신경망의 순방향 전파이다.

3.2.3 - word2vec의 가중치와 분산 표현

word2vec에서 사용되는 신경망에는 입력 측 가중치(Win\bold W_{in})와 출력 측 가중치(Wout\bold W_{out})가 있다.

위에서 말했듯 Win\bold W_{in}의 각 행이 각 단어의 분산 표현에 해당한다.

그런데 Wout\bold W_{out}에도 단어의 의미가 인코딩된 벡터가 저장되고 있다고 생각할 수 있다. 다만, Wout\bold W_{out}은 다음과 같이 각 단어의 분산 표현이 열 방향으로 저장된다.

이 중 단어의 분산 표현으로는 어느 쪽을 선택하는 게 좋을까? 아니면 둘 다 사용하는 게 좋을까?

word2vec(특히 skip-gram 모델)에서는 입력 측의 가중치만 이용하는 것이 가장 대중적인 선택이다.

3.5 - word2vec 보충

CBOW 모델을 확률 관점에서 다시 살펴보자.

3.5.1 - CBOW 모델과 확률

CBOW 모델이 하는 일은 맥락을 입력으로 타깃 단어의 출현 확률을 출력하는 것이다.

여기에서는 말뭉치를 w1, w2, ,wTw_1, \space w_2, \space \cdots, w_T처럼 단어 시퀀스로 표기하고, 윈도우 크기가 1인 맥락을 고려한다.

여기서 타깃이 wTw_T가 될 확률을 수식으로 표기하면 다음과 같다.

P(wT  wt1wt+1)P(w_T \space | \space w_{t-1} \cap w_{t+1})

wt1w_{t-1}wt+1w_{t+1}이 동시에 일어났을 때 wTw_T가 일어날 확률이다. 즉, CBOW는 위 식을 모델링하고 있다.

위 식과 교차 엔트로피 오차 식을 이용하면 손실 함수도 간결하게 표현할 수 있다.

교차 엔트로피 오차의 식은 L=ktklogykL=- \sum_{k}^{}t_klogy_k이고, 여기서 yky_kkk번째에 해당하는 사건이 일어날 확률을 뜻한다. 그리고 tkt_k는 정답 레이블이다.

yky_k에는 위의 확률 식을 그대로 넣으면 되고, tkt_k는 원핫 레이블에서 TT 인덱스의 원소만 1이고 나머지는 0이다.

위를 바탕으로 식을 정리하면 다음과 같다.

L=logP(wt  wt1wt+1)L=-logP(w_t \space | \space w_{t-1} \cap w_{t+1})

결국 확률에 loglog를 취한 다음 마이너스를 붙인 형태가 되었다. 이를 음의 로그 가능도negative log likelihood^{negative\space log \space likelihood}라 한다. 추가로, 위 손실함수는 샘플 데이터 하나에 대한 것이기 때문에 전체로 확장하면 다음과 같다.

L=1Tt=1TlogP(wt  wt1wt+1)L=-\frac {1}{T} \sum_{t=1}^{T}logP(w_t \space | \space w_{t-1} \cap w_{t+1})

위 식은 손실함수이므로, CBOW 모델의 학습이 이 함수의 값을 최대한 작게 만들어야 한다.

3.5.2 - skip-gram 모델

위에서 언급했듯 word2vec은 2가지의 모델을 제안한다. CBOW의 반대격인 skip-gram을 살펴볼 차례다.

skip-gram은 CBOW와 반대로 타깃으로부터 맥락을 추측한다. skip-gram의 신경망은 다음과 같이 생겼다.

CBOW와는 반대로 입력층이 하나, 출력층이 맥락의 수만큼 존재한다.

따라서 출력층마다 Softmax with Loss 계층 등을 이용해 개별적으로 손실을 구하고, 이 손실들의 평균을 최종 손실로 한다.

skip-gram 모델을 확률 표기로 나타내 보면 다음과 같다.

P(wt1wt+1  wt)P(w_{t-1} \cap w_{t+1} \space | \space w_t)

wtw_t가 주어졌을 때 wt1w_{t-1}wt+1w_{t+1}이 동시에 일어날 확률을 뜻한다. skip-gram 모델은 여기서 맥락 단어들 사이에 관련이 없다고(조건부 독립) 가정하고 다음과 같이 분해한다.

P(wt1wt+1  wt)=P(wt1  wt)P(wt+1  wt)P(w_{t-1} \cap w_{t+1} \space | \space w_t) = P(w_{t-1} \space | \space w_t)P(w_{t+1} \space | \space w_t)

이어서 위 식을 교차 엔트로피 오차에 적용하여 손실 함수를 유도할 수 있다.

 L=logP(wt1wt+1  wt) =logP(wt1  wt)P(wt+1  wt) =(logP(wt1  wt)+logP(wt+1  wt))\qquad \qquad \qquad \qquad \qquad \quad \space L=-logP(w_{t-1} \cap w_{t+1} \space | \space w_t)\\ \qquad \qquad \qquad \qquad \qquad \quad \space =-logP(w_{t-1} \space | \space w_t)P(w_{t+1} \space | \space w_t)\\ \qquad \qquad \qquad \qquad \qquad \quad \space =-(logP(w_{t-1} \space | \space w_t)+logP(w_{t+1} \space | \space w_t))

이를 corpus 전체로 확장하면 다음과 같다.

L=1Tt=1T(logP(wt1  wt)+logP(wt+1  wt))L=-\frac{1}{T} \sum_{t=1}^{T}(logP(w_{t-1} \space | \space w_t)+logP(w_{t+1} \space | \space w_t))

skip-gram 모델은 위에서 말했듯 출력층의 손실의 평균을 구해야 한다.

CBOW와 skip-gram 중에서는 skip-gram 모델이 단어 분산 표현의 정밀도 면에서 결과가 좋은 경우가 많다. 특히 corpus가 커질수록 저빈도 단어나 유추 문제의 성능 면에서 더 뛰어난 경향이 있다. 다만, 학습 속도는 CBOW가 더 빠르다.

profile
초보입니다.

0개의 댓글