[음악] 앞에서는 리커런트 뉴럴넷에 대해 살펴봤는데요, 이번 시간에는 리커런트 뉴럴넷의 발전된 변형인 LSTM, 롱 숏 텀 메모리. 그다음에 게이티드 리커런트 유닛이라고 부르는 GRU. 두 종류에 대해 살펴보겠습니다. 보통 앞에서 말씀드린 리커런트 뉴럴 네트워크 구조는 바닐라 RNN이라고 말하고요, 이 바닐라 RNN은 일반적으로 잘 사용되지는 않습니다. 그것이 갖고 있는 좀 치명적인 문제가 있기 때문이고요, 그래서 그걸 좀 변형시킨 LSTM, GRU가 일반적으로는 많이 사용되고 있습니다. 자, 아까 말씀드린 대로 앞에서 말씀드린 대로 리커런트 뉴럴 네트워크는 시퀀셜 데이터 처리에 적합하다고 말씀드렸어요. 시퀀셜 데이터라는 게 결국 x1 y1 첫 번째 트레이닝 데이터, 두 번째 트레이닝 데이터, 세 번째 트레이닝 데이터, 네 번째 트레이닝 데이터, 그다음 다섯 번째 트레이닝 데이터가 있는데. 우리가 어떤 게 가정이라고 그랬죠? 리커런트 뉴럴넷을 쓸 때? 바로 이 y5 값은 단지 x5가 결정하는 게 아니다. 뭐가 결정한다? 앞에 나왔던 이 모든 데이터. 이 데이터가 이런 순서로 나왔기 때문에 그 상황에서 x5가 들어와서... 그러니까 이게 given이죠? 이런 순서로 데이터가 있었기 때문에 y5라는 값이 나온 거지, y5가 단지 x5 이것 하나 때문에 되는 건 아니다, 라는 그런 가정. 여러분이 여러분이 그런 가정을 갖고 있다면, 그 가정의 비교적 잘 맞는 구조가 리커런트 뉴럴넷이다, 라고 말씀드렸어요. 왜냐하면 리커런트 뉴럴넷은 계속 하나의 레이어가 반복 사용되면서 x1의 중간 결과를 받아서 x2 이걸 하고요, 이것의 중간 결과를 받아서 다시 y3를 결정하고, 이 계산과정의 중간 결과를 받아서 y4를 결정을 결정하고, 다시 이것의 중간 결과를 받아서 이걸 하기 때문에, 앞에서 봤던 그림 생각나시죠? 그래서 여기 입출력을 싹 떼어버리고 나면 o5가 결국 누구한테 영향을 받는 구조죠? x5도 영향을 받고, x4, 3, 2... 그래서 x1까지 해서 우리가 원하는 대로 y5는 단지 x5에 의해서 결정되는 게 아니다. 앞의 값이 이러한 값들이 나왔기 때문에 y5가 나왔다, 라고 생각하시면 그것을 비교적 잘 모델링할 수 있는 구조가 RNN 구조가 되겠어요. 다시 말씀드리면 다시 말씀드리면 이것에서 이 RNN을 쓰시면 여러분이 갖고 있는 장점이 뭐냐. 바로 롱 텀 디펜던시를 잡아낼 수 있다는 겁니다. 즉 이것과 이것의 사이의 함수, 펑셔널 릴레이션을 모델링할 수 있어요. 그렇죠, 왜냐하면 패스가 이렇게 해서 이렇게 가는 패스가 존재하고 여기서 이렇게 가는 패스가 존재하고 이것이 이렇게 가는 패스... 다 있으니까 결국은 o5가 누구에 의해서 결정되는 거죠? x1, x2, x3, x4, x5 모두에 의해 결정되니까. 그래서 RNN을 사용할 때는 바로 이러한 롱 텀 디펜던시, 시퀀셜 데이터에서 롱 텀 디펜던시. 앞에 이게 나왔으니까 이게 나온 거야. 이것을 모델링하고 싶을 때 우리가 RNN을 쓰는데요, RNN은 좀 치명적인 문제가 있어요. 바로 롱 텀 디펜던시를 모델링하는 데, 그 롱- 텀이라고 하는 게, 많아야 한 10 스텝 정도밖엔 안 돼요. 그러니까 조금 의도와는 다른 거죠. 물론 10 스텝이 짧은 건 아닐 수도 있지만, 그 롱- 텀이면... 우리가 예를 들어 무한대, 무한대일 수는 없겠지만, 상당히 긴 100 스텝, 200 스텝, 300 스텝 되는 이런 롱 텀, 롱 시퀀스가 들어와도, 아, 처음에 이 값이었으니까 이렇게. 이런 식으로 해서 롱 텀 디펜던시를 잡아낼 수 있으면 좋겠는데 그게 10 스텝밖에 모델링을 못하는 문제가 있어요. 이게 왜 그러냐 생각해보면, 앞에서 말씀드렸던 배니싱 그레디언트랑 똑같은, 유사한 문제가 생깁니다. 결국 여기가 w, w, w 반복 사용되고 있죠? 반복 사용되고 있어요. 그래서 이 x1이 이 o5까지 갈 때 거치는 계산을 한번 살펴볼게요. 물론 이 u가 입력 웨이트 곱한 다음에 액티베이션 그다음에 여기 곱하고 액티베이션, 곱하고 액티베이션... 계속 액티베이션이 들어가기는 하는데, 액티베이션은 그냥 우리가 빼버리고 곱하기만 생각해보죠. 곱하기만. 그러면 어떻게 되냐면, w가 4번 곱해지고 u가 1번 곱해진 다음에 x를 곱해야만 뭐가 되죠? o5가 돼요. o5. 이거 다 곱하기입니다. 앞에서 봤던 유사한 문제가 생기죠. 무슨 문제죠? 이 w가 계속 곱해지고 있는데, 이 w가 예를 들어 1보다 작은 숫자... 물론 작은 숫자가 아니고 여기서는 매트릭스이기는 합니다만, 그냥 스칼라처럼 말을 할게요. w가 1보다 작은 숫자다, 라고 하면 그 순간 얘는 그냥 익스포넨셜 디케이가 되어버리죠? 1보다 크다, 라고 하면 어떻게 되죠? 예. 폭발해 버려요. 엄청나게 큰 숫자가 됩니다. 예를 들면 여기가 다 다른 값이라고 해보죠. w1, w2, w3, w4에 다 다른 값이 있다고 치면, w1 w2 w3 w4 u x해가지고 이렇게 되는 거랑 이거랑 비교해볼게요. 결국은 곱해지는 숫자의 개수는 같기는 하지만 여기서는 그래도 익스포넨셜 디케이가 일어나기는 해도 좀 덜 일어나요. 왜냐하면 w1 w2 w3 w4가 다 다른 값이니까. 그 네 값이 동시에 1보다 작은 값이 되어야만 익스포넨셜 디케이가 되지만, 네 값이 동시에 작은 값. 여기는 뭐죠? 똑같은 w가 계속 반복 곱셈되고 있기 때문에 그냥 w 하나가 1보다 작아지기만 하면 그냥 익스포넨셜 디케이가 일어나요. 그러니까 리커런트 뉴럴넷에서는 이런 익스포넨셜 디케이, 배니싱 그레디언트가 훨씬 더 심각하게 일어납니다. 풀리 커넥티드 뉴럴넷보다 훨씬 더 심각하게 일어나요. 왜냐하면 w가 1보다 작아지는 순간, 바로 익스포넨셜 디케이. 그런데 여기서는 w1 w2 w3 w4가 다 작아야만 익스포넨셜 디케이가 되니까, 훨씬 더 심각하게 일어나겠죠. 다시 말씀드리면, 이 시점, o 입장에서 보면, x1은 거의 보이지도 않아요. 익스포넨셜 디케이가 되어서 전달되기 때문에 o5 입장에서는 거의 x1은 보이지도 않고요, 그다음에 보이지도 않거나, 아니면 익스포넨셜리 폭발하면 어떻게 되죠? 여기 있는 x1 x2 이런 애들은 하나도 안 보이고요, 하나도 안 보이고 뭐만 보이게 되죠? 만약 익스포넨셜 익스플로전이 생기면? x1 x2 x3 x4 x5는 하나도 안 보이고 뭐만 보이게 되죠? x1만 보이는 거예요. 그러니까 완전 모 아니면 도인 거죠. x1이 안 보이거나 아니면 x1만 보이거나. 뭐 이런 식으로 생기니까, 이게 롱 텀 디펜던시, 저기 뭐 100번째 전, 50번째 전, 30번째 전에 있는 x가 이 자리 o까지 전달되기에는 상당히 난해한 구조라는 겁니다. 그러니까 사실은 RNN이 1989년인가 88년인가에 제안됩니다. 그런데도 안 사용됐다, 라고 말할 수는 없지만 그렇게 활발하게 사용된 구조는 아니었어요. 이런 문제를 갖고... 시퀀셜 데이터를 처리하는 구조로서는 좋지만 이러한 롱 텀 디펜던시를 모델링할 때의 한계가 있다는 거죠. 그래서 이걸 수정한 새로운 모델이 99년에 제안되는데요, 그게 뭐냐면 롱 숏 텀 메모리, LSTM이라고 부르는 겁니다. 그래서 보통 우리는 여러분 LSTM 많이 사용하셨을 거예요. 그래서 이건 말씀드리면 대략 한 1,000 스텝. 제가 볼 때는 1,000 스텝까지 전달된다는 게 조금 과장일 수도 있고요, 뭐 이런 경우도 있다라고 이해할 수도 있겠지만, 일반적으로 앞에서 말한 바닐라 RNN보다는 훨씬 더 긴, 롱 텀 디펜던시를 모델링할 수 있다. 그래서 경우에 따라서는 1,000 스텝까지도 모델링이 가능하다는 것을 기억하시면 되겠습니다. 구조가 좀 복잡하죠? 구조가 좀 복잡하고요, 구성하는 걸 보면 인풋 게이트, 포겟 게이트, 아웃풋 게이트, 셀프 리커런트 노드... 해가지고 굉장히 복잡한 구조가 나오는데요. 뒤에 가서 수식도 보면 더 정신 사납습니다. 여기 보시면 이게 그 수식인데요. 많이 정신 사납죠? 그래서 이 RNN 롱 숏 텀 메모리, LSTM을 이 수식 가지고 설명하면, 이해하기가 굉장히 어려워요. 왜냐하면 수식이 몇 줄입니까? 일곱 줄인데, 이렇게 복잡한 수식을... 그다음에 여기도 보면 상당히 복잡해 보이는데. 이걸 다 수식가지고 말씀드리기는 어렵고요. 이걸 하나하나씩 뜯어가면서, 간단한 것에서 복잡한 구조로 넘어가도록 하겠습니다. 자 먼저 여기에 있는 이 한 박스 있죠? 이 한 박스. 이 한 박스가 여기 있는 큰 박스 있죠? 큰 박스. 이 큰 박스가 여기 있는 한 박스랑 기능상 같아요. 기능상. 무슨 얘기냐면 이 박스를 들어내고... 사실 이 박스는 들어낼 것도 없어요. 여기 뭐만 들어가 있죠? 레이어 하나밖에 없는, 안 들어가 있는 굉장히 심플한 박스죠? 이 박스를 들어내고, 여기 지금 말씀드린 큰 박스를 이 안에 턱, 하고 집어넣으면 돼요. 그러니까 RNN의 이 부분과 이 큰 박스는 서로 호환 가능해서 이렇게... 이렇게 바꿔치기 해도 된다, 호환 가능한 박스다. 이렇게 생각하시면 되겠습니다. 그래서 이것이 왜 리커런트 뉴럴 네트워크의 확장판이라고 말하냐? 그 자리에 갖다 끼우면 되니까. 그래서 그렇게 부릅니다. 일단 이것의 기본 아이디어를 말씀드리면, 여기에 리커런트 뉴럴 네트워크가 있을 때, 여기 x가 들어갔을 때, 익스포넨셜 디케이가 되어서 도대체 여기에서는 x가 보이지도 않는다, 들리지도 않는다, 라는 게 있었죠? 그래서 이 사람들이 아이디어를 낸 게 뭐냐면요, 이쪽을 타고 가면 계속 곱하기, 곱하기, 곱하기,... 꼬르르륵 해서 사라지니까. 곱하기가 없는 경로를 하나 더 깔아두자. 쉽게 말하면 이걸 뭐라고 생각하면 돼요? 지방도. 지방도를 타고 소식이 전파되다 보면 언젠가 사라지겠죠? 뭐, 교통체증에... 뭐, 막 그런 일이 생겨서, 소식이 지방도를 타고 오다 보면 뭐, 야, 도대체 그 소식 갖고 오던 애는 어떻게 됐냐? 하면서 아예 걔가 사라지는, 소식이 사라지는 일이 생기는데... 그러지 말고 어떻게 하자? 고속도로를 하나 더 만들자. 우리나라도 보면, 세계가 다 그렇죠? 지방도 고속도로가 있어서 멀리 가는 애들은 다 어디로 싣죠? 예. 고속도로로 실어버리잖아요. 그래서 소식을 지방도와 고속도로 동시에 실어버려요. 일단 고속도로에 소식이 실리면, 슈앙 하고 그냥 앞으로 쫙 하고 앞으로 곧바로 전달이 되는. 거침이 없어요. 그냥 쭉 하고 나가버려요. 그러니까 여기서 이 x라는 게 지방도를 따라오면서 여기서 꼬로로로록 하고 사라졌다. 배니싱 그레디언트가 됐다. 물론 그레디언트된 게 배니싱은 아니지만. 그런 거랑 유사한 느낌인 거죠. 하더라도 이 x를 이쪽 고속도로에 한번 실어 놓으면 쓩 하고 그냥 곧바로 쭉 전달이 되는. 그러면 이것이 이제 고속도로와 지방도로가 서로 조금 인터랙션을 해야 되겠죠? 고속도로에 실려 있는 정보는 지방도를 통해서 또 지방으로도 전달이 되고. 그다음에 지방에서 생산된 정보는 다시 고속도로로 올라와서 또 쭉쭉 앞으로 전달이 되고, 그 과정이 다시 지방으로 내려가서 지방에 정보를 가공하는 데 사용이 되고... 뭐 이런 식으로 두 개의 정보는 서로가 섞어가면서 전달하면 되지 않을까? 라는 아이디어가 됩니다. 어디서 많이 본 구조 아녜요? 어디서 많이 본 구조 아녜요? 뭐죠? 레즈넷 구조예요, 레즈넷 구조. 사실 레즈넷이 2014년에 나왔어요. 레즈넷이 2014년에 나왔는데요, 사실 레즈넷과 매우 유사한 구조는 이미 1999년으로 기억합니다. LSTM. 1999년에 이미 제안이 됐어요. 그러니까 사람들이 이 깊이의 혁명, 저희가 CNN을 설명하면서 와, 깊이의 혁명! 이런 게 나타났어요 하면서 흥분하면서 말했는데, 사실은 인간들은, 연구자들은 이미 2000년 시작하기도 전부터 그 구조를 만들어서 쓰고 있었어요. 그런데 그게 그건지 미처 몰랐던 거죠. 물론 완전히 100% 똑같지는 않지만, 그 밑에 깔려 있는 아이디어는 매우 유사합니다. 구조도 매우 유사하고요. 사실 그게 그거라고 해도 틀리지 않을 정도로 유사해요. 그래서 레즈넷과 매우 유사한 구조를 들고 나와서 이 롱 텀 디펜던시 문제... 롱 텀 디펜던시 문제가 뭐예요? 딥하게 쌓아가는 문제잖아요? 레즈넷하고 똑같잖아요. 딥하게 쌓아가는 이 문제를 해결합니다. 자, 그것에 대해 계속 말씀드릴게요. 자 여기 박스가 여기 큰 박스와 같다고 했죠? 그래서 여기 ht-1이 여기서도 입력으로 ht-1로 들어가고, 여기 x가 들어가죠? 여기도 입력 x가 들어가고. 그다음에 출력 yt가 나오니까, 여기 출력도 yt가 나오게 되어 있습니다. 그다음에 어떻게 되냐면 이건 이제 지방도고요, 아까 말씀드린 대로 고속도로가 하나 또 있어요. 그래서 ct라는 건 고속도로입니다. 고속도로를 따라서 오는 정보. 그러니까 과거의 정보가 지방도로를 따라서 오고, 과거의 정보가 고속도로를 따라서 오고. 이 두 경로로 샥 하고 이렇게 따라옵니다. 자 그럼 어떻게 하냐면 먼저, 지방도를 따라서 오는 정보랑 오늘 현재 xt랑을 섞어서 가공을 해요. 이 그림에서 노란색과 빨간색, 오렌지색과 빨간색의 의미는 뭐냐면, 뉴럴넷 커넥션을 의미해요. 뉴럴넷. 무슨 말씀인지 알겠죠? 뉴럴넷. 뉴럴넷이라는 얘기는 얘들 사이가 풀리 커넥티드된 겁니다. 풀리 커넥티드되어 있고 웨이트가 있어서 계산이라는 건 입력 웨이트 입력 웨이트 입력 웨이트 입력 웨이트 써메이션 액티베이션해서 계산이 된. 노란색과 빨간색은 뉴럴넷 커넥션이에요. 그리고 여기 있는 애들은 다 벡터입니다. 무슨 말이냐. 여기도 벡터예요, 벡터. 이렇게 벡터. 히든 레이어죠? 히든 레이어가 있고. 여기도 다 벡터라고 그랬죠. 벡터. 레이어와 레이어 사이의 커넥션. 이것도 벡터라고 그랬죠? 예, 다 벡터입니다, 여기. 벡터가 있어서 벡터합끼리 풀리 커넥티드해서, 뉴럴넷 계산해서, 뉴럴넷 계산을 첫번째로 해요. 어 그것만 보면 뭐랑 똑같죠? 이거랑 똑같네. 여기 있는 h랑 여기 있는 g랑 계산적으로 보면 똑같네. 똑같아요. 왜냐하면 여기도 이렇게 해가지고 이렇게 되어 있고 여기도 이렇게 되어 있잖아요? 그래서 이 사이가 풀리 커넥티드되어 있다고 말씀드렸으니까 똑같죠. 이만큼은 계산적으로 똑같아요. 계산적으로 똑같아요. 계산적으로 똑같아요. 그래서 첫 번째. 여기와 여기를 계산해서 뉴럴넷으로 gt를 계산한다. 지방도의 정보랑 이 정보를 섞는다는 거죠. 또 들으시면서 왜 고속도로 정보에는 이걸 안 섞어요? 이런 질문을 하실 텐데 조금만 기다리세요. 그래서 h와 x를 섞고요, 그다음에 어떻게 하냐면 이것을 이렇게 해요. 여기 색깔이 노란색도 빨간색도 아니죠? 네, 이건 뭐냐면 그냥 그냥 전달. 전달. 전달. 예, 전달. 이 남색 같은 건 그냥 전달이에요, 전달. 여기도 뭐가 오죠? 벡터입니다. 여기 벡터가 있죠. 여기 뭐가 있죠? 벡터가 있어요, 벡터가 있어서, 두 벡터의 덧셈. 벡터의 덧셈이죠? 두 벡터에 덧셈을 해서 여기에 벡터 하나를 만들어내요. 다 레이어죠. 뉴럴넷 입장에서 보면 다 레이어가 되겠죠? 이렇게 만들어냅니다. 다시 말하면 지방도로를 따라서 온 정보랑 현재 입력을 한번 섞고, 그 섞인 정보와 고속도로를 따라서 온 정보를, 그 벡터를 덧셈을 해요. 그래서 이렇게 만들어... 또 보시면서, 왜 저기는 덧셈이야? 라고 생각하시면 예, 잠깐 참으세요. 일단 LSTM 구조 먼저 말씀드릴게요. 그래서 일단은 지방도를 따라서 온 정보를 현재 입력을 섞고, 그다음에 섞인 것과 고속도로를 따라서 온 정보를 더해서 이걸 만들어내고, 이건 쭉 해가지고 바로 다음으로 빠져나가요. 그러니까 잘 보시면 이쪽 패스만 보면, 곱셈이 있어요 없어요? 곱셈이 없잖아요. 일단 정보가 실리면 곱셈이 없으니까 퓽- 하고 그냥 앞으로 쭉 전달돼요. 덧셈 있네요? 덧셈. 뭐죠? 레즈넷. 예. 레즈넷. 레즈넷이잖아요. 레즈넷이 덧셈... 이게 히든 레이어, 히든 레이어잖아요. 그죠? 레이어를 건너뛰어서 덧셈이 이루어지는 구조잖아요. 이 히든 레이어를 건너뛰는 구조잖아요? 레즈넷 구조랑 굉장히 유사해요. 그래서 사람들이 뉴럴넷에 대해서 이미 많이 알고 있을지도 몰라요. 여러분이 알고 있는 그 지식이 뉴럴넷 현재의 어떤 문제에 대한 솔루션일지도 몰라요. 그래서 이렇게 만들어냅니다. 그래서 이렇게 돌아가는 것이 LSTM의 기본 구조예요. 즉 다시 말씀드리면 지방도를 따라서 오는 정보랑 현재 정보를 한번 섞는다. 섞은 거랑 과거 정보를 벡터 덧셈을 한다. 벡터 덧셈을 한 것을 쭉, ct+1로 빠져나가고. 그다음에 이걸 하이퍼탄젠트를 한다. 하이퍼탄젠트를 하는 이유는? c에 대한 넌리니어 트랜스폼을 한번 해주는 게 좋겠죠? 그래서 ct에 대한 넌리니어 트랜스폼을 한 번 해서, 이걸 이쪽으로 통과시켜서 그다음에 y로 빼내고 이걸 다시 다음으로 뽑아내는 구조예요. 그러니까 여기서 고속도로로 따라서 오는 정보랑 지방도로 따라서 오는 정보가 여기서 한번 합쳐지고, 합쳐진 정보가 고속도로로 빠져나가면서 다시 이렇게 해서 지방도로 또 빠져나가죠? 그러니까 두 개가 가면서 계속 만났다 헤어졌다 만났다 헤어졌다 하면서 계속 정보가 섞이면서, 이쪽 패스로는 퓽! 하고 미래로 지나가고, 이쪽 패스는 계속 정보를 계속 가공해서 추가하고 가공해서 추가하면서 진행하는 구조가 되겠습니다. 이게 LSTM의 기본 구조고요. 이걸 만든 사람이 좀 심심했나 봐요. 제가 심심했다고 표현해서 그분한테 죄송한데, 좀 심심했나 봐요. 무슨 얘기냐면, '야! 세상에 (이쪽을 더운 물, 이쪽을 찬 물이라고 말할 수 있겠죠?) 더운 물 찬 물을 그냥 반반 섞는 게 어디 있냐? 세상에.' 그렇죠. 여러분이 필요에 따라서는 더운 물을 열었다 찬 물을 잠갔다 해가면서 더운 물 찬물을 조절해가면서 조절하는데 여기서는 왜 지방도 고속도로 정보가 똑같이 반반씩 섞여? 이건 이상해. 그래서, 자, 우리도 이제부터 수도꼭지를 달자, 해서 수도꼭지를 달기 시작해요. 무슨 얘기냐면, 이렇게 해서 수도꼭지를 달아줘요. 수도꼭지도 지금 이렇게 보시면 노란색 빨간색이죠? 뉴럴넷이라는 거예요. 그러면 여기도 다 벡터라고 그랬죠? 도대체 수도꼭지가 뭐냐? 이 벡터는 뭐냐면요, 출력값이, 이 각 노드의 출력값이 0에서 1 사이의 리얼 넘버가 출력이 됩니다. 이 모든 셀 하나하나가. 셀 하나하나가 다 0에서 1 사이의 값을 출력해요. 그러니까 뉴럴넷이에요 뉴럴넷. 빨간색 노란색. 뉴럴넷인데 모든 애들이 0과 1 사이의 값을 출력합니다. 자 이거, 0과 1 사이의 값을 출력하니까 저 레이어는 액티베이션 펑션이 뭘까요? 0과 1 사이의 그걸 출력해야 되니까 액티베이션 펑션이...? 시그모이드여야 되겠죠? 예, 얘들은 시그모이드예요. 그러니까 다시 말씀드리면, 이 색 있죠? 이 색 무슨 색깔로 해야 되죠? 청록색? 어, 청록색 같은 거? 이것은 뉴럴넷 레이어인데, 출력 액티베이션 펑션이 뭐냐면, 시그모이드입니다. 그래야 (0, 1) 값이 나오고요, (0, 1) 값이 나오면 어떻게 하냐? 이게 벡터라고 그랬죠? 벡터라서 예를 들면 이렇게 나왔다고 쳐요. 그래서 여기에 예를 들면 1, 3, 2. 이렇게 값이 나왔어요. 그러면 여기서 그 수도꼭지니까 게이트라고 불러요, 여기서는. 게이트는 0에서 1 사이 값이 있으니까, 이것도 벡터니까, 이 벡터도 이렇게 차원이 같습니다. 여기는 0.9, 여기는 0.5, 여기는 0.2. 이렇게 되어 있으면... 이게 뭐냐면요, 엘레멘트 와이즈 곱셈이에요. 엘레멘트끼리 곱셈을 해요. 곱셈하면 어떻게 되죠? 이렇게 하면, 여기는 0.9, 1.5, 0.4 값이 나오겠죠? 네. 이렇게 스케일링된 값이 이쪽으로. 이 벡터. 이리로 넘어가는 벡터가, 바로 이런 벡터. 이 벡터가 이리로 넘어가게 되어 있습니다. 수도꼭지는 뭐죠? 게이트라고 불러요. 그래서 이 ft라는 건 결국 뭐냐면, 이 h와 x를 보고서 아, 이번에는 고속도로에서 온 정보를 얼마나 통과시킬까를 결정해주는 수도꼭지가 되겠고요, 이 수도꼭지를 하나 또 붙입니다. 왜냐하면 더운 물 찬 물 수도꼭지가 각각 있어야 되니까. 그래서 이쪽에 또 입력 쪽에도 수도꼭지를 하나 만들어요. 이 색깔은 다 수도꼭지 색깔이에요. 그래서 h와 x를 가지고 또 똑같이 수도꼭지를 만들어서 여기서 나가는 정보에 또 곱하기를 합니다. 그러니까 이쪽은 더운 물 수도꼭지, 이쪽은 찬 물 수도꼭지가 되겠죠? 수도꼭지를 잘 조절해서 더운 물과 찬 물을 조절해서 그것이 더해진 다음 똑같이. 이렇게 해서 미래로 흘러가요. 그런데 이 아저씨가 수도꼭지를 붙이다가 재미가 들었나 봐요. 야, 만드는 김에 하나 더 만들어! 해가지고 이렇게 해서 여기도 또 갖다 붙입니다. 이건 출력 수도꼭지인데요. 그러니까 여기서는 더운 물 찬 물을 잘 섞고, 여기서는 최종적으로 물이 콸콸 잘 쏟아져 나가는 것을... 그러니까 여기는 온도 조절기죠, 쉽게 말하면. 여기서 온도 조절을 하고요, 여기는 출력 양을 조절하는 거죠. 출력을 많이 보낼까 조금 낼까, 이렇게 조절해 가지고. 그것이 이게 미래로 혹은 현재 y로 흘러가도록 만들어 놓은 것이 롱 숏 텀 메모리가 되겠습니다. 이 수도꼭지 f, i, o라고 불리는 수도꼭지가 있어서 그렇지, 저것만 빼면 거의 레즈넷 구조랑 똑같은 구조다, 라는 거고, 레즈넷 구조가 뉴럴넷을 딥하게 만들어주듯이, 얘도 롱 디펜던시를 (결국 딥한 구조죠?) 해결하는 데 많이 사용된다라는 겁니다. 자, 그래서 이 구조에 대해 많은 분들이 약간 궁금해하는 것 같아요. 굳이 저런 구조가 나와야 되는 이유가 뭡니까? 궁금해하실 것 같아요. 수학적으로 저렇게 하면 진짜 롱 텀 디펜던시가 된다는 게 보장이 되나요? 왜 꼭 저래야 되죠? 예를 들어 고속도로에서 따라오는 건 왜 이렇게 해야 되죠? 왜 이래야 되죠? 라고 생각하실 텐데요, 사실, 아까도 말씀드렸습니다만, 이 구조에 대해서는 수학적 증거라든지 수학적인 증명이라든지, 이렇게 하는 게 진짜 좋다든지, 혹은 그런 롱 텀 디펜던시를 잡아내기 위해서 이 구조가 유니크하고 좋다라는 건 아무것도 없어요. 그냥 일종의, 사람들의 휴리스틱이죠. 사람들이 휴리스틱으로 아... 이렇게 되고 이렇게 되면 되지 않을까? 이런 이유로 안 됐으니까, 이렇게 하면 될 것 같은데. 한번 만들어볼까? 하고 만든 거고요, 만들어서 해봤더니, 돼요! 랑 똑같은 거예요. 야, 내가 이렇게 해서 만들었더니 된다야. 너도 한번 써봐. 어? 제가 써도 되는데요? 아, 그래? 이게 진짜 효과가 있나 보다, 하면서 이 사람 저 사람이 쓰면서 일종의 스탠다드가 된 거지, 여러분이 이 구조가 마음에 안 들면 얼마든지 뜯어고쳐도 문제없어요. 변형시켜도 아무 문제 없습니다. 잘되기만 한다면. 그러면 사람들이 바로 여러분의 구조를 사용하기 시작할 겁니다. 그래서, 이것에 대해 너무 막 그렇게, 이게 진짜 맞냐? 라는 궁금증은, 가지셔도 좋은데, 뭐, 일단 남들이 써서 되더라, 정도로 이해해주시고. 그다음, 왜 이런 구조를 만들어내게 되었는지에 대한 휴리스틱이 있잖아요. 그 휴리스틱을 잘 이해하시는 건 필요해요. 왜냐하면 결국 그런 휴리스틱을 기반으로 해서 많은 뉴럴넷 구조들이 계속 나오고 있거든요. 그래서 이런 구조를 왜 만들어냈는지 그 휴리스틱도 기억하시면 좋을 것 같습니다. 자, 조금 앞으로 가서 아까 봤던 수식 있었잖아요? 그 수식을 한번 보도록 하죠. 이 수식을 보면 이제는 좀 이해되실 거예요. 여기 보시면 i, f, o가 뭐라고 그랬죠? 수도꼭지. 게이트라고 그랬죠? 그래서 여기서 i는 인풋 게이트. f는 포겟 게이트, o는 아웃풋 게이트라고 부르고요, 수도꼭지를 게이트라고 불러요. 게이트라고 부르다 보니까, 여기서는 액티베이션 펑션이 시그마로 되어 있죠? 이 시그마가 의미하는 게 뭐냐면 시그모이드예요. 시그모이드를 의미합니다. 즉 수도꼭지는 0과 1 사이 값을 내야 되니까, 액티베이션 펑션으로 시그모이드를 사용했다. 뭐 이건 보시면 될 거예요, 그죠? 그다음에 하이퍼탄젠트 g가 여기 안에서 이게 레이어니까, 이 레이어 내부에 액티베이션 펑션이 있어야 되겠죠? 이 레이어 액티베이션 펑션은 하이퍼탄젠트를 사용했네요. 이렇게 해서 g라는 걸 만들어내고요, 그다음에 이 c라는 건 어떻게 되죠? 말씀드린 대로, 이쪽 c에서 오는 것에다가 수도꼭지를 곱하고, 여기서 온 g에다가 수도꼭지를 곱하고. 그렇죠? 그렇게 한 다음에, 그것이 h로 넘어가서, 이렇게 해서 h에다가 하이퍼탄젠트를 통과한 다음에, cp 하이퍼탄젠트를 통과한 다음에, o를 곱해서 최종적으로 y를 만들어낸다고 되어 있는 수식이 있죠? 그래서 이제부터 이 그림을 한번 이해하시고 수식을 보니까, 수식을 이해하시는 게 훨씬 더 편하시죠? 예. 그래서 이렇게 LSTM을 이해하시면 되겠습니다. 다시 앞으로 나가도록 할게요. 네. 여기군요. 자, 이렇게 만들고 나면 어떤 장점이 있냐면, 그레디언트가 똑같이 그레디언트 배니싱이 없단 얘기예요. 이쪽을 통해서 쭉 흘러가는 그레디언트는 방해를... 물론 여기 곱하기가 하나 있기는 합니다만, 크게 방해를 받지 않고 과거를 쭉하고 흘러가요. 그러니까 딥한 곳에서까지도 계산이 된다는 얘기고요. 그다음에 그걸, 예를 들어 이렇게 세 개를 붙여놓고 보면, 과거에서 오는 정보, 지방 정보가 계속 가면서, 쭉- 가면서, 여기서 한 번 만났다가, 만났다가... 이런 식으로 계속 진행되고 있죠? 네. 물론, 그때도 말씀드렸습니다만, 정보가 어-디-로-갈-까-요 해서 하나를 정해가지고 '나는 지방도로 갈래.' 하고 지방도로 가는 거 아닙니다. 정보는 동시에 지방도와 고속도로로 다 이렇게. 여기서 탁 만났다는 얘기는 뭐냐면, 똑같은 정보가 이쪽으로도 흘러가고, 아, 잘못 그렸군요. 좀더 정확히 그리면, 이쪽에 정보가 이렇게 흘러가고요, 여기서는 이렇게 이렇게 이렇게 이렇게 그리는 게 더 맞겠군요. 그래서 이 만나는 지점에서 만나는 지점에서 계속 이렇게 이렇게 만나면서 흘러간다. 그래서 정보가 여기에서 만나면서 서로 이렇게 이렇게 흘러가면서 두 정보가 계속 섞이고요, 그다음에 여기에 실린 정보는 큰 방해를 받지 않고 미래로 흘러가고, 마찬가지로 그레디언트도 이렇게 해서, 거꾸로 쭉 하고 흘러갑니다. 언인터럽티드된 그레디언트 플로우가 여기서 생기게 되고, 이 플로우가 흘러다니면서 앞에서 말씀드린 대로 롱 텀 디펜던시를 학습하고 계산해낼 수 있는 능력을 갖게 된다. 앞에서 말씀드린 레즈넷 구조와 매우 유사한 구조를 갖게 된다고 생각하시면 되겠습니다. 이렇게 해서 LSTM 구조를 말씀드렸고, 그다음에 LSTM 구조와 매우 유사한 또 하나의 구조가 있는데, GRU가 있습니다. GRU는 보시면 조금 복잡해 보이지만, 잘 보시면 수도꼭지가 몇 개 있죠? 2개가 있죠. 그래서 쉽게 말하면 유사품이에요. 앞서 LSTM이 장사가 잘되니까, '야, 우리도 비슷한 거 하나 만들자.' 그런데 원가절감을 좀 해야 되겠죠? 앞의 사람들은 수도꼭지 세 개 썼는데. '우리 수도꼭지 2개만 써가지고 한번 만들어보자' 해서 만든 것 정도로만 이해하셔도 될 것 같습니다. 그래서 보시면 수식도 훨씬 더 간단하고 구조도 훨씬 더 간단하죠? 그래서 GRU나 LSTM이나 거의 비슷한 거다라고 생각하시면 되겠고요. 그래서 누구는 뭐 LSTM이 잘되네, 누구는 GRU가 잘되네, 해서 두 개의 차이를 명확하게 말하기는 어려운 것 같습니다. 그런데 습관적으로는 LSTM을 더 많이 쓰는 것 같기는 해요. 이것도 간단히 말씀드리면 이렇게 됩니다. 먼저, 여기는 과거에서 오는 정보가, 지방도/고속도로가 없어요. 그냥 이 과거에서 오는 정보가 하나밖에 없어요. ht-1 하나밖에 없어요. 그러면 그걸 받아서 이렇게 해서 계산해서 빠져나갑니다. 보시면 이거랑 완전히 똑같은 구조죠? 똑같은 구조를 그림만 달리 그린 거예요. 이렇게 해놓고서 여기에다가 이 패스를 추가해요. 이 패스가 무슨 패스가 되죠? 진짜 레즈넷 구조죠? 진짜 레즈넷 구조잖아요. 여기 히든 레이어, 히든 레이어가 있는데, 레이어를 통과하지 않고 레이어 하나를 건너뛴 거잖아요, 그죠? 레이어 하나를 건너뛰어서 가는, 진짜 레즈넷 구조를 여기 들어가고요, 여기에다 수도꼭지를 하나씩 하나씩 갖다붙여서 만든 구조입니다. 그다음에 여기는 수도꼭지를 만들어서 여기서 z 값이 나오면 zt 값이 나오면 이쪽은 zt를 곱해주고 이쪽은 1-zt를 곱해줘요. 다시 말하면 더운 물 찬 물을 하는데, 우리가 수도꼭지 두 개를 다 달아? 하나를 놓고서, 이리로 넘기면 더운 물이 많아지고 이리로 넘기면 찬 물이 많아지고. 이렇게 조절할 수 있잖아요? 이렇게. 그죠? 더운 물 찬 물을 이렇게 조절할 수 있잖아요? 수도꼭지 두 개 놓는 게 아니고. 그런 식으로 z 하나를 가지고 1-z, 그냥 z 해서 더운 물 찬 물로 조절을 해서 이걸 조정하는 구조라고 생각하시면 되겠습니다. 그러니까 훨씬 더 재미있는 구조가 되겠죠? 자 이렇게 해서 LSTM과 GRU를 살펴봤고요. 그다음에 바닐라 RNN은 롱 텀 디펜던시를 잡아내는 데 한계가 있어서 현실적으로 잘 사용되지는 않는다. 그것을 확장 변형한 LSTM, GRU가 훨씬 더 많이 사용되고, 이건 레지듀얼 링크를 갖고 있는 것과 매우 유사한 구조면서, 따라서 롱 텀 디펜던시를 잡아내는 데 아주 잘 사용이 된다, 라고 기억하시면 되겠습니다. [음악]