간소화한 구조로, 게이트가 2개(리셋/갱신)이며, 별도의 메모리 셀이 없다. 매개변수가 적고 학습이 빠르며, 성능은 LSTM과 비슷한 경우가 많다
다층 LSTM
여러 층을 쌓아 층별로 추상화한다. 다만 실제로는 너무 깊게 쌓기 어렵다
양방향 LSTM
정방향과 역방향 LSTM의 은닉 상태를 이어 붙인다. 각 위치에서 양쪽 문맥을 함께 쓰지만 자기회귀 생성에는 사용할 수 없다
3.8 장단점
장점
단순 RNN보다 장거리 문맥을 포착하는 능력이 있다.
FFNN처럼 유연하다. 분류, 시퀀스 레이블링, 생성 등 다양한 과제에 사용할 수 있다.
단점
순차 처리하므로 순전파 신경망보다 느리다(시간축으로 병렬화할 수 없음).
실제로는 매우 긴 의존성을 충분히 포착하지 못한다(긴 글을 생성할 때 특히 두드러짐).
실제로는 깊게 쌓기 어렵다(다층 LSTM의 효과가 제한적이고 학습이 불안정해지기 쉬움).
Transformer 등 더 발전한 구조가 등장하면서 예전만큼 널리 쓰이지 않는다.
4. Transformer
4.1 정의
RNN처럼 위치마다 순환 상태를 전달하지 않고 어텐션(attention)으로 위치 사이를 직접 연결한다.
전체 입력이 주어지면 같은 층의 각 위치 표현을 병렬로 계산할 수 있다. 자기회귀 언어 모델의 학습에서도 인과 마스크(causal mask)로 여러 위치의 손실을 동시에 계산할 수 있다.
병렬 계산이 각 위치의 독립성을 뜻하지는 않는다. 자기회귀 생성에서는 다음 토큰이 이미 생성한 문맥에 의존하므로 순차적으로 디코딩해야 한다.
이 구조는 먼 위치 사이의 정보 전달 경로를 줄이고 GPU의 행렬 연산에도 적합하다.
4.2 RNN에서 어텐션으로
입력 텍스트 → 출력 텍스트 형태의 문제에서는 원래 RNN이 순차적으로 입력과 생성 중인 출력을 처리했다.
어텐션은 처음에 RNN의 정보 병목을 해결하기 위해 도입되었다. RNN은 문장 전체를 고정 길이 벡터로 압축해야 하지만, 어텐션에서는 각 출력 노드가 모든 입력 노드와 직접 비교하여 가장 관련 있는 입력을 골라 출력을 정할 수 있다.
어텐션으로 모든 입력에 직접 접근할 수 있다면 순차 처리하는 RNN이 반드시 필요한 것은 아니다.
이렇게 Transformer가 등장했다. 인코더에서는 RNN 대신 자기 어텐션을 사용한다(논문 Attention Is All You Need, 2017).
“
그림 4-1 Transformer의 전체 구조. 왼쪽은 인코더, 오른쪽은 디코더이며 각각 N층을 쌓는다. 맨 아래는 입력/출력 임베딩과 위치 인코딩이다. 출처: Vaswani et al., Attention Is All You Need, NeurIPS 2017, Figure 1.
4.3 활용 분야
입력 텍스트 → 출력 텍스트 형태의 과제:
언어 모델: 다음 단어를 예측한다
대화 시스템: 사용자 입력에 적절한 답변을 생성한다
기계 번역: 한 언어를 다른 언어로 번역한다
모두 한 입력 텍스트로부터 다른 출력 텍스트를 만드는 과제이며, Transformer에 적합하다.
4.4 자기 어텐션: Query/Key/Value
직관적 설명:
“
대상 단어의 Query(쿼리)를 모든 단어의 Key(키)와 비교해 관련도를 구한다. 그 관련도에 따라 가중치를 부여하여 참조하는 대상은 해당 Value(값)이다.
예: 문장 I made her duck, 대상 단어 her
역할
내용
Query q
대상 단어 her의 쿼리 벡터
Key k / Value v
문맥 단어(I, made, duck)와 대상 단어 자신의 키/값
“
그림 4-2 자기 어텐션의 가중치: 대상 단어 her의 Query를 각 단어의 Key와 비교한 뒤, Value의 가중합으로 her의 새 표현을 얻는다.
절차
Q/K/V 생성: 이 절에서는 각 단어 임베딩 x_i를 행벡터로 쓰고, 세 투영 행렬 W_Q, W_K, W_V를 각각 곱한다.
관련도 계산: 대상 단어의 q와 모든 단어의 k를 내적(dot product)하여 관련도 점수를 구한다.
정규화: 점수에 softmax를 적용해 확률분포를 얻는다(가중치의 합은 1).
가중합: 이 분포에 따라 모든 v의 가중합을 구해 대상 단어의 출력 벡터z를 얻는다.
모든 입력 단어에 같은 과정을 반복한다. 각 z를 위치순으로 나열하면 하나의 어텐션 헤드 출력이 된다.
핵심: 대상 단어의 최종 표현은 자신을 포함한 문맥 단어의 Value 벡터를 가중합한 것이다. 가중치는 Query와 Key의 유사도로 정한다.
“
그림 4-3 왼쪽: Scaled Dot-Product Attention(MatMul → Scale → Mask → Softmax → MatMul). 오른쪽: Multi-Head Attention(여러 선형 투영을 병렬 계산하고 이어 붙인 뒤 선형 변환). 출처: Vaswani et al., 2017, Figure 2.
왜 \sqrt{d_k}로 나눌까?d_k는 Key 벡터의 차원이다. 내적의 분산은 차원에 따라 커진다. 고차원에서는 softmax 입력이 너무 커져 one-hot에 가까운 극단적인 분포와 매우 작은 기울기가 생기기 쉽다. 따라서 \sqrt{d_k}로 나누어 크기를 조정해 수치를 안정화한다(과도한 값과 기울기 소실 방지).
“
그림 4-4 단어별 Q/K/V 계산: 각 임베딩 x_i에 각각 W_Q, W_K, W_V를 곱한다. 이후 대상 단어의 q와 모든 k의 내적에 softmax를 적용해 가중치를 얻는다.
4.6 멀티헤드 어텐션
동기: 문장 안의 단어는 여러 방식으로 연결될 수 있다.
관계 유형
예
통사
주어와 동사의 일치(noun–verb agreement)
의미
동의어
담화
it이 가리키는 앞선 표현: the dog
멀티헤드 어텐션은 서로 다른 표현 부분공간에서 여러 관계에 병렬로 주의를 기울일 수 있게 한다. 이를 위해:
독립적으로 어텐션 계산을 h회 수행한다. 각 헤드는 자체 W_Q^{(i)}, W_K^{(i)}, W_V^{(i)}를 갖는다.
각 헤드의 출력 z^{(i)}를 이어 붙인다.
다시 출력 투영 행렬 W_O를 곱해 이어 붙인 결과를 모델 차원 d로 되돌리고 여러 헤드의 정보를 통합한다.
다층 Transformer는 이 모듈들을 반복한다. 원래 Transformer는 입력 임베딩에 위치 인코딩을 한 번 더하지만, 다른 위치 표현 방식은 적용 방법이 다를 수 있다.
4.7 Transformer 블록
원래 Transformer의 인코더 블록을 예로 들면, 자기 어텐션 외에도 다음 요소가 들어간다.
구성 요소
수
역할
피드포워드층
1×
각 위치에 같은 2층 MLP를 적용한다. 차원을 늘렸다 줄이며 비선형 변환을 더한다
잔차 연결(Residual connection)
2×
입력과 하위층의 출력을 더한다(x + f(x)). 정보와 기울기의 직접 전달 경로를 유지하여 깊은 네트워크를 학습하기 쉽게 한다
층 정규화(LayerNorm)
2×
각 위치의 은닉 특징을 정규화하고 크기 조정과 편향도 학습하여 학습을 안정화한다
“
여기서 사용하는 것은 Layer Normalization이다. 각 위치 자체의 특징 차원에 걸쳐 정규화하며, 배치의 다른 샘플 통계에 의존하지 않는다. 아래 그림은 원래 Transformer의 Post-LN 순서이며, 변형 모델에서는 Pre-LN을 쓰기도 한다.
“
그림 4-5 Transformer 블록 내부. 자기 어텐션과 피드포워드의 두 하위층에 각각 잔차 연결과 LayerNorm을 결합한다.
4.8 블록 쌓기
Transformer 블록을 늘리면 더 깊은 단어 표현을 학습한다.
GPT-3(175B)에는 96개의 Transformer 블록이 있다.
4.9 위치 정보
문제: 위치 정보를 넣지 않으면 자기 어텐션 자체는 어순을 구별하지 못한다. 입력의 순서를 바꾸면 출력도 같은 방식으로 바뀔 뿐, 어느 단어가 앞뒤에 있는지 알 수 없다. 따라서 추가 위치 표현이 있어야 dog bites man과 man bites dog을 구별할 수 있다.
학습 가능한 위치 임베딩
입력 임베딩 X = word embeddings + position embeddings(두 벡터를 더함).
위치 벡터를 무작위로 초기화하고 모델이 학습하게 한다.
위치 1에 하나, 위치 2에 하나처럼 정해진 최대 길이까지 임베딩을 둔다.
제약: 위치 조회 테이블에는 길이 제한이 있다. 학습하지 않은 위치에는 신뢰할 만한 표현이 없으므로 더 긴 시퀀스를 처리하려면 보통 별도의 확장 방법이 필요하다.
분자와 분모의 로그 밑을 맞춘다. 0<P(x,y)<1일 때 [-1,1] 범위로 정규화하여 단어 쌍 사이를 비교하기 쉽게 한다
PMI에도 SVD 적용 가능
PMI 행렬에 SVD를 적용하여 앞 k개 차원을 쓴다
차원 축소와 잡음 제거로 밀집된 저차원 단어 벡터를 얻는다
“
보충: 저빈도 단어 쌍의 PMI는 과도하게 높아지기 쉽다. 점수만으로 연관의 강도를 판단해서는 안 된다. 최소 동시 출현 횟수로 걸러 내거나 평활화하여 잡음을 줄일 수 있다. \log\frac{P(x,y)^k}{P(x)P(y)} 형태의 PMI^k 변형에서는 k>1일 때만 일반 PMI보다 동시 출현 확률이 낮은 단어 쌍을 더 강하게 억제한다.
6. 단어 벡터: Word2Vec
6.1 Word2Vec 개요
신경망 기반 분포 의미론: 단어의 의미가 문맥에 따라 결정된다는 분포 의미론을 신경망으로 구현한다.
핵심 아이디어: 문맥 단어로 대상 단어를 예측하거나 그 반대로 예측한다.
단어를 예측하는 학습 과제로 임베딩을 배운다. CBOW의 입력은 문맥이고 Skip-gram의 입력은 중심 단어다. 출력은 예측 대상 단어의 분포 또는 단어 쌍의 분류 결과이며, 단어 벡터는 학습으로 얻은 매개변수다.
두 가지 방식이 있다(모두 Mikolov et al., 2013).
모델
방향
설명
Skip-gram
중심 단어로 주변 단어를 예측한다
실제로 저빈도 단어에 강하다
CBOW(Continuous Bag of Words)
주변 단어로 중심 단어를 예측한다
빠르고 고빈도 단어에 강하다
“
주변 단어의 범위(윈도 L)는 설정에 따라 달라진다. 아래 예에서는 L=2로 둔다.
“
그림 6-1 Word2Vec의 두 구조. CBOW는 문맥으로 중심 단어를 예측하고, Skip-gram은 중심 단어로 문맥을 예측한다. 출처: Mikolov et al., 2013, Figure 1.
6.2 Skip-gram 모델
목표: 대상 단어가 주어졌을 때 그 문맥에 올바른 단어가 나타날 확률을 최대화한다.
예문: ... Bereft of life he rests in peace! If you hadn't nailed him ..., 대상 단어 rests, L=2일 때 문맥은 {he, in, life, peace}.
멜버른 대학교에서 COMP90042 NLP를 공부하며 정리한 노트다. 이 글에서는 신경망과 단어 표현을 다룬다. FFNN, RNN, LSTM, Transformer부터 빈도 기반 단어 벡터, Word2Vec, 평가 방법까지 정리한다.
1. 순전파 신경망(FFNN)
1.1 딥러닝 기초
순전파 신경망(Feed-forward NN)
뉴런 하나: 다음 함수로 나타낸다.
h = f(x)x로부터 계산할 스칼라:hw로 스케일링한 뒤 편향을 더한다. 편향:bw와b는 모델의 매개변수(parameters)다.h = \tanh\!\left(\sum_j w_j x_j + b\right)활성화 함수
수식
특징
Sigmoid
\sigma(z)=\dfrac{1}{1+e^{-z}}출력이 (0,1)이므로 확률로 해석할 수 있다. 양 끝에서 포화되어 기울기 소실을 일으킨다
Tanh
\tanh(z)=\dfrac{e^z-e^{-z}}{e^z+e^{-z}}출력이 (-1,1)이고 0을 중심으로 한다. sigmoid보다 학습하기 쉽다
ReLU
\max(0, z)계산이 빠르고 기울기 소실을 완화한다. 음수 영역에서는 죽은 뉴런이 될 수 있다
1.2 출력층
이진 분류(binary classification)
P(y=1\mid x)\in(0,1).다중 클래스 분류(multi-class classification)
\text{softmax}(z_i) = \frac{\exp(z_i)}{\sum_j \exp(z_j)}1.3 학습 방법
(a) 손실 함수
L이다:L = \prod_{i=1}^{m} P(y_i \mid x_i)-\log L(음의 로그우도/교차 엔트로피)다. 이를 기준으로 매개변수를 최적화한다.-\log L = -\sum_{i} \log P(y_i \mid x_i)(b) 경사 하강법
\theta \leftarrow \theta - \eta \nabla_\theta \mathcal{L}(c) 규제(regularization)
방법
수식/처리
효과
L1-norm
\lambda\sum\vert \theta\vert가중치를 희소하게 만든다(특징 선택)
L2-norm
\lambda\sum\theta^2가중치의 크기를 제한한다. 일반적인 SGD에서는 가중치 감쇠와 대응한다
Dropout
학습 시 일부 뉴런의 출력을 무작위로 0으로 만든다
뉴런 사이의 공동 적응을 줄인다. 매개변수를 공유하는 여러 부분 네트워크를 근사적으로 결합한다고 해석할 수 있다
(d) Dropout
1.4 활용 1: 주제 분류
과제: 문서를 미리 정한 주제 집합(economy/politics/sport 등)으로 분류한다. 입력: bag-of-words.
학습
W와b\vec{x} = [0,2,3,0] \;\rightarrow\; \vec{h} = \tanh(W_2\vec{x} + \vec{b}_1) \;\rightarrow\; \vec{y} = \text{softmax}(W_3\vec{h})\vec{y} = [0.1, 0.6, 0.3], 대응 클래스:C_1, C_2, C_3C_1이라면:L = -\log(0.1) \approx 2.303예측
\vec{x} = [1,3,5,0]\vec{y} = [0.2, 0.1, 0.7]= C_3(argmax 선택)개선 방법
1.5 활용 2: 단어 임베딩
W_1의 각 열이 단어 하나의 벡터다.1.6 활용 3: FFNN 언어 모델
다음 확률을 예측한다.
P(w_i = \text{grass} \mid w_{i-3}=\text{a},\, w_{i-2}=\text{cow},\, w_{i-1}=\text{eats})처리 흐름:
W_1)\vec{h} = \tanh(W_2\vec{x} + \vec{b}_1),\vec{y} = \text{softmax}(W_3\vec{h})\vec{y}는 전체 어휘에 대한 확률분포를 출력한다매개변수 수의 분포:
W_1(크기= d_1 \times \vert V\vert)W_3에 있다(크기= \vert V\vert \times d_h이며,d_h는 은닉층의 차원이다)1.7 FFNN 언어 모델과 빈도 기반 N-gram
비교 항목
빈도 기반 N-gram
FFNN N-gram
학습 비용
매우 낮다(빈도만 세면 됨)
높다(경사 하강법 필요)
희소성
심각하다(관측하지 못한 n-gram의 확률은 0)
완화된다(비슷한 단어가 매개변수를 공유하여 관측하지 못한 조합으로 일반화)
긴 문맥
문맥이 길어지면 매개변수 수와 희소성 문제가 심해진다
비교적 원활하게 확장되지만 고정 윈도 제약은 남는다
단어의 특성
단어 사이의 문법적·의미적 유사성을 포착하지 못한다(film과 movie를 무관한 기호로 취급)
단어의 특성을 자동으로 포착해 더 견고하게 추정한다
2. 순환 신경망(RNN)
2.1 정의
s_i = f(s_{i-1}, x_i), \qquad s_{i+1} = f(s_i, x_{i+1})f를 모든 시점에서 재사용한다.2.2 노드
X의 길이는 달라질 수 있다. 다만 각 입력 벡터x_i의 차원과 상태 벡터s_i의 차원은 모델에 따라 고정된다.단순 RNN의 두 수식
s_i = \tanh(W_s s_{i-1} + W_x x_i + b)y_i = \text{softmax}(W_y s_i)W_s: 상태에서 상태로 전달하는 가중치(기억을 전달하는 방식)W_x: 입력에서 상태로 전달하는 가중치W_y: 상태에서 출력으로 전달하는 가중치b: 편향2.3 네트워크
W_s, W_x, b, W_y). 상태로 앞뒤 위치를 연결하므로 매개변수 수가 시퀀스 길이에 비례해 늘어나지는 않는다.2.4 학습
x이다(언어 모델에서는 단어 하나).y이며, 상태가 다르기 때문이다.L = L(y_1) + L(y_2) + L(y_3) + \dots = \sum_t L(y_t)2.5 학습 예: 언어 모델
예문: a cow eats grass
x_i는 현재 단어(예: eats)이며, 먼저 임베딩으로 변환한다s_{i-1}는 이전 문맥(a, cow)의 정보를 담는다y_i가 예측하는 다음 단어는 grass이다.네트워크를 시간축으로 펼치면 다음과 같다.
수치 예(어휘 집합 {a, cow, eats, grass})
위치
입력
상태
s출력 분포
y정답
손실
1
a
s_1[0.40, 0.30, 0.20, 0.10]
cow
-\log(0.30)2
cow
s_2[0.30, 0.20, 0.30, 0.20]
eats
-\log(0.30)3
eats
s_3[0.50, 0.10, 0.20, 0.20]
grass
-\log(0.20)L_{\text{total}} = L_1 + L_2 + L_32.6 RNN의 문제
문제
설명
a) 학습과 디코딩의 불일치
학습에서는 teacher forcing으로 실제 이전 단어를 주지만, 추론에서는 자신의 예측을 입력하므로 분포가 달라진다(exposure bias)
b) 오류 전파와 원인 파악의 어려움
오류가 시점을 따라 전파되고 누적되며, 어느 단계에서 오류가 생겼는지 찾기 어렵다
c) 공허하고 일반적인 표현 생성
구체성이 부족하고, 무난하면서 빈도가 높은 표현을 생성하기 쉽다
d) 기울기 소실
시간축으로 역전파할 때 기울기가 지수적으로 감소해 장거리 의존성을 학습하지 못한다
2.7 기울기 소실
3. 장단기 메모리(LSTM)
3.1 정의와 동기
기억은 게이트(gate)로 제어한다:
3.2 RNN과 LSTM의 구조
C_t.3.3 기억의 원리와 제어
기억의 원리:
C_t는 시간축을 따라 덧셈으로 갱신하는 경로를 제공한다. 망각 게이트가 1에 가까우면 정보와 기울기를 보존하기 쉽다. 장기 기억이 가능한지는 게이트 값과 학습 결과에 달려 있다.기억의 제어: 네 단계
단계
역할
망각
이전 셀 상태
C_{t-1}에서 버릴 양을 정한다입력
새 정보를 얼마나 쓸지 정한다
갱신
망각 게이트와 입력 게이트의 결과로 셀 상태를 갱신한다
출력
셀 상태에서 읽어 낼 양을 정해 만드는 현재 은닉 상태:
h_t3.4 세 게이트와 상태 갱신식
망각 게이트(Forget gate)
f_t = \sigma\left(W_f\,[h_{t-1}, x_t] + b_f\right)f_t는 이전 메모리 셀C_{t-1}의 정보를 얼마나 보존할지 제어한다. 0에 가까우면 버리고 1에 가까우면 보존한다.입력 게이트(Input gate)
i_t = \sigma\left(W_i\,[h_{t-1}, x_t] + b_i\right)\tilde{C}_t = \tanh\left(W_C\,[h_{t-1}, x_t] + b_C\right)i_t: 메모리 셀에 쓸 새 정보의 양을 제어한다.\tilde{C}_t: 새로운 후보 정보(distilled information). 예를 들어 boy에 관한 정보다.셀 상태 갱신
C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_tC_t를 따라 직접 역전파될 수 있어 기울기 소실이 완화된다.출력 게이트(Output gate)
o_t = \sigma\left(W_o\,[h_{t-1}, x_t] + b_o\right)h_t = o_t \odot \tanh(C_t)h_t.3.5 매개변수 수
다음과 같이 두자
\text{Hidden}_{dim}= 메모리 차원(h_t의 차원이기도 함)\text{Input}_{dim}= 단어 임베딩의 차원\#\text{params} = 4 \times (\text{Hidden}_{dim} + \text{Input}_{dim}) \times \text{Hidden}_{dim} + 4 \times \text{Hidden}_{dim}W_f, W_i, W_C, W_o. 각 행렬의 크기(행 수, 열 수)는 같다.\text{Hidden}_{dim}이다.\text{Hidden}_{dim} + \text{Input}_{dim}이다.4 \times \text{Hidden}_{dim}는 네 묶음의 편향 상수항이다.예: Hidden = 256, Input = 300
4 \times (256+300)\times 256 + 4\times256 = 569{,}344 + 1{,}024 = 570{,}3683.6 RNN/LSTM 활용
활용
설명
위키피디아식 글 생성
정제된 학습 말뭉치로 백과사전식 글을 생성한다
코드 생성
코드를 생성한다(구조가 명확하여 평가하기 쉬움)
음성 인식
음향 특징 시퀀스를 텍스트로 변환한다
텍스트 분류
마지막 은닉 상태나 풀링 결과를 문서 표현으로 사용한다
시퀀스 레이블링
POS, NER 등 각 위치에서 레이블 하나를 출력한다
3.7 변형
변형
핵심
핍홀 연결
게이트가 셀 상태를 참조할 수 있다(
C_{t-1}도 게이트 계산에 사용)GRU(Gated Recurrent Unit)
간소화한 구조로, 게이트가 2개(리셋/갱신)이며, 별도의 메모리 셀이 없다. 매개변수가 적고 학습이 빠르며, 성능은 LSTM과 비슷한 경우가 많다
다층 LSTM
여러 층을 쌓아 층별로 추상화한다. 다만 실제로는 너무 깊게 쌓기 어렵다
양방향 LSTM
정방향과 역방향 LSTM의 은닉 상태를 이어 붙인다. 각 위치에서 양쪽 문맥을 함께 쓰지만 자기회귀 생성에는 사용할 수 없다
3.8 장단점
장점
단점
4. Transformer
4.1 정의
4.2 RNN에서 어텐션으로
4.3 활용 분야
입력 텍스트 → 출력 텍스트 형태의 과제:
모두 한 입력 텍스트로부터 다른 출력 텍스트를 만드는 과제이며, Transformer에 적합하다.
4.4 자기 어텐션: Query/Key/Value
직관적 설명:
예: 문장 I made her duck, 대상 단어 her
역할
내용
Query
q대상 단어 her의 쿼리 벡터
Key
k/ Valuev문맥 단어(I, made, duck)와 대상 단어 자신의 키/값
절차
x_i를 행벡터로 쓰고, 세 투영 행렬W_Q, W_K, W_V를 각각 곱한다.q_i = x_i W_Q,\qquad k_i = x_i W_K,\qquad v_i = x_i W_Vq와 모든 단어의k를 내적(dot product)하여 관련도 점수를 구한다.v의 가중합을 구해 대상 단어의 출력 벡터z를 얻는다.z를 위치순으로 나열하면 하나의 어텐션 헤드 출력이 된다.핵심: 대상 단어의 최종 표현은 자신을 포함한 문맥 단어의 Value 벡터를 가중합한 것이다. 가중치는 Query와 Key의 유사도로 정한다.
4.5 수식
단일 쿼리 형태
\text{SelfAttention}(q, K, V) = \sum_i \frac{\exp(q \cdot k_i)}{\sum_j \exp(q \cdot k_j)}\, v_i행렬 형태(각
q_i,k_i,v_i를 각각 행으로 쌓은 행렬은Q,K,V)\text{SelfAttention}(Q, K, V) = \text{softmax}(QK^\top)\,VScaled Dot-Product Attention(실제로 사용하는 형태)
\text{SelfAttention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V\sqrt{d_k}로 나눌까?d_k는 Key 벡터의 차원이다. 내적의 분산은 차원에 따라 커진다. 고차원에서는 softmax 입력이 너무 커져 one-hot에 가까운 극단적인 분포와 매우 작은 기울기가 생기기 쉽다. 따라서\sqrt{d_k}로 나누어 크기를 조정해 수치를 안정화한다(과도한 값과 기울기 소실 방지).4.6 멀티헤드 어텐션
동기: 문장 안의 단어는 여러 방식으로 연결될 수 있다.
관계 유형
예
통사
주어와 동사의 일치(noun–verb agreement)
의미
동의어
담화
it이 가리키는 앞선 표현: the dog
멀티헤드 어텐션은 서로 다른 표현 부분공간에서 여러 관계에 병렬로 주의를 기울일 수 있게 한다. 이를 위해:
h회 수행한다. 각 헤드는 자체W_Q^{(i)}, W_K^{(i)}, W_V^{(i)}를 갖는다.z^{(i)}를 이어 붙인다.W_O를 곱해 이어 붙인 결과를 모델 차원d로 되돌리고 여러 헤드의 정보를 통합한다.\text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W_O\text{head}_i = \text{Attention}(QW_Q^{(i)}, KW_K^{(i)}, VW_V^{(i)})4.7 Transformer 블록
원래 Transformer의 인코더 블록을 예로 들면, 자기 어텐션 외에도 다음 요소가 들어간다.
구성 요소
수
역할
피드포워드층
1×
각 위치에 같은 2층 MLP를 적용한다. 차원을 늘렸다 줄이며 비선형 변환을 더한다
잔차 연결(Residual connection)
2×
입력과 하위층의 출력을 더한다(
x + f(x)). 정보와 기울기의 직접 전달 경로를 유지하여 깊은 네트워크를 학습하기 쉽게 한다층 정규화(LayerNorm)
2×
각 위치의 은닉 특징을 정규화하고 크기 조정과 편향도 학습하여 학습을 안정화한다
4.8 블록 쌓기
4.9 위치 정보
문제: 위치 정보를 넣지 않으면 자기 어텐션 자체는 어순을 구별하지 못한다. 입력의 순서를 바꾸면 출력도 같은 방식으로 바뀔 뿐, 어느 단어가 앞뒤에 있는지 알 수 없다. 따라서 추가 위치 표현이 있어야 dog bites man과 man bites dog을 구별할 수 있다.
학습 가능한 위치 임베딩
X= word embeddings + position embeddings(두 벡터를 더함).고정 함수: 사인파 위치 인코딩
PE_{(pos, 2i)} = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \qquad PE_{(pos, 2i+1)} = \cos\!\left(\frac{pos}{10000^{2i/d}}\right)4.10 디코더 전용 구조
5. 단어 벡터: 빈도 기반 방법
5.1 단어 벡터 개요
5.2 문서를 문맥으로: 벡터 공간 모델(VSM)
관점
행/열
의미
문서 관점
각 행이 문서 하나
문서를 그 안에 포함된 단어로 표현한다
단어 관점
각 열이 단어 하나
단어를 그 단어가 출현한 문서로 표현한다(열벡터가 단어 벡터가 됨)
단어·문서 행렬 예(행 = 문서 id, 열 = 단어)
state
fun
heaven
425
0
1
0
426
3
0
0
427
0
0
0
5.3 TF-IDF
단어 빈도(Term Frequency)
tf_{t,d}이다. 대신\log(1+tf)를 쓰거나 정규화할 수도 있다.역문서 빈도(Inverse Document Frequency)
idf_w = \log \frac{\vert D\vert }{df_w}\vert D\vert= 전체 문서 수df_w= 단어w를 포함한 문서 수결합
\text{TF-IDF} = TF \times IDF\log\frac{1+\vert D\vert }{1+df_w}+1).예: tf 행렬에서 tf-idf 행렬로
tf 행렬(행 425/426/427, 열 the/country/hell):
the
country
hell
425
43
5
1
426
24
1
0
427
37
0
3
df500
14
7
아래는 전체 말뭉치에서 가져온 문서 세 행이다. 전체 문서 수를
\vert D\vert=500으로 두고 밑이 2인 로그를 사용한다. country, hell의 IDF를 각각 5.2, 6.2로 근사한 뒤 TF와 곱한다.→ the는 전체 500개 문서에 나오므로
idf=0이다. 반면 hell은 7개 문서에만 나와 상대적으로 가중치가 높아진다.the
country
hell
425
0
26.0
6.2
426
0
5.2
0
427
0
0
18.6
5.4 차원 축소
특잇값 분해(SVD)
A = U \Sigma V^\topA는\vert V\vert \times \vert D\vert크기의 단어·문서 행렬이다.U:\vert V\vert \times m, 새 단어 행렬(각 행이 단어 하나의 표현)\Sigma:m \times m크기의 특잇값 대각행렬(중요도 내림차순)V^\top:m \times \vert D\vert크기의 새 문서 행렬m = \text{Rank}(A)0이 아닌 특잇값을 모두 유지하면 동등한 분해다. 실제 차원 축소와 잡음 제거에는 보통 아래의 절단 형태를 쓴다.
잠재 의미 분석(LSA)
k개 특잇값과 해당 방향만 남기고U_k또는U_k\Sigma_k의 각 행을 단어 벡터로 쓴다.k는 흔히 100–300 정도로 둔다).TF-IDF에서 단어 벡터를 만드는 전체 흐름
5.5 단어를 문맥으로
5.6 점별 상호정보량(PMI)
\text{PMI}(x, y) = \log_2 \frac{P(x, y)}{P(x)\,P(y)}의미: 실제 동시 출현 확률과 두 단어가 독립일 때 기대되는 동시 출현 확률의 비율.
\text{PMI} > 0: 우연일 때보다 더 자주 함께 나타난다. 양의 연관을 가진 단어 쌍\text{PMI} = 0: 이 단어 쌍의 동시 출현 확률이 독립을 가정한 확률과 같다\text{PMI} < 0: 우연일 때보다 덜 자주 함께 나타난다. 음의 연관(함께 나타나기 어려운 관계)예: PMI(heaven, hell) 계산
동시 출현 행렬 일부(윈도 안의 동시 출현 횟수)
the
country
hell
Σ
state
1973
10
1
12786
fun
54
2
0
633
heaven
55
1
3
627
Σ
1047519
3817
780
15871304
P(\text{heaven}) = 627 / 15871304P(\text{hell}) = 780 / 15871304P(\text{heaven}, \text{hell}) = 3 / 15871304(해당 셀의 빈도가 3인 경우)수식에 대입하면:
\text{PMI}(\text{heaven},\text{hell})=\log_2\frac{3\times15871304}{627\times780}\approx6.61PMI 행렬 일부
the
country
hell
state
1.22
1.78
0.63
fun
0.37
3.79
-inf
heaven
0.41
2.80
6.61
5.7 PMI의 세 가지 보완 방법
방법
처리
이유
-\infty나 음수를 0으로 바꾼다\text{PPMI} = \max(\text{PMI}, 0)독립 가정보다 높은 동시 출현 관계를 남기고, 저빈도 음의 연관 추정이 불안정한 영향을 줄인다
정규화 PMI(NPMI)
\text{NPMI}(x,y) = \dfrac{\text{PMI}(x,y)}{-\log_2 P(x,y)}분자와 분모의 로그 밑을 맞춘다.
0<P(x,y)<1일 때[-1,1]범위로 정규화하여 단어 쌍 사이를 비교하기 쉽게 한다PMI에도 SVD 적용 가능
PMI 행렬에 SVD를 적용하여 앞
k개 차원을 쓴다차원 축소와 잡음 제거로 밀집된 저차원 단어 벡터를 얻는다
6. 단어 벡터: Word2Vec
6.1 Word2Vec 개요
모델
방향
설명
Skip-gram
중심 단어로 주변 단어를 예측한다
실제로 저빈도 단어에 강하다
CBOW(Continuous Bag of Words)
주변 단어로 중심 단어를 예측한다
빠르고 고빈도 단어에 강하다
6.2 Skip-gram 모델
목표: 대상 단어가 주어졌을 때 그 문맥에 올바른 단어가 나타날 확률을 최대화한다.
예문: ... Bereft of life he rests in peace! If you hadn't nailed him ..., 대상 단어 rests,
L=2일 때 문맥은 {he, in, life, peace}.확률 모델: 전체 문맥의 확률은 대상 단어를 조건으로 한 결합확률이다:
P(\text{context} \mid w_t) = \prod_{i \in [-L, \dots, -1, 1, \dots, L]} P(w_{t+i} \mid w_t)가정: 중심 단어가 주어지면 각 문맥 단어를 조건부 독립으로 취급하므로 확률을 곱으로 쓸 수 있다. 이 기본형에서는 문맥 단어의 순서를 구별하지 않는다.
6.3 로지스틱 회귀로 구현(softmax 형태)
P(w_O \mid w_I) = \frac{\exp(v'_{w_O}{}^\top v_{w_I})}{\sum_{w \in V} \exp(v'_{w}{}^\top v_{w_I})}여기서
v는 입력 측(중심 단어) 벡터이고,v'는 출력 측(문맥 단어) 벡터다.신경망으로 나타낼 수 있다:
6.4 두 임베딩 행렬
핵심: Word2Vec에는 두 묶음의 단어 벡터 행렬이 있다.
W(\vert V\vert \times d): 입력 임베딩(중심 단어)C(d \times \vert V\vert): 출력 임베딩(문맥 단어)차원
d선택: 차원은 하이퍼파라미터로 두고 말뭉치 크기, 후속 과제, 계산 예산에 따라 조정한다. 100–300차원이 흔한 출발점이다.학습 목적: 단어가 입력되면 각 단어가 문맥 단어일 확률을 구하고, 올바른 문맥 단어의 확률을 최대화한다.
문제: 느리다. 분모에서 전체 어휘(
\vert V\vert는 백만에 이를 수 있음)에 대해 합을 구하므로 학습 예마다 모든 단어를 훑어야 한다.6.5 네거티브 샘플링
조건부 확률
P(\text{context} \mid \text{word})의 예측을 단어 쌍의 이진 분류로 바꾼다.왜 네거티브 샘플링이 필요할까?
최대우도 추정
\max \ \sum_{(w,c)\in D} \log \sigma(u_c^\top v_w) + \sum_{(w,c)\in D'} \log \sigma(-u_c^\top v_w)여기서
D,D'는 각각 양성과 음성 단어 쌍의 집합이며,v_w는 입력 벡터,u_c는 출력 벡터다.P(+\mid \text{word},\text{context})이다.P(-\mid \text{word},\text{context})이다. 즉, 실제 동시 출현으로 판정될 확률을 낮춘다.임베딩의 직관: 자주 함께 나오는 입력 단어와 출력 측 문맥 벡터는 내적이 커지기 쉽다. 비슷한 문맥을 가진 단어는 비슷한 표현을 배울 수 있다. 다만 내적은 벡터 길이에도 영향을 받으므로 코사인 유사도와 동일시할 수 없다.
6.6 손실 함수
실제로는 양성 표본 하나당
k개의 음성 표본을 사용한다(일반적으로k=5\sim20이지만 말뭉치에 따라 조정한다). 아래에서T는 양성 단어 쌍의 수,c_t는 중심 단어,o_t는 관측된 문맥 단어다.J(\theta) = -\frac{1}{T}\sum_{t=1}^{T}\left[\log \sigma(u_{o_t}^\top v_{c_t}) + \sum_{i=1}^{k} \mathbb{E}_{w_i \sim P_n(w)}\log \sigma(-u_{w_i}^\top v_{c_t})\right]P_n(w)(보통 단어 빈도의 3/4제곱에 비례)에서 뽑는다. 고빈도 단어에 치우치거나 희귀 단어를 너무 많이 뽑지 않도록 한다.장점:
7. 단어 벡터 평가
7.1 내재적 평가 1: 단어 유사도
질문: 단어 임베딩이 좋은지 어떻게 판단할까?
방법: 코사인 유사도로 의미가 비슷한 두 단어(예: well & good)의 벡터 유사도를 구하고, 사람이 평가한 유사도와의 상관을 비교한다(Spearman 순위 상관).
\cos(u, v) = \frac{u \cdot v}{\Vert u\Vert \,\Vert v\Vert }7.2 내재적 평가 2: 단어 유추
방법: 임베딩 공간에서 벡터 연산을 하고 최근접 단어가 의미 관계에 맞는지 확인한다.
\text{king} - \text{man} + \text{woman} \approx \text{queen}벡터 덧셈으로 의미의 합성을 직관적으로 나타낼 수도 있다. 다만 표준 유추 평가는 아니다.
\text{breakfast} + \text{lunch} + \text{dinner} \approx \text{meal과 관련된 방향} \quad\text{(의미 합성을 직관적으로 보여 주는 예이며, 항등식이 아님)}7.3 외재적 평가: 후속 과제
방법: 임베딩을 분류, NER, 번역 등의 실제 과제에 사용하고 과제 성능으로 임베딩 품질을 평가한다.