이태우

고려대학교 음성정보처리연구실 박사과정

모두의연구소 딥러닝연구실 DeepLAB 연구원



Recurrent Neural Network(RNN)의 vanishing gradient 문제를 해결하기 위해 고안된 LSTM (Long Short Term Memory) 에 대해서 너무도 잘 정리된 Colah의 블로그 글을 모두의연구소 DeepLAB 이태우 연구원님이 번역한 자료 공유합니다.

원문 링크 : http://colah.github.io/posts/2015-08-Understanding-LSTMs/

번역원문 링크 : https://docs.google.com/document/d/1M25vrmJHp21lK-C8Xhg42zFzXke9_NrvhHBqH2qISfY/edit#



모두의연구소 페이지와 모두의연구소 커뮤니티에 오시면 더 많은 정보를 만나보실 수 있습니다.

모두의연구소 페이스북 페이지 : https://www.facebook.com/lab4all

모두의연구소 커뮤니티 그룹 : https://www.facebook.com/groups/modulabs




엘에스티엠 네트워크 이해하기

2015년 8월 27일에 게시됨

2015년 9월 27일에 한국어로 옮겨짐


원문: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

옮긴이: 이태우 (twlee@speech.korea.ac.kr), 모두의연구소 딥러닝연구실 DeepLAB


순환 신경망 (Recurrent Neural Networks)

사람은 생각을 매초 처음부터 다시 시작하지 않습니다. 우리가 이 글을 읽을 때도, 우리는 각 단어를 이전 단어들에 기반을 두어 이해합니다. 우리는 기존의 모든 것을 버리고 처음부터 생각을 다시 시작하지 않습니다. 우리의 생각에는 지속성이 있습니다.

전통적 신경망은 이런 일을 할 수 없습니다. 그것이 전통적 신경망의 주요 단점인 것 같습니다. 이를테면 영화 속의 매 장면에서 어떤 종류의 사건이 일어나고 있는지 분류하고 싶다고 상상해 보십시오. 전통적 신경망들이 어떻게 이전 장면들을 사용하여 이후 장면들을 추론할지는 불분명합니다.

순환 신경망은 이 주제를 다룹니다. 순환 신경망은 그 내부에 루프를 가진 네트워크입니다. 그 루프는 정보가 지속되는 것을 돕습니다.

루프를 가진 순환 신경망.

위 다이어그램에서, 신경망 A는 입력 xt를 보고 값 ht를 출력합니다. 루프는 정보가 네트워크의 한 단계에서 다음 단계로 전달되도록 합니다.

이 루프들은 순환 신경망을 다소 신비로워 보이게 만듭니다. 그러나 조금 더 생각해보면, 그 루프들은 보통 신경망들과 크게 다르지 않습니다. 순환 신경망은 동일한 네트워크를 여러 개 복사한 것으로 생각될 수 있습니다. 각 네트워크는 자신의 후임자에게 메시지를 전달합니다. 만약 우리가 그 루프를 펼치면 어떻게 될지 생각해 보십시오.

An unrolled recurrent neural network.

펼쳐진 순환 신경망.

이 사슬 같은 특성은 순환 신경망이 시퀀스 그리고 리스트와 밀접하게 연관되었음을 보여줍니다. 이것은 그런 데이터를 사용하기 위한 신경망의 자연스러운 구조입니다.

그리고 이 사슬 같은 구조는 분명히 사용됩니다! 지난 몇 년 동안, 순환 신경망을 다양한 문제들에 적용해 놀라운 성공이 거두어졌습니다. 음성 인식, 언어 모델, 번역, 영상에 주석 달기 등 그 사례는 매우 많습니다. 저는 한 사람이 순환 신경망으로 얻은 놀라운 업적에 대한 글을 소개하고자 합니다. 그 글은 순환 신경망의 놀라운 효과성이라는 안드레 카파시(Andrej Karpathy)의 훌륭한 블로그 글입니다. 그 글은 정말 놀랍습니다.

이 성공들에서 가장 중요한 요소는 엘에스티엠(LSTM)의 사용입니다. 엘에스티엠은 매우 특별한 종류의 순환 신경망입니다. 엘에스티엠은 많은 과제에 대해 잘 동작합니다. 그리고 기존 방식보다 훨씬 더 좋습니다. 순환 신경망에 기반을 둔 거의 모든 성공적 결과들이 엘에스티엠을 사용합니다.

장기 의존성 문제 (The Problem of Long-Term Dependencies)

순환 신경망의 매력 중 하나는 그것이 이전 정보를 현재 작업으로 연결하게 할 수 있다는 점입니다. 이를테면 이전 비디오 프레임들이 현재 프레임을 이해하는 데 영향을 미칠 수도 있습니다. 만약 순환 신경망이 실제로 이것을 할 수 있다면, 정말 유용할 것입니다. 실제로 순환 신경망이 이것을 할 수 있을까요? 그것은 때에 따라 다릅니다.

때때로, 우리는 현재 과제를 수행하기 위해 최근 정보를 자세히 볼 필요가 있습니다. 예를 들어, 이전 단어들의 정보를 사용하여 다음 단어를 예측하는 언어 모델이 그렇습니다. 만약 우리가 “구름이 하늘에 떠 있다”라는 문장에서 ‘하늘’이라는 단어를 예측하고 있다면, 더 이상의 문맥은 필요 없습니다. 다음 단어가 하늘일 것이 꽤 분명하기 때문입니다. (원문은 ‘the clouds are in the sky’입니다. 이 문장에서 ‘the clouds are in the’까지만 보더라도 ‘sky’라는 마지막 단어를 쉽게 유추할 수 있다는 뜻입니다. 역자 주) 적절한 정보와 그 정보가 필요한 곳의 거리가 가까운 경우, 순환 신경망은 과거 정보를 사용하여 학습할 수 있습니다.


그러나 문맥이 더 필요한 경우도 있습니다. “나는 프랑스에서 자랐습니다… 나는 유창한 프랑스어를 합니다.” 라는 문장에서 ‘프랑스어’라는 단어를 예측하려 한다고 생각해 봅시다. 최근 정보는 아마도 다음 단어가 어느 나라 말일 지를 암시할 것입니다. 그러나 만약 그것이 어떤 언어인지까지 좁히길 원하면, 더 앞쪽에 있는 프랑스라는 문맥이 필요합니다. 이는 관련 정보와 그 정보를 사용하는 지점 사이 거리가 매우 멀어질 수 있을 때만 가능합니다.

불행히도, 그 거리가 멀어질수록, 순환 신경망은 그 정보의 연결 방법을 배울 수 없게 됩니다.


Neural networks struggle with long term dependencies.


이론적으로, 순환 신경망은 그런 “장기 의존성”을 다룰 수 있습니다. 사람은 매개변수들을 신중히 골라 순환 신경망이 이런 쉬운 문제들을 풀도록 만들 수 있을 것입니다. 그러나 슬프게도 실제로는 순환 신경망은 그것을 배울 수 없는 것 같습니다. 그 문제는 Hochreiter (1991) [독일인]Bengio, 외 (1994)에 의해 깊이 연구되었습니다. 그들은 왜 그것이 어려울 수도 있는지 다소 근본적 이유를 발견하였습니다.

고맙게도, 엘에스티엠에는 이런 문제가 없습니다!

엘에스티엠 네트워크

장단기 기억 네트워크(Long Short Term Memory networks)는 보통 엘에스티엠으로 불립니다. 엘에스티엠은 장기 의존성을 학습을 수 있는 특별한 종류의 순환 신경망입니다. 엘에스티엠은 Hochreiter와 Schmidhuber (1997)에 의해 소개되었습니다. 그리고 이후 연구에서 많은 사람에 의해 다듬어지고 널리 알려졌습니다.1 엘에스티엠은 매우 다양한 종류의 문제들에 대해 정말 잘 동작합니다. 그리고 현재 엘에스티엠은 널리 사용되고 있습니다.

엘에스티엠은 장기 의존성 문제를 피하고자 설계되었습니다. 오랫동안 정보를 기억하는 것이 사실상 엘에스티엠의 기본 동작입니다. 무언가 배우려고 애쓰기보다는요.

모든 순환 신경망은 사슬 형태의 반복되는 신경망 모듈들을 가집니다. 표준 순환 신경망에서, 이 반복되는 모듈은 한 개의 tanh 층 같은 매우 간단한 구조를 가질 것입니다.


표준 순환 신경망에서 반복되는 모듈 하나는 하나의 층만을 포함합니다.

엘에스티엠 또한 사슬 같은 구조를 가집니다. 그러나 반복되는 모듈은 다른 구조를 가집니다. 이 모듈에는 하나의 신경망 층 대신, 매우 특별한 방식으로 상호작용하는 네 개의 층이 있습니다.


A LSTM neural network.

엘에스티엠에서 반복되는 모듈 하나는 네 개의 상호작용하는 층을 포함합니다.

무슨 일이 일어나는지에 대한 자세한 부분에 대해서는 아직 걱정하지 마십시오. 우리는 뒤에서 엘에스티엠 다이어그램을 단계별로 차례차례 살펴볼 것입니다. 지금은 단지 우리가 사용하게 될 표기들에 익숙해지고자 합니다.

신경망 층, 요소별 연산, 벡터 전달, 연관, 복사.


위 다이어그램에서, 노란색 상자는 학습된 신경망 층입니다. 분홍색 원은 벡터 덧셈 같은 요소별 연산을 나타냅니다. 각 화살표는 한 노드 출력에서 다른 노드의 입력으로 전체 벡터 하나를 전달합니다. 합쳐지는 화살표들은 연관(concatenate)을 표시합니다. 갈라지는 화살표는 그 내용이 복사되어 다른 곳으로 보내짐을 표시합니다.

엘에스티엠 뒤의 핵심 아이디어

엘에스티엠의 핵심은 셀 상태(cell state), 즉, 다이어그램의 위쪽을 통과해 지나는 수평선입니다.

셀 상태는 일종의 컨베이어 벨트입니다. 셀 상태는 약간의 가벼운 선형 상호작용만 일으키며 전체 수평선을 그냥 똑바로 지나갑니다. 정보는 바뀌지 않은 채 그냥 흘러가기 쉽습니다.


엘에스티엠은 셀 상태에 정보를 더하거나 지울 수 있습니다. 게이트라 불리는 구조들이 이 과정을 신중히 조절합니다.

게이트는 정보가 선택적으로 지나가게 합니다. 게이트는 시그모이드 신경망 층과 요소별 곱셈 연산으로 구성됩니다.



시그모이드 층은 0에서 1 사이 숫자를 출력합니다. 이 출력 값은 얼마나 많은 요소가 통과되어야 하는지를 나타냅니다. 예를 들어, 값 0은 “아무것도 통과 못 함”을, 값 1은 “모두 통과함”을 의미합니다.

엘에스티엠은 셀 상태를 보호 및 제어하기 위한 세 종류의 게이트를 가집니다.

엘에스티엠을 단계별로 차례차례 살펴보기

엘에스티엠에서 첫 단계는 셀 상태에서 어떤 정보를 버릴지 결정하는 것입니다. 이는 “잊기(forget) 게이트 층”이라 불리는 한 시그모이드 층에 의해 결정됩니다. 이 층은 ht-1xt를 보고 셀 상태 Ct-1에서의 각 숫자를 위한 0과 1 사이 숫자를 출력합니다. 1은 “이것을 완전히 유지함”을, 0은 “이것을 완전히 제거함”을 나타냅니다.

이전 단어들에 기반을 두고 다음 단어를 예측하는 우리의 언어 모델 예제를 다시 보겠습니다. 그런 문제에서, 셀 상태는 정확한 대명사가 사용될 수 있도록 현재 주어의 성별을 포함할 수도 있습니다. 우리가 새 주어를 볼 때, 우리는 이전 주어의 성별은 잊기를 원합니다.

다음 단계에서는 어떤 새로운 정보를 셀 상태에 저장할지 결정합니다. 이 단계는 두 부분으로 구성됩니다. 첫째, “입력(input) 게이트 층”이라 불리는 한 시그모이드 층은 우리가 어떤 값들을 갱신할지 결정합니다. 다음, tanh 층은 셀 상태에 더해질 수 있는 새로운 후보 값들의 벡터 Ct를 만듭니다. 다음 단계에서, 우리는 셀 상태를 갱신할 값을 만들기 위해 이 둘을 합칠 것입니다.

우리의 언어 모델 예제에서, 우리가 잊어가고 있는 이전 것을 대체하기 위해, 우리는 새 주어의 성별을 셀 상태에 더하고 싶을 수도 있습니다.

이제 낡은 셀 상태 Ct-1을 새 셀 상태 Ct로 갱신할 시간입니다. 이전 단계에서 우리는 이미 무엇을 할지 결정하였습니다. 우리가 할 일은 단지 그 결정된 일을 하는 것뿐입니다.

이전 상태 Ct-1ft를 곱합니다. ft는 우리가 전에 계산한 잊기 게이트 출력입니다. ft는 우리가 잊기로 결정한 것들을 잊게 만드는 역할을 합니다. 그런 다음 itCt를 더합니다. 이것이 각 상태 값을 우리가 얼만큼 갱신할지 결정한 값으로 크기 변경한(scaled) 새 후보 값들입니다.

언어 모델 예제의 경우에는, 이곳이 바로 이전 주어의 성별 정보를 지우고 새 정보를 더한 곳입니다. 우리가 이전 단계들에서 결정한 대로요.

마지막으로, 무엇을 출력할지 결정합니다. 이 출력은 셀 상태에 기반을 두지만 여과된(filtered) 버전입니다. 우선, 시그모이드 층을 동작시킵니다. 그 시그모이드 층은 셀 상태에서 어떤 부분들을 출력할지 결정합니다. 그런 다음, 값이 -1과 1 사이 값을 갖도록 셀 상태를 tanh에 넣습니다. 그리고 오직 우리가 결정한 부분만 출력하도록, tanh 출력을 다시 시그모이드 게이트 출력과 곱합니다.

언어 모델 예제에서, 그것은 단지 한 주어만 보았기 때문에, 그 주어가 다음에 다시 나올 때를 대비해, 한 동사에만 알맞는 정보를 출력하려 할지도 모릅니다. 예를 들어, 만약 그 주어가 다음에 다시 나오면 동사가 어떤 형태로 활용되어야 하는지 알게 하도록, 그것은 그 주어가 단수인지 복수인지 출력할 수도 있습니다.


엘에스티엠의 변형들

제가 지금까지 설명한 것은 꽤 평범한 엘에스티엠이었습니다. 그러나 모든 엘에스티엠들이 위와 같진 않습니다. 사실, 엘에스티엠을 포함하는 거의 모든 논문은 살짝 다른 버전을 사용하는 것으로 보입니다. 비록 그 차이는 적지만, 그것 중 몇 개는 언급할 가치가 있습니다.

Gers와 Schmidhuber (2000)에 의해 소개된 한 인기 있는 엘에스티엠 변형은 “엿보기 구멍(peephole) 연결”을 더하는 것입니다. 이 연결은 게이트 층들이 셀 상태를 자세히 볼 수 있게 합니다.

위 다이어그램은 엿보기 구멍들을 모든 게이트에 추가합니다, 그러나 많은 논문에서는 약간의 엿보기 구멍들만 있거나 아예 없을 수도 있습니다.

또 다른 변형은 잊기 게이트와 입력 게이트의 결합입니다. 어떤 것을 잊을지 그리고 어떤 새로운 정보를 더할지를 따로 결정하는 대신, 그 결정들은 함께 내려집니다. 우리는 오직 무언가를 입력하려고 할 때만 잊습니다. 그리고 우리는 오직 더 오래된 어떤 것을 잊을 때만 새 값들을 상태에 입력합니다.


약간 더 극적인 엘에스티엠의 변형은 Cho, 외 (2014)에 의해 소개된 게이트된 순환 유닛(gated recurrent unit) 또는 지알유(GRU)입니다. 지알유는 잊기와 입력 게이트들을 하나의 단일 “갱신(update) 게이트”로 합칩니다. 그것은 또한 셀 상태와 숨겨진 상태(hidden state)를 합칩니다. 그리고 약간 다른 변화들을 만듭니다. 결과 모델은 표준 엘에스티엠 모델들보다 더 단순합니다. 지알유는 점점 더 인기를 얻고 있습니다.

A gated recurrent unit neural network.

이는 단지 주목할만한 엘에스티엠 변형 중 일부일 뿐입니다. Yao, 외 (2015)가 소개한 깊이 게이트된 순환 신경망(depth gated RNNs) 같은 다른 많은 것도 있습니다. 또한, Koutnik, 외 (2014)에 의해 제안된 시계 장치 순환 네트워크(clockwork RNNs) 같은 장기 의존성에 도전하는 완전히 다른 접근도 있습니다.

어떤 변형이 가장 좋을까요? 그 차이가 중요할까요? Greff, 외 (2015)는 인기 있는 변형들에 대해 멋진 비교를 하였습니다. 그 결과 그것들이 모두 대략 같다는 사실을 발견하였습니다. Jozefowicz, 외 (2015)는 10,000개 이상의 순환 신경망 구조들을 시험하였습니다. 그 결과 어떤 과제들에 대해서는 엘에스티엠들보다 더 좋게 동작하는 구조들도 발견되었습니다.

결론

앞에서, 저는 사람들이 순환 신경망으로 성취한 놀라운 결과들을 언급하였습니다. 본질적으로 이 모든 것들은 엘에스티엠을 사용하여 성취되었습니다. 엘에스티엠은 대부분 과제에서 훨씬 더 잘 동작합니다.

일련의 수식들을 적다 보면 엘에스티엠이 꽤 두렵게 보입니다. 그러나 바라건대 이 글에서 엘에스티엠을 단계별로 차근차근 살펴봄으로써 여러분이 엘에스티엠에 친숙해지셨기를 바랍니다.

우리가 이룬 순환 신경망 관련 업적들에서 엘에스티엠은 커다란 도약이었습니다. 또 다른 큰 도약도 있을까요? 네, 연구자들은 그다음 단계가 주목(attention)이라고 말합니다. 주목의 아이디어는 순환 신경망의 매 단계가 더 큰 정보의 모음에서 자세히 살펴보기 위한 정보를 얻게 하는 것입니다. 예를 들어, 만약 순환 신경망이 한 영상의 내용을 설명하는 캡션을 만드는 데 사용되고 있다면, 그 캡션의 각 단어를 만들기 위해 영상의 특정 부분을 뽑아 자세히 살펴볼 수도 있습니다. 사실, Xu, 외 (2015)가 정확히 이것을 합니다. 만약 당신이 주목을 연구하고 싶다면, 이 논문이 재미있는 시작점이 될 수도 있습니다. 주목을 사용한 재미있는 결과들이 많습니다. 주목은 우리 곁에 아주 가까이 와 있는 것으로 보입니다.

순환 신경망 연구에는 주목 외에도 재미있는 흐름이 있습니다. 예를 들어, Kalchbrenner, 외 (2015)가 제안한 격자(grid) 엘에스티엠은 매우 유망해 보입니다. Gregor, 외 (2015), Chung, 외 (2015), 또는 Bayer와 Osendorfer (2015) 같은 발생적 모델들에서 순환 신경망을 사용한 연구 또한 매우 흥미로워 보입니다. 지난 몇 년은 순환 신경망을 위한 멋진 시간이었습니다, 그리고 새로 나올 것들은 더 멋질 것입니다.

감사의 글

제가 엘에스티엠을 더 잘 이해하도록 도움을 주고, 시각화에 대해 논평하고, 이 글에 대한 피드백을 준 많은 사람에게 저는 고마움을 전합니다.

구글에 있는 제 동료들은 저에게 매우 도움이 되는 피드백을 주었습니다. 그 동료들의 이름은 Oriol Vinyals, Greg Corrado, Jon Shlens, Luke Vilnis, 그리고 Ilya Sutskever 입니다. 그들에게 감사합니다. 저는 또한 시간을 들여 저를 도와준 다른 많은 친구들과 동료들에게 감사합니다. 그 이름은 Dario Amodei 그리고 Jacob Steinhardt 입니다. 특히 제 다이어그램들에 대해 사려 깊은 편지를 준 Kyunghyun Cho에게도 고마움을 전합니다.

이 글에 앞서, 저는 제가 신경망에 대해 가르친 두 세미나 시리즈 동안 엘에스티엠 설명을 연습하였습니다. 인내심을 가지고 거기에 참여하여 피드백을 준 모든 분께 고마움을 전합니다.


원저자들 외에 많은 사람이 현대 엘에스티엠에 공헌하였습니다. 그 사람들의 대략적 목록은 Felix Gers, Fred Cummins, Santiago Fernandez, Justin Bayer, Daan Wierstra, Julian Togelius, Faustian Gomez, Matteo Gagliolo, 그리고 Alex Graves 입니다.


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

+ Recent posts