6-1. RNN Language Models
•
N-gram의 한계로 인해, 다양한 길이의 시퀀스를 처리할 수 있는 RNN 사용하게 됨
•
자연어 처리에 대표적으로 사용되는 인공신경망
•
은닉층 → 활성화 함수 → 출력층 이었던 기존의 신경망들(Feed Forward Neural Network)와는 다르게 은닉층 → 활성화 함수 → 출력층 하면서, 다시 은닉층 노드의 다음 계산의 입력으로 보냄
•
위 그림은 t=4일 때의 output distribution을 계산한 결과
•
RNN Language Model은 모든 time step에서 output distribution 계산
•
다음 time step으로 전달해줌과 동시에 출력이 가능하도록 한다.
•
RNN 사용 예시
1.
품사 예측 : 단어 하나씩만 연산(매 time step 마다 연산)
2.
감정 평가 : 문장 전체를 읽은 뒤 연산(마지막 time step에서만 연산)
•
Parameter W는 모든 time step 마다 공유하게 된다.
•
위 그림과 같이 ht를 선형 변환한 뒤, 벡터간의 내적으로 구할 수 있음
•
Wxh는 xt를 ht의 일부로 변환시켜주는 역할
•
Whh는 ht-1를 ht의 일부로 변환시켜주는 역할
6-2. Types of RNNs
6-2-1. One-To-One
•
기본적인 방식의 Neural Network
•
선형결합, 비선형 결합 등등
•
e.g. 키, 몸무게, 나이 입력하면 건강 정보를 출력하는 등
6-2-2. One-To-Many RNN
•
입력이 하나의 time step, 출력이 여러개의 time step으로 이루어짐
•
e.g. Image Captioning : 이미지를 설명하는 것
6-2-3. Many-To-One RNN
•
입력이 여러개의 time step, 출력이 한개의 time step으로 이루어짐
•
e.g. Sentiment Classification
6-2-4. Many-To-Many(Sequence-To-Sequence) RNN
•
입력이 여러개의 time step, 출력도 여러개의 time step으로 이루어짐
•
e.g. Machine Translation
•
“I go home” → “나는 집에 간다“
•
다 읽지 않고 바로 바로 처리하는 경우도 존재(Delay X)
•
e.g. Video Classification on frame level, POS tagging
•
Video Classification on frame level
◦
해당하는 frame이 어떤 씬인지?
◦
전투씬, 또는 주인공이 등장하지 않는 씬…etc
•
POS(Part Of Speaking) tagging
◦
각 단어별로 문장성분 또는 품사 구분
6-3. Character-level Language Model
•
word level, character level…etc
•
Output layer의 node 수는 dict의 크기와 동일하다
•
h0의 은닉층은 [0,0,0]
•
Multi-Class Classification
◦
마지막에 softmax 사용
◦
위 그림에서 첫번째 출력이 ground truth와 틀리므로 ground truth에 맞춰 계속 학습
•
Many-To-Many(Sequence-To-Sequence)
◦
전 time step 들의 정보들을 합쳐 계속 진행
◦
앞 time step의 output을 그다음 time step의 input으로 사용
◦
Wxh, Why
◦
e.g. 주가 예측 모델
•
character-level 말고도 단어, 문장, 문단으로도 동일 과정으로 가능
◦
문장, 문단으로는 띄워쓰기(공백) 마저도 인식하는 차이점
•
e.g. 셰익스피어 소설을 문단 단위로 RNN 학습 & Inference
•
e.g. 논문을 latex의 문장 단위로 RNN 학습 & Inference
•
Backpropagation through time(BPTT)
•
시퀀스의 output길이가 너무 길어지면, 한정된 gpu 리소스 메모리 내에 담기기에는 어려움이 따른다.
•
Truncation 해서 Loss 계산하는 방식
•
time step을 일정 구간으로 나누어 역전파를 계산하여, 전체 역전파로 근사시키는 방법인 Truncated BPTT 를 대안으로 사용할 수 있음
•
만약 학습 데이터가 장기간에 걸쳐 패턴이 발생한다고 하면, 이러한 장기간(Long-Term)의 패턴을 학습할 수 없는 문제 발생(?)
6-4. Gradient Vanishing / Exploding Problem in RNN
•
time step이 진행될수록 같은 W이 계속 곱해지므로, 기하급수적으로 커지거나, 기하급수적으로 작아지는 문제 발생(?)
6-5. LSTM(Long Short-Term Memory)
•
기존 RNN의 Gradient Vanishing / Exploding 문제를 해소함
•
LSTM은 메모리를 분리하여 과거의 정보를 저장하고 불필요한 정보는 잊어버리며 필요할 때 필요한 만큼 저장해놓은 정보를 활용하여 장기 의존성 문제(Long-term Dependancy)를 해결한다.
•
핵심은 네트워크가 장기 상태(Ct)에서 기억할 부분, 삭제할 부분, 그리고 읽어 들일 부분을 학습하는 것!
•
LSTM의 구조
•
C(Cell state vector, 장기 상태)
◦
완성된 정보를 담고있는 벡터
◦
Long-term memory 보존
•
H(hidden state vector, 단기 상태)
◦
C에서 노출할만한 정보만을 남긴 벡터
◦
C를 한번 더 가공한 것, 그 다음 step의 input 중 하나
◦
Short-term memory 조절
•
LSTM의 구성요소(I,F,O,G)
•
Forget Gate
◦
얼만큼 Forget할지 벡터로 설정
◦
이전 시점의 cell state에서 어느 정도의 정보를 가져갈 것인지(얼마나 Forget할지) 결정
◦
h(t-1)과 x(t)를 받아 sigmoid를 통과시켜 0과 1 사이의 값으로 조정한다.(0: 정보 삭제 ~ 1: 정보 반영)
•
Input Gate
◦
새로 들어온 입력 정보에서 장기 기억으로 가져갈 정보의 양 결정
◦
3개의 gate를 사용하여 매 time step의 cell state와 hidden state, input에서 취할 정보의 양을 결정한다.(Xt, ht-1)
◦
tanh를 통해 기존의 hidden state와 같이 -1와 1 사이의 값으로 만들어 장기 기억으로 올라갈 새로운 정보들의 후보를 생성한다.
◦
sigmoid를 통과 시킨 값인 i를 활용하여 정보를 어느 정도 cell state로 가져갈지 결정
◦
Gate Gate
▪
Ct = 과거의 정보를 얼마나 반영할 지 + 현재의 정보를 얼마나 반영할 지
•
Output Gate
•
입력 정보에 sigmoid를 취함 → 현재 정의된 cell state(장기기억)에서 어느 정도의 정보를 hidden state(단기기억)로 사용할지 결정
•
cell state에 관여하지 않지만 hidden state에 관여함
•
6-6. GRU(Gated Recurrent Unit)
•
LSTM의 경량화 ver.
◦
적은 메모리 용량 & 빠른 연산 가능
◦
하지만 LSTM에 비해 많이 부족한 성능을 보이지는 않는다!
6-7. 정리
•
RNN은 다양한 길이를 가진 시퀀스 데이터에 특화된 유연한 형태의 딥러닝 구조이다.
•
기존의 RNN은 구조의 한계로 Gradient Vanishing / Exploding이 나타난다.
•
LSTM과 GRU의 각 time step에서의 Cell state, Hidden state를 업데이트 하는 방식을 통해 위 문제를 해결할 수 있었다.(덧셈 기반의 연산)
•
Backprop in LSTM & GRU
•
기존의 계속적으로 W를 곱해주는 RNN의 형태에서 탈피
•
이전 time step의 Cell state에서 서로 다른 값을 가진 forget gate를 이용
•
필요로 하는 정보를 곱셈이 아닌 덧셈을 이용해서 원하는 정보를 만든다.
•
덧셈연산은 Backprop할 때, gradient를 복사해주는 기능을 한다.