RNN을 공부하다 생긴 궁금증을 풀어보자.
"Why are the weights of RNN/LSTM networks shared across training time? ", RNN, LSTM 네트웍에서 training time 내에 가중치를 공유한다는 것은 무슨 뜻일까?
를 알아보자.
글에는 다음 내용을 참고했다. (https://medium.com/@tarek.tm/understanding-the-concept-of-weight-sharing-in-cnn-and-rnn-f48bd3f76d35)
Stackoverflow 의 답변을 참고하니, 다음과 같은 답변을 찾을 수 있었다.
parameter sharing 의 main purpose 는 모델이 학습해야할 parameter 의 감소이다. 각 스텝(시점)마다 공유되지 않은 다른 가중치를 사용한다면 (첫 계산의 output 이 다음 계산의 input) 으로 들어간다 하더라도 feed forward network 와 별반 다를 것이 없을 것이다; 예컨대 만약 time steps (NLP로 따지면 단어의 수인데) 20개라면, 20개의 다른 학습가능한 모델을 가진다는 것이다.
예를 들어 'Yesterday I ate an apple' 이란 문장과 'I ate an apple yesterday' 라는 문장을 학습한다고 해보자. 시점마다 파라미터를 공유하지 않고 input 에 대해서만 가중치가 반응한다면 5단어를 처리하는데에도 모델은 5번 초기화할 것이며, 학습 또한 5번 진행되어야 할 것이다. 따라서 학습도 올바르게 되지 못할 것이다. (위 두 문장의 결과가 매우 다를 수도 있다는 것.) 그러나 파라미터를 공유한다면 두 문장의 결과는 비슷할 것이다. (output 은 매 단계에서 낼 순 있지만 시점에 걸쳐 가중치를 공유하고 있기에 한 번만 파라미터 업데이트를 하면 된다.)
따라서 위의 궁금증들이 해결된다.
그러나 이런 paramter sharing 에도 drawback 이 있는데, 'milk chocolate' 과 chocolate milk' 의 경우 표현이 매우 달라야하지만 2단어를 다 보고 역전파한다면 비슷한 의미로 표현될 것이다. (가중치가 공유될 경우) 따라서 순서가 바뀌었을 때 의미가 달라지려면 위와 같은 경우에는 단어 하나마다 업데이트를 해주는 것이 필요할 수도.. 있다.
그러나 이런 단점을 조금 무시하더라도 이렇게 feed forward 를 여러개 붙인 것같이 학습하는 것보다 RNN,LSTM의 특징을 잘 살리는 것이 더 좋았기에 paramter sharing 을 한다는 점을 알아두자!
정리하면, parameter sharing 은 LSTM/RNN 그 자체이다!