분포 가설과 분산 표현
1. 희소 표현(Sparse Representation)
- 벡터의 특정 차원에 단어 혹은 의미를 직접 매핑하는 방식
2. 분포 가설
- 유사한 맥락에서 나타나는 단어는 그 의미도 비슷하다라는 가정을 함
3. 분산 표현
- 유사한 맥락에 나타난 단어들끼리는 두 단어 벡터 사이의 거리를 가깝게 하고, 그렇지 않은 단어들끼리는 멀어지도록 조금씩 조정한 단어 벡터
- 단어 간의 유사도를 계산으로 구할 수 있음
Embedding 레이어
- 단어의 분산 표현을 구현하기 위한 레이어 ex. 컴퓨터용 단어 사전
- Embedding 레이어만을 훈련하기 위한 방법 : ELMo, Word2Vec, Glove, FastText 등
- Weight는 단어의 개수, Embedding 사이즈로 정의됨
- 입력으로 들어온 단어를 분산 표현으로 연결해 주는 역할 -> 룩업 테이블(Lookup Table)
- 원-핫 인코딩을 위한 단어 사전을 구축하고 단어를 사전의 인덱스로 변환만 해주면 Embedding 레이어를 완벽하게 사용할 수 있음
주의사항
- Embedding 레이어는 단어를 대응만 한 것이라서 미분이 불가능함
- 따라서 어떤 연산 결과를 Embedding 레이어에 연결시키는 것은 불가능
- 원-핫 인코딩된 단어 벡터의 형태인 입력에 직접 연결되게 사용해야 함
원-핫 인코딩(One-hot Encoding)
- 텍스트를 유의미한 숫자(벡터)로 바꾸는 가장 손쉬운 방법론
- N개의 단어를 각각 N차원의 벡터로 표현하는 방식
- 단어 하나에 인덱스 정수를 할당한다는 점에서 ‘단어 주머니(bag of words, BoW)’라 부르기도 함
단점
- 컴퓨터가 단어의 의미 또는 개념 차이를 전혀 담지 못함
- ‘차원의 저주(curse of dimensionality)’ 문제 : 하나의 단어를 표현하기 위해 말뭉치(corpus)에 존재하는 수만큼의 차원을 가지게 되면 계산 복잡성이 기하급수적으로 늘어남
Recurrent 레이어 (1) RNN
- 문장이나 영상, 음성 등의 데이터-> 순차적인(Sequential) 특성
- 딥러닝에서 말하는 시퀀스 데이터는 순차적인 특성을 필수로 가짐
- Recurrent Neural Network 또는 Recurrent 레이어(이하 RNN)
- (입력의 차원, 출력의 차원)에 해당하는 단 하나의 Weight를 순차적으로 업데이트하는 것
- RNN은 스스로를 반복하면서 이전 단계에서 얻은 정보가 지속되도록 한다.
- 문장을 모두 읽은 후 최종 Step에 대한 Output만 필요한 경우,(return_sequences=False)]
- 문장을 생성했을 때 든 Step에 대한 Output이 필요한 경우,(return_sequences=True)
단점
- 한 문장을 읽고 처리하는 데에도 여러 번의 연산이 필요해 다른 레이어에 비해 느림
딥러닝 네트워크는 에러에 대한 각 가중치의 미분을 구해 업데이트하는 백프로퍼게이션을 통해 학습할 때,
1. 기울기 소실(Vanishing Gradient) 문제
- 입력의 앞부분이 뒤로 갈수록 옅어져 손실이 발생
- 미분 값이 너무 작음
- 가중치 업데이트가 잘 안되니 학습이 거의 이뤄지지 않음
- Exploding Gradient
- 미분 값이 너무 큼
- 가중치 업데이트가 너무 크니 학습이 불안정
Recurrent 레이어 (2) LSTM
- Long Short-Term Memory
- 기울기 소실 문제를 해결하기 위해 고안된 RNN 레이어
- sigmoid함수의 output이기 때문에 (0,1)의 값을 갖게 되는데, 1에 가까운 값을 갖게되면 미분값(gradient)이 소멸(vanished)되는 것을 최소한으로 줄일 수 있게됨
LSTM은 3개의 Gate Layer
- Forget Gate Layer : cell state의 기존 정보를 얼마나 잊어버릴지를 결정하는 gate
- Input Gate Layer : 새롭게 만들어진 cell state를 기존 cell state에 얼마나 반영할지를 결정하는 gate
- Output Gate Layer : 새롭게 만들어진 cell state를 새로운 hidden state에 얼마나 반영할지를 결정하는 gate
GRU(Gated Recurrent Unit)
- LSTM의 Forget Gate와 Input Gate를 Update Gate로 합침
- Cell State와 Hidden State를 합쳤다.
참고 : https://dgkim5360.tistory.com/entry/understanding-long-short-term-memory-lstm-kr
양방향(Bidirectional) RNN
- 진행 방향이 반대인 RNN을 2개 겹쳐놓은 형태
- tf.keras.layers.Bidirectional()
- 주로 기계번역 같은 테스크에 유리