1. Supervised vs Unsupervised Learning
: 학습 시 label 사용 여부에 따라 나뉨.
- Unsupervised Learning:워드 임베딩, 언어 모델, 비교 학습
- Supervised Learning: 감정 분석, 기계 번역, 코드 생성, 요약, 질의 응답
2. NLP: a two-stage approach
- Unsupervised Learning: Large Corpus 등의 dataset으로 Language Modeling을 수행
- Supervised Learning: unsupervised로 가공한 dataset으로 Classification, Regression, Language Generation 등을 수행
3. Language Modeling
Language Modeling: 다음 순서에 어떤 단어가 올 지 예측하는 모델링.
식으로 나타내면 아래와 같다. 왼쪽에 있는 t개의 단어들을 가지고 t+1번째의 단어를 예측하는 것!
또한 단어에 확률을 부여하는 것이라고도 볼 수 있다.
4. N-gram Language Model
Markov assumption: x^(t+1)은 오직 n-1 단어들에만 의존해 예측한다.
(현재 상태가 이전의 유한한 고정된 상태의 수에만 의존)
n-gram: chunk of n consecutive words
⚠️ N-gram model의 문제점 (Sparsity Problems)⚠️
[충분한 데이터를 관측하지 못하여 언어를 정확히 모델링하지 못하는 문제]
Problem1. 만약에 "students opend their w"라는 문장이 나온 적이 한 번도 없으면 어떡하냐!
→ Sol: 모든 count에 매우 작은 값을 넣어서 probablity가 0이 되지 않게 하자. "Smoothing"
Problem2: 만약에 "students opend their"라는 문장이 나온 적이 한 번도 없으면 어떡하냐!
→ Sol: 그냥 "opened their"로 대체하자. "Backoff"
Problem3: Increasing n or Increasing corpus는 모델 사이즈를 키운다..
Problem4: 일관성이 없어진다. 전체 문장의 일관성을 n개의 단어로 예측하는 것은 일관성이 없다..
Note: n의 값이 커질 수록 sparsity 문제는 심해진다. n은 5를 넘기지 말자~
5. A fixed-window Neural Language Model
How about a window-based neural model?
- 해결
- Sparsity 문제 해결
- n-gram에 대해 모두 저장할 필요가 없음
- 문제
- fixed window는 너무 작다.
- window를 키우면 W의 값도 함께 커진다.
- x1과 x2는 완전히 다른 가중치를 갖고, input 처리되는데 symmetry가 없다.(?)
6. Recurrent Neural Networks(RNN)
Key idea: Apply the same weights W repeatedly
RNN은 직전의 old hidden state와 해당 단계에서의 input vector를 가지고 새로운 state를 만든다!
아래는 이를 자세히 그린 그림이다.
식으로 표현을 하면 아래와 같다.
- RNN의 장점
- 어떤 길이의 입력이든 처리 가능.
- 여러 단계 이전의 정보를 사용해 t 단계 계산을 할 수 있다.
- 모델 사이즈가 커지지 않는다.
- 같은 가중치를 적용해 symmetry가 있다.
- RNN의 단점
- Recurrent 계산이 느리다.
- 많은단계 이전의 정보를 사용하는 것이 어렵다.
RNN != Language Model
RNNs are great way to build a LM
7. Training RNN-based Language Models
Loss Function: 예측된 확률분포 y^와 실제 다음 단어 확률분포 y 사이의 Cross Entropy
여기서 잠깐!
나처럼 Cross Entropy가 기억이 안나는 사람들을 위해 정리를 한다면, 아래와 같은 식으로 계산된다.
여기서 q(xi)는 예측한 확률분포이고, p(xi)는 실제 확률분포이다.
예측을 잘 할 수록 q(xi)logp(xi)의 합이 커진다!
하지만 우리는 이를 loss로 사용할 것이므로 앞에 마이너스를 붙여 값이 작아지는 방향으로 학습 하고자 한다!
예를 들어, 가방에 0.8/0.1/0.1 의 비율로, 사과/자두/딸기가 들어가 있다고 하자, 하지만 직감에는 0.2/0.2/0.6의 비율로 들어가 있을 것 같다. 이 때의 cross-entropy 는 아래와 같이 계산된다.
아래는 또 다른 예제이다.
다시 위의 식으로 가겠다.
일단 여기까지는 쉽게 이해할 수 있을 것이다.
근데 왜 위처럼 -log y^^(t)x(t+1)로 되는 것이냐하면!
예측한 확률분포 y^(t)는 아래와 같은 형태로 나올 것이다.
그리고 실제 정답인 y(t)는 {0, 1, 0, 0, 0 ...}의 형태로 정답에만 1인 one-hot encoding되어 있을 것이다.
따라서 -log(정답에 해당하는 단어의 확률)이 되는 것이당!!
그래서 아래와 같이 Loss가 계산되는 것이다.
However, loss와 gradient를 계산하는 것은 too expensive하다.
▶ Stochastic Gradient Descent는 loss와 gradient를 계산할 때 작은 데이터로부터 계산 가능하게 한당
8. Generating with an RNN language model
repeated sampling을 통해 RNN도 text 생성에 사용할 수 있다!
9. Evaluating language models
학습에 쓰이지 않았던 자료로 test!
언어 모델 평가 지표는 보통 perplexity이다.
perplexity에 대해 몰라서 조금 찾아 봤다.
perplexity는 (무언가를 이해할 수 없어) 당혹스러운 정도, 헷갈리는 정도라는 사전적 의미가 있다.
보통 perplexity가 낮을수록 언어모델이 우수하다고 평가된다.
코퍼스에 대한 확률들을 inverse하는 것인데 이는 사실 cross-emtropy loss J를 exponential한 값과 동일하다고 한다.
10. Problems with RNNs
- 곱해지는 값이 1보다 크면 Exploding Gradient(NAN, inf) 문제가,
- 곱해지는 값이 1보다 작은면 Vanising Gradient(0) 문제가 생길 수 있다.
Vanishing gradient 문제!
멀리 있는 gradient가 반영이 잘 안된다!
Q. 그렇다면 이 문제를 어떻게 해결할 수 있을까?
RNN에서는 hidden state가 지속적으로 재작성된다.
해결: 별도의 메모리를 가지고 있는 RNN
→ LSTM
해결: 추가적인 기술
→ Attention, residual connection ...
Q. Exploding gradient가 왜 문제일까?
gradient가 너무 커지면, SGD(Stochastic Gradient Descent) 업데이트가 너무 커진다!
크게크게 움직인다! (걸음거리가 커짐)
→ 해결: Gradient clipping
Gradient clipping이란 gradient가 threshold1보다 커지면 줄이고, threshold2보다 작아지면 키우는 것!
11. Long Short-Term Memory RNNs (LSTMs)
앞서 RNN에서 일어난 Gradient 문제들을 해결하고자 나온 방법!
Gradient flow를 제어할 수 있는 '밸브' 역할을 함
4개의 MLP구조를 가짐.
1️⃣ Input Gate
: 가지고 있는 정보를 얼마나 활용할 것인가를 결정
예를들어 시그모이드를 거쳐서 온 값이 0.2였으면 0.2만큼 활용한다는 것.
2️⃣ Forget Gate
: 가지고 있는 정보를 얼마나 잊어버릴 것인가를 결정
3️⃣ Cell
: input gate와 forget gate에서 나온 것들을 적당히 섞음
4️⃣ Output Gate
: input, forget, cell에서 나온 정보들을 종합해 다음 단계로 넘김
'Computer Science > Deep Learning Application' 카테고리의 다른 글
[딥러닝] 10장 컴퓨터 비전, Conv와 멀티모달 학습 (0) | 2024.06.15 |
---|---|
[딥러닝] 9장 최근 언어 모델 (0) | 2024.06.14 |
[딥러닝] 8장 Generalization과 Evaluation (0) | 2024.06.09 |
[딥러닝] 7장 Language Model에서 어시스턴트로의 발전(언어모델의 3단계) (0) | 2024.06.09 |
[딥러닝] Subword Tokenizer (0) | 2024.04.10 |