밑시딥2
-
[밑시딥2] 어텐션A.I/Study 2023. 7. 30. 03:35
어텐션의 구조 seq2seq의 문제점 Encoder의 출력은 '고정 길이의 벡터'인데, 이는 어떤 길이의 시퀀스가 들어와도 항상 같은 길이로 변환함을 의미한다. 아무리 긴 문장이여도 항상 같은 길이의 벡터에 집어 넣다보니 필요한 정보를 다 담지 못하는 문제가 발생한다. Encoder 개선 이번 단계에서 개선할 핵심 사항은 출력의 길이를 입력 문장의 길이에 따라 바꿔주는 것이다. 구체적으로는 각 시각별 LSTM 계층의 모든 은닉 상태 벡터를 모두 이용하는 것이다. 이렇게 쌓은 은닉 상태 벡터를 모두 이용하면 입력된 단어와 같은 수의 벡터를 얻을 수 있다. 또한 그 각각의 은닉 상태 벡터는 각각 그 시각 직전에 입력된 단어에 대한 정보가 가장 많이 포함되어있다는 사실도 기억해야한다. Decoder 개선 En..
-
[밑시딥2] RNN을 사용한 문장 생성A.I/Study 2023. 7. 25. 18:40
언어 모델을 사용한 문장 생성 RNN을 사용한 문장 생성의 순서 언어 모델은 지금까지 주어진 단어들에서 다음에 출현하는 단어의 확률 분포를 출력한다. 이를 기초로 새로운 단어를 생성하는 방법은 아래의 두 방법을 생각할 수 있다. 확률이 가장 높은 단어를 선택하는 방법: 결정적인 방법, 결과가 항상 일정 확률적으로 선택하는 방법: 단어 확률에 맞게 선택하며, 확률에 따라 선택 가능성이 달라지지만 항상 같은 결과가 나오지 않는다. 여기서 결정적이란 알고리즘의 결과가 항상 일정함을 의미한다. 언어모델을 통해 확률 분포를 생성하면, 이를 기반으로 단어를 선택하고, 이를 반복한다. 이 작업을 원하는 만큼 수행하거나 와 같은 종결 기호가 나타날 때까지 반복하면 된다. 여기서 주목할 점은 이를 통해 생성한 모델은 훈..
-
[밑시딥2] 게이트가 추가된 RNNA.I/Study 2023. 7. 14. 04:12
RNN의 문제점 기본적인 RNN은 장기 의존 관계를 학습하기 어렵다. BPTT에서 기울기 소실 혹은 폭발이 일어나기 때문이다. RNN 복습 RNN 레이어는 순환 경로를 가지고 있고, 이를 펼치면 옆으로 길게 뻗은 신경망이 된다. 시계열 데이터인 x_i를 입력하면 h_t를 출력하며, 이 h_t는 은닉 상태라고 한다. 이 은닉상태를 통해 과거 정보를 저장한다. 기울기 소실 또는 기울기 폭발 문장이 길어지먄 길어질수록 이후에 앞의 단어에 대한 기울기가 점점 옅어진다. 이렇게 된다면, 가중치 파라미터가 전혀 갱신되지 않게 된다. 이와 반대로 커지는 경우도 발생하는데, 이를 기울기 폭발이라고 한다. 기울기 소실과 기울기 폭발의 원인 tanh 미분시 x와 멀어질수록 0에 가까워진다. 역전파에서 tanh노드를 지날 ..
-
[밑시딥2] 순환 신경망 (RNN)A.I/Study 2023. 7. 13. 02:47
확률과 언어 모델 word2vec을 확률 관점으로 CBOW 모델은 맥락 w_t-1와 w_t+1로 부터 타깃 w_t를 추측하는 일을 수행한다. w_t-1과 w_t+1이 주어졌을 때, w_t가 될 확률은 아래와 같다. $$ P(w_t|w_{t-1}, w_{t+1}) $$ 이것은 윈도우 크기가 1일 때의 CBOW 모델이다. 맥락을 좌우 대칭이 아니라 왼쪽 윈도우로만 한정시킬 경우 $$ P(w_t|w_{t-2}, w_{t-1}) $$ CBOW 모델의 손실함수 (교차 엔트로피 오차에 의해 유도된 결과) $$ L = -\log P(w_t|w_{t-2}, w_{t-1}) $$ 이 손실함수의 값을 최소화하는 가중치 매개변수를 찾는 것이 학습의 목적 CBOW를 맥락으로부터 타깃을 정확하게 추측하기위해 학습을 진행하면, ..
-
[밑시딥2] word2vec 속도 개선A.I/Study 2023. 7. 2. 02:49
word2vec 개선 기존 CBOW 모델에서의 계산 병목 발생 지점 입력층의 원핫표현과 가중치 행렬 W_in의 곱 계산 -> Embedding 레이어로 해결 은닉층과 가중치 행렬 W_out의 곱 및 Softmax 계층의 계산 -> 네거티브 샘플링으로 해결 Embedding 계층 가중치 매개변수로부터 '단어 ID에 해당하는 행(벡터)'을 추출하는 계층 class Embedding: def __init__(self, W): self.params = [W] self.grads = [np.zeros_like(W)] self.idx = None def forward(self, idx): W, = params self.idx = idx out = W[idx] return out def backward(self, d..
-
[밑시딥2] word2vecA.I/Study 2023. 6. 26. 03:17
추론 기반 기법과 신경망 지금까지 연구되어온 단어를 벡터로 표현하는 방법 중 가장 성공적인 기법은 '통계 기반 기법'과 '추론 기반 기법'이라고 볼 수 있다. 통계 기반 기법의 문제점 이전에 언급된 통계 기반 기법은 주변 단어의 빈도를 기반으로 단어를 표현했다. 구체적인 방법으로는 동시발생 행렬을 만들고 그 행렬에 SVD를 적용하여 밀집벡터로 표현했다. 하지만, 이것은 대규모 말뭉치를 다룰때 문제가 발생한다. SVD는 n*n 행렬일 때, O(n^3)의 시간복잡도를 가지기 때문에 HPC 환경이라고 하더라도 비효율 적이다. 이렇게 통계기반 학습은 학습 데이터를 통으로 한번에 처리하지만, 추론 기반 기법은 미니배치 학습을 이용하여, 학습 데이터의 일부를 사용하여 순차적으로 학습한다. 데이터를 잘게 나누기 때문..
-
[밑시딥2] 자연어와 단어의 분산 표현A.I/Study 2023. 6. 17. 02:14
자연어 처리 개요 자연어 (Natural Language): 한국어나 영어와 같이 사람이 일반적으로 사용하는 말 자연어 처리(NLP; Natural Language Processing): 컴퓨터가 우리의 말을 이해하게 만드는데 목적을 둔 연구분야 자연어 특성 같은 의미의 문장이 여러형태로 표현 가능하다 문장의 뜻이 애매할 수 있다 그 의미나 형태가 유연하게 바뀐다. 세월에 따라 새로운 말이 생기거나 사라기지도 한다. 단어의 의미 말은 문자로 구성되고, 말의 의미는 단어로 구성된다. 즉, 단어는 의미의 최소 단위라고 볼 수 있다. 단어의 의미를 표현하는 방법 시소러스(thesaurus) 활용: 유의어 사전 기반 통계 기반 기법: 통계 정보로부터 단어를 표현 추론 기반 기법: 신경망을 활용 시소러스 단어의 ..