티스토리 뷰
이번 수업은 마지막으로, 다시 한번 더, GRU 를 뽀개버리는 수업이었다.
1. 왜 GRU 를 쓰지?
위의 이미지에 등장하는 수식은 을 구하는 방법으로, 즉 current hidden state 를 업데이트 하기 위한 수식이다.
수식을 간단하게 설명하자면, current step 에서의 input인 x 와, previous hidden state 에 각각 가중치를 곱하고 이 둘을 더한다. 여기에 bias 를 더한 다음 tanh 을 씌워서 -1 과 1 사이의 값을 반환하는 식이다. 이때 주목해야 할 것은 previous hidden state 에 weight matrix U를 곱했다는 점. 이런 식으로 weight matrix 곱이 들어갈 경우 step 이 계속 될수록 vanishing gradient 가 발생하게 된다. 그래서 에 대해서 가 얼마나 영향을 미쳤는지를 알고싶을 때, 아래의 이미지처럼 순차적으로 다 해야 되고, 그러다 보면 스텝이 커질 수록 vanishing gradient 문제가 생기는 것..
그렇다면 저렇게 intermediate 하게 모든 것을 다 거쳐서 하는 대신에 에서으로 back prop 보내는 shortcut 을 만들 수는 없을까 (2번째 아래 그림의 빨간 화살표처럼)? 바로 이것을 해결하기 위해 만들어진 것이 GRU! 이렇게만 되면, 현재 state 에 이~~~~~~~~전의 state 가 미치는 영향에 대해 더 직접적으로 알 수 있고, long term dependency 를 배울 수 있게 되는 거다.
2. GRU 파헤치기!
2.1 Update gate
네모 상자에서 보듯이 저 부분이 GRU 에서 current hidden state 를 update 하는 부분이다. update gate 를 통해서 과거의 기억 (previous state) 와 현재 (current candidate) 를 각각 얼만큼 반영해서 current state 를 업데이트할지 정한다고 보면 된다. 이 때, 여기서 더 이상 matrix 곱이 아니라, 행렬끼리 element wise 곱임을 주의해야 한다!
는 결국 과거에 나타난 words 에 대한 정보를 담고있는 벡터이다. 이 벡터에서 원하는 부분을 원하는 만큼 update 하는 것이 update gate 가 하는 일임. (이해를 돕기 위해 말하자면, 결국 update gate 도 vector 인데 모든 값들이 0~1 사이임. 그리고 hidden state 랑 element wise 곱을 하니까 당연히 두 vector 의 shape 은 동일해야 함)
여기서 Update gate 가 하는 역할이 뭐냐?! 예를 들어서 previous hidden state 에서 47 열에서 52열까지의 내용이 이 전에 나온 verb 에 대한 정보라고 하자. 그런데 current input 이 새로운 verb다! 이 경우에는 47 열에서 52열까지 있던, 이전에 등장한 동사에 대한 정보를, 현재 등장한 동사에 대한 내용으로 current hidden state 를 update 를 하고싶은 거임. 그렇다면 거기에 해당하는 update gate 의 값은 거의 1에 가까우면 되겠지.
2.2 Reset gate
계속 해서 앞에 등장한 식을 보면서 얘기하자. 그렇다면 update gate 에 있는 값들이 거의 다 0에 가까운 값으로 이루어졌다고 하자. 그렇다면, current state 를 업데이트 함에 있어서 그냥 를 그대로 더하는 거랑 같다. 근데 문제는 이렇게 이 행렬을 거의 그대로 더해버렸기 때문에 스텝이 많이 지나가도 이 상태가 영원히 남는다는 거임. 스텝이 많이 지나가서 어떤 정보를 잊고 싶어도 잊을 수가 없게 되는거임! 이걸 해결하기 위해서 필요한 게 reset gate 이다.
즉, 단어 간 long dependency를 기억하기 위해서 update gate 를 도입하고, previous state 를 더하는 방식으로 current state 를 업데이트하긴 했지만, 더 이상 필요한 정보가 아니면 더 이상 계속해서 가지고 가지 않기 위해서 특정 부분은 reset 해버리는 거임.
위 수식에서 초록색 밑줄 그어진 부분을 보자. Reset gate 역시 0~1 사이의 값을 갖고, current candidate 를 업데이트 할 때, previous hidden state 앞에 element wise 곱으로 더한다. 이 때, reset gate 의 값들이 0에 가까울 수록 해당하는 부분의 previous hidden state 의 값은 reset 된다. (근데 솔직히 reset gate 가 왜 candidate update 부분에 들어가는지, 저렇게 해서 불필요한 정보가 영원히 남지 않는다는게 직곽적으로 이해가 안 됨 ㅜㅜ 그럴거면, ht 를 update 할 때 들어가야 되는 거 아니야..?)
어쨌든, 교수님 말에 따르면 reset gate 는 candidate state 를 update 할 때, which part of hidden state 를 읽을지 (read) 정하는 부분이라고 한다.
ㅇㅇ
++++ 아무래도 이 부분 이해가 잘 안 됨..... readable ? writable ???
____________________________________
이 부분 다시 정리하기!
업데이트 게이트가 화살표에 미치는 영향! 만약에 업데이트 게이트가 0이라면, 현재 상태를 업데이트 함에 있어서 현재 입력과 관련한 부분은 0이 되어버리고, 결국 현재상태 = 이전상태가 된다. 이렇게 몇 번이 반복되다 보면 당연히 매우 이전의 상태에서 현재 상태까지 바로 화살표가 연결이 되겠지.
그리고 현재 상태는 결국 현재 상태 후보 + 이전 상태인데 현재 상태 후보는 결국 지금의 인풋과 이전 상태의 합으로 이루어진다. 이때 이전 상태에 어떤 부분을 잊어 버린 다음, 업데이트 게이트가 1에 가깝다면, 잊고싶은 부분을 잊어버리고 현재 상태를 업데이트 할 수 있겠지!
3. MT 평가 - BLEU 스코어
'NLP > CS224n' 카테고리의 다른 글
[CS224n] Lecture16. Dynamic Neural Networks for Question Answering (0) | 2019.07.30 |
---|---|
[CS224n] Lecture13. Convolutional Neural Networks (0) | 2019.07.22 |
[CS224n]Lecture10. MT with deep learning/ Attention mechanism (0) | 2019.05.29 |
[CS224n]Lecture 9. RNN for machine translation (0) | 2019.05.20 |
[CS224n] Lecture8. RNN and language model (0) | 2019.05.11 |
- Total
- Today
- Yesterday
- 뉴런
- 벡터
- Statistical Language Model
- Pre-trained LM
- 워터마킹
- neural network
- language model
- 뉴럴넷
- transformer
- Elmo
- 언어모델
- LM
- word embedding
- nlp
- weight vector
- GPTZero
- Bert
- neurone
- Neural Language Model
- Attention Mechanism
- cs224n
- Contextual Embedding
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |