RNN (Recurrent Neural Networks)
히든 노드가 방향을 가진 엣지로 연결돼 순환구조를 이루는(directed cycle) 인공신경망의 한 종류
음성, 문자 등 순차적으로 등장하는 데이터 처리에 적합한 모델
시퀀스 길이에 관계없이 인풋과 아웃풋을 받아들일 수 있는 네트워크 구조이기 때문에 필요에 따라 다양하고 유연하게 구조를 만들 수 있음
구조 내 weight 값이 항상 같음 (같은 weight를 share함으로써 문장의 길이가 길어도 네트워크 사이즈가 달라지지 않음)
기본구조
현재 상태의 output yt는 input xt와 hidden state인 ht를 전달받아 갱신
state의 활성함수(activation function)은 비선형 함수인 하이퍼볼릭탄젠트(tanh)
Language Modeling
Language model
- 쉽게 말해, 어떤 단어(token) 다음에 올 단어(token)를 예측하는 것
- 정확하게는, 어떤 문장에 대해 점수(문장이 얼마나 likely한지 -> 확률)를 매기는 것 (unsupervised learning)
- 이 scoring을 잘 할 수 있으면 generation도 잘 할 수 있음 (이론적으로)
N-gram
- N-1개의 단어를 보고 N번째 단어를 예측하는 것
- 과거에는 통계적 기법(maximum likelihood) 사용 - count base
문제점
- sparsity problem: 한 번도 안 나온 단어의 조합이 나올 경우 그 확률은 바로 0이 돼버림
- inability capture long term dependencies
- 이 두 문제는 서로 trade-off가 있음
- long term dependency를 고려하기 위해 N을 늘리면 sparsity problem이 심해짐
Neural Language Model
- 문자를 숫자로 인코딩하고 neural network로 n-gram
- 다른 차원으로 transpose(mapping) 하는 과정에서 같은 공간으로 모일 수 있음(ex.their, our) -> sparsity 해결
- long term dependency는 여전히 문제
- 하지만 N을 늘리면 모델이 너무 커짐
언어 네트워크
- character-level language model : 알파벳 단위의 RNN
- instance-level(word level) language model : 단어 단위의 RNN 구조
- 단점 : out of vocabulary (unknown) - 고유명사, 신조어…
- 장점 : 성능이 좋음, 문법 학습 용이
- one-hot-encoding / word-embedding
기본 RNN의 문제점
- Long-Term Dependencies: 많은 입력이 들어가면 하나의 hidden vector로 압축하기 매우 힘듬, 마지막 단어에 영향을 제일 많이 받음
- 학습의 어려움 : Vanish/Exploding Gradient
- 관련 정보와 그 정보를 사용하는 지점 사이 거리가 멀 경우 역전파시 그래디언트가 점차 줄어 학습능력이 크게 저하
- Weight가 1보다 크면 Exploding, 1보다 작으면 Vanishing
LSTM (Long Short-Term Memory Network)
긴 의존 기간의 문제를 피하기 위해 명시적으로(explicitly) 설계
Cell state에서 중요한 정보 전달, 추가적인 정보는 hidden state 통해서 전달
입력: Input, hidden state, cell state
gate
- Forget gate: 장기 상태 ct의 어느 부분을 삭제할지 제어
- Input gate: gt의 어느 부분이 장기 상태 ct에 더해져야 하는지 제어
- Output gate: 장기 상태 ct의 어느 부분을 읽어서 ht 와 yt로 출력해야 하는지 제어
Cell state을 통해 gradient가 전달되어 forget gate에 대한 미분값이 곱해져 매번 곱해지는 값이 달라 vanish 문제를 조금 해결 (완전히 없어지지 않음)
A Search Space Odyssey
- peepholes(gate controller에 이전 타임스텝의 장기 상태가 입력으로 추가되면서 더 많은 맥락(context) 인식)은 성능에 별로 중요하지 않음
- forget > input > output 게이트는 성능에 매우 중요
- activation function도 중요
- full gate는 파라미터 수에 비해 잘 못함
- input과 forget 게이트 결합시켜도 됨 -> GRU로 발전
'DEEP LEARNING > Fundamental Concept' 카테고리의 다른 글
Semantic Segmentation (0) | 2020.03.30 |
---|---|
Object Detection (0) | 2020.03.25 |
Modern CNN (0) | 2020.03.10 |
Convolutional Neural Network (0) | 2020.03.03 |
Training Neural Networks (0) | 2020.02.24 |