https://www.youtube.com/watch?v=efWlOCE_6HY&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI

## RNN W1L01 : Why Sequence Models

RNN의 사용예시를 보여준다.

https://www.youtube.com/watch?v=XeQN82D4bCQ&index=2&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI

## RNN W1L02 : Notation

(i) 는 example number이다. <t> 는 한 example에서 몇번째 단어인지를 나타낸다. T (i) x 는 i example에서의 총 단어수 이다.

30000 ~ 50000 vocabulary 수가 일반적인 비즈니스에서 사용된다. 때때로 1 mil이 사용되기도 한다. vector옆 숫자는 vocabulary 목록에서의 인덱스 번호이다.

https://www.youtube.com/watch?v=2E65LDnM2cA&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI&index=3

## RNN W1L03 : RNN Model

위 그림은 왜 일반 neural network를 사용할 수 없는지를 설명한다.

오른쪽 다이어그램과 왼쪽 다이어그램은 같은 내용이다. 다만 왼쪽은 과정을 풀어서 설명한 것이다.waa는 전단계의 a값에 곱해져서 이번단계의 계산에 사용되는 weight이며 a1, a2, a3…. 등에 쓰이며 모두 같은 값이다. wax는 입력값에 적용되는 weights이며 여러군데에서 사용되는데 모두 같은 값이다. wya는 해당 layer에서 출력되는 값을 구하기 위해 사용되는 weights이며 여러군데에서 사용되는데 모두 같은 값이다. 이 강의에서 Tx와 Ty는 같다고 가정한다. 일반 RNN의 단점으로 전단계의 정보는 이번단계에서 사용될수 있지만 나중에 오는 정보를 이번 단계에서 사용할수 없다는 것을 들수 있다. 이를 해결하기 위한 방법으로 bidirectional RNN을 사용한다.

a 값을 위한 g 함수로 tanh, ReLU를 사용하는 경우가 많다. y값의 경우는 sigmoid를 사용하는 경우가 많다.

waa와 wax를 합쳐서 wa matrix를 만들었다. 전체적인 vectorization을 보여주고 있다.

https://www.youtube.com/watch?v=esgbmJ6SnSY&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI&index=4

## RNN W1L04 : Backpropagation through time

빨간선인 back prop 과정을 보여준다. 가장 중요한 부분은 빨간 동그라미 부분이다. loss fucntion은 logistic regression과 같다. 각 layer에서 나오는 y hat value와 실제 값을 비교해서 얻어진 loss의 총합이 최종 cost가 된다. 이 과정을 backpropagation through time이라고 한다.

https://www.youtube.com/watch?v=G5kW3V6qHuk&index=5&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI

## RNN W1L05 : Different types of RNNs

many to many의 경우 Tx와 Ty의 수가 같은 경우와 다른 경우가 있다.

https://www.youtube.com/watch?v=1rOCxV0fSyM&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI&index=6

## RNN W1L06 : Language Model and sequence generation

이 강의 에서 P() 는 () 안의 문장이 실제로 사용될수 있는 확률을 알려준다.

각 단어 하나 하나를 하나 하나의 y<>로 구분한다. 이를 tokenize한다고 한다. 문장끝은 <EOS> token으로 생각한다. 문장 부호도 token으로 생각하는 경우가 있다. 기존의 vocabulary에 없는 단어의 경우는 <UNK> token으로 치환한다.

우측 하단은 각각 단어별 가능 확률의 곱으로 확률이 만들어 짐을 확인한다. 두번째 단어이후로는 conditional probability인 것을 확인한다.

https://www.youtube.com/watch?v=CKrxdgqBheY&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI&index=7

## RNN W1L07 : Sampling novel Sequences

character level model의 경우 더많은 자원을 필요로 하며 앞쪽의 글자의 영향력이 뒤쪽에 잘 전달되지 않는 문제가 있다.

https://www.youtube.com/watch?v=3Hn_hEPtciQ&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI&index=8

## RNN W1L08 : Vanishing gradients with RNNs

network가 너무 깊거나 RNN의 경우 초반부의 내용이 뒷부분에 영향을 주지 못하는 문제를 가지고 있다.

RNN과 많은 layer를 가진 network의 경우 vanishing gradient, exploding gradient 문제에 취약하다. exploding gradient의 경우 결과중에 NAN 값으로 표현되는 경우가 많아서 인지 하기가 쉬우며 clipping gradient를 통해 손쉽게 해결이 가능하다. 그러나 vanishing gradient의 경우 찾아내기 쉽지않다. 해결 방법으로는 gated recurrent unit GRU를 사용하거나 LSTM을 사용해 해결한다.

https://www.youtube.com/watch?v=xSCy3q2ts44&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI&index=9

## RNN W1L09 : Gated Recurrent Unit GRU

위 그림은 일반 RNN의 모습을 보여준다.

왼쪽 상단의 다이어그램의 보라색 박스와 오른쪽 수식의 보라색 대괄호는 같은 내용이다. 보라색 부분을 보면 GAMMA u의 값이 0이면 전단계의 C<t-1> 그대로 유지되고 값이 1이면 새로운 tilda C<t> 의 값이 저장된다. GAMMA u 값이 스위치 역활을 하게 된다. C<t> 와 tilda C<t> 와 GAMMA u 는 모두 같은 사이즈의 vector이며 보라색 박스 안에서 * 연산은 elementwise 연산이 된다.

기존의 GRU에서 좀더 확장된 알고리즘이며 보다 많이 사용된다. GAMMA r은 relevance gate이다. 이와 비슷한 역할을 하는 알고리즘으로 LSTM을 들수 있다. Full GRU 설명하는데 수식 왼쪽의 notation이 대신 사용되기도 한다.

https://www.youtube.com/watch?v=5wh4HWWfZIY&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI&index=10

## RNN W1L10 : Long Short Term Memory (LSTM)

gates 계산에 C<t-1>을 넣어서 하는 경우도 있는데 이를 peephole connection이라고 한다. LSTM가 GRU보다 먼저 개발된 알고리즘이다. LSTM은 gate 가 GRU보다 많기 때문에 자원소비가 좀더 있지만 좀더 강력하고 유연하다. LSTM은 보다 간단하기에 대형 network 제작에 좀더 유리하다. 전반적으로 LSTM을 좀더 사용하낟.

https://www.youtube.com/watch?v=bTXGpATdKRY&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI&index=11

## RNN W1L11 : Bidirectional RNN

기본 RNN의 경우 전단계의 데이터가 현단계에 적용될수 있지만 이후단계의 정보는 적용될수 없다. 이를 보완 하기 위한 방법으로 Bidirectional RNN를 사용하며 일반 RNN, LSTM, GRU에 사용될수 있다.

단하나의 순환 단계가 없는 acyclic graph 형태이다. y hat <3>를 계산하는경우 노란색의 방향으로 계산된다. x<1> , a-><1> , x<2> , a-><2> 와 반대방향으로 부터에서의 x<4> , a-><4> 가 같이 들어와서 상단 수식에 의해 계산된다.

https://www.youtube.com/watch?v=U7wN1x8zsG8&index=12&list=PL1w8k37X_6L_s4ncq-swTBvKDWnRSrinI

## RNN W1L12 : Deep RNNs

기존의 RNN보다 층이 여러층으로 늘어났다. 각 층은 세로 가로로 연결되어 있다.

보통은 3층(가로로도 연결된 층)을 초과해서는 만들지 않는다. 하단부에 가로 세로로 연결된 층을 만들고 상단부에는 세로로만 쌓여있는 network를 만들기도 한다.