1. Vanilla NN
2. RNN
1) NN vs. RNN
- NN은 INPUT을 sequential 하게 받을 수 없어서 보통 bag-of-words 으로 대신 표현함 (순서고려X)
- RNN은 하나의 cell(or neuron) 을 재사용해서 sequential 한 데이터를 INPUT으로 받음
2) RNN vector
(1) static RNN vs. dynamic RNN
- dynamic RNN (deprecated) :
- 문장의 길이(seq_len)만큼 recurrent가 일어남
- 별도로 각 문장마다 길이가 얼마인지를 명시해줘야함
- static RNN :
- 문장의 길이(seq_len)가 고정 되있음
- 보통 별도의 padding이나 truncating이 필요
- dynamic이 더 합리적으로 보이는데 오히려 복잡도 등이 더 높다고 함
(2) input shape
- static RNN의 경우 : batch_size * seq_len * emb_size(= n_hidden_unit)
- batch size 뿐만아니라 seq_len도 고려해서 feeding을 해줌
- 주의 : cell(or neuron)의 갯수는 1개이다. seq_len * batch_size 개 가 아니다.
- seq_len이 길어질수록 vanishing gradient 문제 발생 확률이 높아짐
→ 이 문제 해결을 위해 세로운 형태의 Cell이 만들어지고 activation function이 만들어진다. - stateful : 다음 batch 때도 hidden_state를 유지할 것인가?
(3) vectorisation
- one hot vector(bag-of-words) : one hot vector
- pretrained vector : w2v 같은 이미 학습된 word embedding 사용
- emb vector : 별도의 Embedding Layer를 두어 one hot vector와 동시에 사용
- (참고) word embedding의 장점 :
- 계산량 감소
- vector가 의미를 갖게됨
3) Cell 종류
- (좌) : GRU / (우) : LSTM
- seq_len이 길어질수록 이전에 데이터는 잊혀지는데 이러한 문제를 해결하기 위해 별도의 셀을 사용
- GRU vs. LSTM
- GRU가 가벼움
- 성능의 차이는 그리 크지 않음
- LSTM이 overfitting될 확률이 더 높음
(4) Activation Function
back propagtion을 할 때 activation function의 역함수를 취하게 됨
sigmoid의 역함수는 결과 값(y)이 0~0.25 정도 → 곱하면 곱할수록 값이 0에 수렴하게 됨
tanh의 역함수는 sigmoid에 비해 값이 커서 0에 수렴하는 정도가 더 약함
→ tanh도 결국은 vanishing problem 문제를 완화한 것이지 극복한것은 아님
(5) RNN 종류
- one-to-one : Vanilla NN
- one-to-many : Image Captioning
- many-to-one : Text Classification
- many-to-many(1) : Seq2Seq
- many-to-many(2) : Video
3. Advanced RNN
Seq2Seq
[Enc-dec 구조] : encoder는 source 문장을 meaning vector로 변환하고 번역을 위해 decoder에 보낸다.
encoding 시 context vector를 만들면서 정보가 손실될 수 있음
decoding 시 강조 해야할 input vector를 파악할 수 없음
Attention
attention mechanism의 주요한 아이디어는 번역할 때 관련있는 source content에 "attention"을 줌으로써 target 문장과 source 문장 사이에 connection을 만드는 것이다.
attention mechanism에서 얻은 또 다른 이점은 쉽게 source와 target과의 관계를 쉽게 시각화할 수 있다는 것이다.
BUT source ↔ source 혹은 target ↔ target 간의 관계는 도출하지 못함
Transformer
attention을 RNN을 보정하는 구조가 아니라 attention 만으로 인코더+디코더 구현 → Attention Is All You Need
참고자료 : https://wikidocs.net/31379
4. RNN for Rec
GRU4Rec / SASRec
고객의 행동을 sequence 형태로 받아서 추천에 활용
기본 알고리즘과 달라지는 부분은 negative sampling과 마지막에 상품을 predict 할 때 factorization의 형태로 predict하는 점이 다르다.
'Data Science > Neural Network' 카테고리의 다른 글
TensorFlow Seq2seq Library (contrib) (0) | 2018.12.11 |
---|---|
Neural Machine Translation (seq2seq) Tutorial (0) | 2018.12.08 |
Partial Derivative(편미분) and Chain Rule(체인룰) in Neural Network (0) | 2018.05.27 |
ReLU를 사용하는 이유 (0) | 2018.05.24 |