인공지능/자연어 처리

자연어 처리 중간고사 애매한 것 정리하기

이게될까 2024. 4. 17. 02:59
728x90
728x90

TF-IDF

TF-IDF 에서 로그의 N/D는 (전체 문서 개수)/(나온 문서 개수)이다.

Fast Text임베딩은 모든 임베딩이 다있을 때 새로운 단어에 대한 임베딩은 저렇게 n-gram으로 나눠서 만들 수 있다.

흠 모델 관련 문제가 나올지는 모르겠는데...

ELMo
BERT

단어 임베딩은 많은 모델(MLP, CNN, RNN, 로지스틱 회귀)에서 원 핫 인코딩으로 대체할 수 있습니다.
• 하위 단어 임베딩을 사용하면 훈련 데이터에 없는 단어에 대한 임베딩을 만들 수 있습니다. 훈련하는 데 훨씬 적은 데이터가 필요합니다.
• 주의는 일련의 표현을 형성할 때 어떤 부분에 더 주의를 기울여야 하는지 배울 수 있는 메커니즘을 제공합니다.
• BiLSTM은 단어 임베딩을 문맥에서의 사용에 민감하도록 변환할 수 있습니다.
• 정적 단어 임베딩(word2vec, Glove)은 단어 유형의 표현을 제공하고, 문맥화된 단어 표현(ELmo, BERT)은 토큰을 문맥에 맞게 표현합니다

backPropagation은 손으로 한번 해보면 될듯

Xavier:초기화는 Sigmoid 함수를 사용하는 것이 좋습니다,
He: Initialization(초기화)은 활성화 기능으로 ReLU 기능을 사용하는 것이 좋습니다

아직 암기가 안된 것들...

그런데 Self attention진행할 때 query랑 key 곱한 다음 임베딩 차원만큼 왜 나누는거야?
어차피 softmax하면 똑같지 않아?

Self-attention 메커니즘에서 query와 key를 곱한 후 임베딩 차원(d_k)으로 나누는 이유는 소프트맥스 함수의 안정성과 효율성을 높이기 위해서입니다. 이 과정을 scaling이라고 부르며, 특히 트랜스포머 아키텍처에서 중요한 역할을 합니다.

이유와 배경

  1. 점수의 크기 조절(Scale Down): Query와 Key의 내적(dot product)은 두 벡터의 크기와 차원 수에 비례합니다. 따라서 내적의 결과는 벡터의 차원 수(d_k)가 커짐에 따라 그 크기가 증가할 수 있습니다. 이렇게 크기가 큰 값들을 소프트맥스 함수에 직접 입력으로 사용하면, 소프트맥스 함수의 출력에서 매우 작은 변화에도 불구하고 한쪽으로 치우치는 현상이 발생할 수 있습니다. 이는 그라디언트가 매우 작아져 학습이 제대로 이루어지지 않는 그라디언트 소실 문제를 초래할 수 있습니다.
  2. 소프트맥스의 안정성 향상: 내적 값이 크면 소프트맥스 함수의 지수(exponential) 계산에서 매우 큰 수가 되어버립니다. 이는 컴퓨터의 수치 계산에서 오버플로우를 일으킬 수 있습니다. 임베딩 차원의 제곱근으로 나눔으로써 이 값을 축소시키면 소프트맥스 함수의 입력 범위를 안정적으로 유지할 수 있으며, 더 부드러운 확률 분포를 얻을 수 있습니다.
  3. 더 나은 학습 동작: Scaling은 각 요소의 중요도를 평등하게 만드는 데 도움을 줍니다. 차원이 높아질수록 내적 결과의 분산이 증가하는데, 이를 조정함으로써 모델이 각 특성의 중요도를 더 잘 학습할 수 있도록 합니다.

예제

다음은 self-attention 계산 과정에서 scaling이 적용된 부분의 예시입니다:

import numpy as np

def scaled_dot_product_attention(query, key, value):
    d_k = query.shape[-1]
    scores = np.matmul(query, key.transpose()) / np.sqrt(d_k)  # scaling
    probabilities = softmax(scores)
    return np.matmul(probabilities, value)

# softmax 함수 구현
def softmax(x):
    exp_x = np.exp(x - np.max(x))  # 오버플로우 방지
    return exp_x / exp_x.sum(axis=-1, keepdims=True)

이 예시에서 query와 key의 내적 후에 결과를 sqrt(d_k)로 나누어 scaling을 수행하고 있습니다. 이렇게 함으로써 softmax 입력값의 범위를 조절하고, 학습과정에서의 안정성을 높일 수 있습니다.

728x90