딥러닝
밑바닥부터 시작하는 딥러닝 - word2vec 속도 개선(1)
2021.10.23
지금까지 word2vec의 구조를 배우고 CBOW 모델을 구현해봤다. CBOW 모델은 단순한 2층 신경망이라 간단하게 구현할 수 있었다. 그러나 말뭉치에 포함된 어휘 수가 많아지면 계산량도 커진다는 문제점이 있었다. 그래서 이번 글에서는 속도 개선에 대해 배울 것이다. 앞에서 배운 word2vec에 두 가지 개선을 추가할 것이다. Embedding 계층 앞에서는 단어를 원핫 표현으로 바꿨다. 그리고 그것을 MatMul 계층에 입력하고, MatMul 계층에서 가중치 행렬을 곱해 사용했다. 그럼 어휘 수가 100만 개인 경우에는 어떨까? 은닉층 뉴런이 100개라면, MatMul 계층의 행렬 곱은 아래 그림처럼 된다. 만약 100만 개의 어휘를 담은 말뭉치가 있다면, 단어의 원핫 표현도 100만 차원이 된다...
딥러닝
밑바닥부터 시작하는 딥러닝 - word2vec (2)
2021.10.20
skip-gram 모델 word2vec은 2개의 모델을 제안하고 있다. 하나는 CBOW 모델이고, 다른 하나는 skip-gram 모델이다. skip-gram은 CBOW에서 다루는 맥락과 타깃을 역전시킨 모델이다. 위 그럼처럼 CBOW 모델은 맥락이 여러 개 있고, 그 여러 맥락으로부터 중앙의 단어(타깃)를 추측한다. 한편, skip-gram 모델은 중앙의 단어(타깃)로부터 주변의 여러 단어(맥락)를 추측한다. skip-gram 모델의 입력층은 하나이다. 한편 출력층은 맥락의 수만큼 존재한다. 따라서 각 출력층에서는 개별적으로 손실을 구하고, 이 개별 손실들을 모두 더한 값을 최종 손실로 한다. skip-gram 모델을 확률로 표기한 것이다. 'W(t)가 주어졌을 때 W(t-1)과 W(t+1)이 동시에 일..
딥러닝
밑바닥부터 시작하는 딥러닝 - word2vec (1)
2021.10.19
이번 글에서는 추론 기반 기법과 신경망에 대해 알아볼 것이다. 지난 글까지 통계 기반 기법에 대해 배웠다. 하지만 통계 기반 기법에는 문제점이 존재한다. 대규모 말뭉치를 다룰 때 문제가 발생한다. 영어의 어휘 수는 100만이 넘는다고 하는데, 어휘가 100만 개라면, 통계 기반 기법에서는 100만 X 100만이라는 엄청나게 큰 행렬을 만들게 된다. 이렇게 큰 행렬에 SVD를 적용하는 일은 현실적이지 않다. 추론 기반 기법 개요 추론 기반 기법에서는 '추론'이 주된 작업이다. 추론이란 아래 그림처럼 주변 단어(맥락)가 주어졌을 때 "?"에 무슨 단어가 들어가는지를 추측하는 작업이다. 추론 문제를 풀고 학습하는 것이 '추론 기반 기법'이 다루는 문제이다. 이러한 추론 문제를 반복해서 풀면서 단어의 출현 패턴..
딥러닝
밑바닥부터 시작하는 딥러닝 - 신경망(3)
2021.10.14
신경망의 학습 손실 함수 신경망 학습에는 학습이 얼마나 잘 되고 있는지를 알기 위한 '척도'가 필요하다. 일반적으로 학습 단계의 특정 시점에서 신경망의 성능을 나타내는 척도로 '손실'을 사용한다. 손실은 학습 데이터(학습 시 주어진 정답 데이터)와 신경망이 예측한 결과를 비교하여 예측이 얼마나 나쁜가를 산출한 단일 값(스칼라)이다. 신경망의 손실은 손실 함수를 사용해 구한다. 다중 클래스 분류 신경망에서는 손실 함수로 흔히 교차 엔트로피 오차를 이용한다. 교차 엔트로피 오차는 신경망이 출력하는 각 클래스의 '확률'과 '정답 레이블'을 이용해 구할 수 있다. 앞에서 구현한 신경망에 Softmax 계층과 Cross Entropy Error 계층을 새로 추가한다. x는 입력 데이터, t는 정답 레이블, L은 ..