CS231n 10강. Recurrent Neural Networks
Stanfoard CS231n 2017 10강을 요약한 글입니다. 정보 전달보다 자신을 위한 정리 목적이 강한 글입니다! :)
RNN과 LSTM을 이해해보자! 글과 Pytorch를 활용한 RNN 글을 함께 보면 좋을 것 같습니다!
Recurrent Neural Networks Intro
Process Sequences
- RNN : handling variable sized sequence data that allow us to pretty naturally capture all of these different types of setups in our models
- 시퀀스 길이에 관계없이 인풋과 아웃풋을 받아들일 수 있는 네트워크 구조며, 필요에 따라 다양하고 유연하게 구조를 만들 수 있음
- 히든 노드가 방향을 가진 엣지로 연결되어 순환 구조를 이루는 인공신경망의 한 종류
- fixed size input과 fixed size output을 가지는 몇 문제점이 있지만, RNN은 그래도 유용합니다
RNN
- Notice : function과 parameter들은 모든 time step마다 동일하게 사용됩니다
- \(W_{hh}\)는 previous hidden state에서 나오는 Weight Matrix
- 활성 함수로 tanh를 사용한 이유는?
- 왼쪽부터 순차적으로 진행
- \(y_{t}\) : class scores
- \(L_{t}\) : loss
- \(L\) : sum of individual losses
- final hidden state는 전체 sequence의 모든 context를 요약한 정보를 가지고 있습니다
- Seq2Seq Model
- Machine Translation
- Many to one과 one to Many의 조합
- Encoder + Decoder
Example : Character-level Language Model
- 텐서플로우(TensorFlow)를 이용해서 글자 생성(Text Generation) 해보기 코드 참고
- Language model
- 단어 시퀀스에 대한 확률 분포
- \(m\)개의 단어가 주어졌을 때 \(m\)개의 단어 시퀀스가 나타날 확률, \(P(w_1, w_2,...,w_m)\)을 할당
- 언어모델(Language Model) 참고
- Train 과정
- Test
- 모든 Timestep에서 다음에 올 단어를 예측하고 오차를 Cross Entropy로 구함
- RNN은 매우 느리고 converge되지 않습니다. 많은 memory를 사용하는 것이 RNN의 단점
느린 속도를 극복하기 위해 배치별로 나눠서 진행
Image Captioning
- caption : variably length sequence
- CNN에서 나온 것을 hidden layer의 초기값으로 설정
Image Captioning with Attention
- 이미지의 특정 부분에 기반해 단어를 유추했다고 보여줌
- Attention, RNN, LSTM에 대한 내용은 CS231에선 많이 다루고 있지 않습니다. CS224를 참고하면 좋습니다
Visual Question Answering
- RNN과 Computer Vision의 조합은 Cool
- RNN에선 2~3개의 layer를 쌓는 것이 일반적입니다
Vainilla RNN Gradient Flow
- Vanilla RNN의 형태는 Exploding gradients/Vanishing gradients 문제를 가지고 있습니다
- Exploding gradients의 경우 Gradient clipping을 사용
- Gradient의 L2 norm이 기준 값을 초과할 때 (threshold/L2 norm)을 곱해주는 것
Long Short Term Memory (LSTM)
- forget gate가 매번 달라지기 때문에 vanishing gradient 문제가 발생하지 않음
Other RNN Varinats
Summary
Reference
- Stanfoard CS231n 2017
- RNN과 LSTM을 이해해보자!
- 언어모델(Language Model)
- 텐서플로우(TensorFlow)를 이용해서 글자 생성(Text Generation) 해보기
카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)