티스토리 뷰

이번 수업은 마지막으로, 다시 한번 더, GRU 를 뽀개버리는 수업이었다. 


1. 왜 GRU 를 쓰지? 

우선 왜 GRU 가 등장했는지를 알기 위해서는 기존에 있던 RNN 의 단점을 알아야 한다. 


위의 이미지에 등장하는 수식은 을 구하는 방법으로, 즉 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 스코어 

블루 스코어는 논문 쓸 때 했던 내용이니까 정리는 생략! 



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함