본문 바로가기
machine learning

negative sampling

by 단창 2019. 8. 12.

Word2Vec 모델에서 negative sampling 이란? 

 

단어뭉치(corpus)의 개수가 100000 개 이고 hidden layer크기가 3000이라 하면, W와 , W`의 크기는 100000x3000 이다. 

Input vector는 one-hot 벡터로 1숫자만 1이고 나머진 모두 0이다. 

(중심단어, 주변단어)의 pair로 학습이 이뤄지게 되는데, W의 크기가 100000x3000이나 되지만. input vector가 one hot vector이기 때문에 W중 1줄의 parameter만 선택된다. 

하지만 backpropagation과정중에 100000x3000(W`)의 parameter가 softmax함수를 취해야 되고, 계산량이 엄청나게 많아진다. 

따라서 계산의 효율성을 위해서 negative sampling 이라는 방법을 사용한다. 

 

negative sampling는 말그대로 parameter을 update시킬 negative sample을 뽑는것이다. 

그리고 전체 W,W`을 업데이트 하는것이 아니라, 중심단어와 negative sample 몇개에 해당하는 parameter을 업데이트하는것이다. 

 

무슨말이냐 하면, 

(김치,반찬) (김치,된장) (김치,식사) 의 조합을 업데이트 하기위해서, 김치와 상관없는 폴란드, 타이어, 돗돔 이러한 관계를 update 해도 안한것과 별반 차이가 없다는 것이다. 김치와 주변단어가 아닌 단어가 김치와 주변단어인 단어보다 훨씬 더 많다. (모두 업데이트 할 필요 없음)

따라서, 수많은 김치와 상관없는단어중 몇개의 단어만 추출하여 학습에 사용하여 해당 parameter을 업데이트 해준다. 

 

그러면 어떤기준으로 negative sample을 뽑느냐? 

전체 corpus중 문장에 사용되는 비중이 높은 단어를 우선적으로 가중치를 줘서 선별한다. 

 

wi 는 i번째 단어이고, f(wi)는 해당 단어의 빈도, (출현횟수/전체corpus수) 이다. 

P(wi)는 wi가 나타날 확률 

f(wi)에 3/4 제곱을 해주면 퍼포먼스가 더 좋아진다고 한다. 

반응형

'machine learning' 카테고리의 다른 글

keras dataset : imdb  (0) 2020.03.02
precision at K, MAP, recall at K  (0) 2019.10.12
Word2Vec 의 학습  (0) 2019.05.13
Early stopping in GAN  (0) 2018.12.05
bayesian 자료  (0) 2015.06.27