Search
🐭

[11/24(목)] Lecture 6 : Simple and LSTM RNNs

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를 복사해주는 기능을 한다.