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) 해보기
카일스쿨 유튜브 채널을 만들었습니다. 데이터 분석, 커리어에 대한 내용을 공유드릴 예정입니다.
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 의견이 있으시면 댓글 남겨주셔요.