[LSTM] LSTM 네트워크 이해하기 (번역)

2020. 11. 12. 14:31레퍼런스/Tech : 기술

RNN (Recurrent Neural Networks)

사람은 매초 마다 처음부터 생각하지 않습니다. 당신이 이 에세이를 읽을 때, 당신은 이전의 말을 이해한 것을 기반으로 매 단어를 이해합니다. 당신은 모든것을 던지지 않고 처음부터 다시 생각하지 않습니다. 당신의 생각은 지속성을 가집니다. 

전통적인 신경망은 이것을 할 수 없습니다, 그리고 주요한 단점으로 보입니다. 예를들어 당신이 영화에서 매 지점마다 무슨 종류의 일이 벌어지는지 분류하길 원한다고 상상해봅시다. 어떻게 전통적인 신경망이 이후의 것을 알리기 위해 영화속에서 이전의 사건들에 대한 추론을 사용할 수 있을지는 불명확합니다. 

RNN(Recurrent neural networks)는 이 문제를 다룹니다. 이는 정보가 지속되길 허락하면서, 그들 속에 루프를 가진 네트워크입니다. 

 

순환신경망 (Recurrent Neural Networks)는 루프(loops)를 가지고 있습니다.

위의 그림에서, 신경망의 덩어리, $A$, 몇몇  입력값  $x_t$. 출력값 $h_t$를 볼 수 있습니다. 루프는 정보가 네트워크의 한 스텝에서 다음 스텝으로 지나가게 허락합니다. 

이 루프는 RNN(recurrent neural networks)가 미스테리한 종류의 것으로 보이게 합니다. 그러나, 만약 당신이 조금 더 생각한다면, 이것이 일반적인 신경망 보다 다른 것은 아니라는 것을 발견할 수 있습니다. RNN은 각각 succesor에게 메시지를 전달하면서 ,같은 네트워크의 다수의 복제로 생각될 수 있습니다,  만약 우리가  loop를 펼친다면 무슨 일이 벌어질 지 생각해 봅시다. : 

 

 

 

펼쳐진 순환 신경망 (recurrent neural network)

이 체인 같은 본질은 RNN이 즉시 시퀀스와 리스트에 연관되도록 합니다. 이것은 그러한 데이터를 사용하기 위한 신경망의 자연스러운 구조 입니다. 

그리고 그들이 확실히 새용되었습니다! 과거 몇년 동안, RNN을 다양한 문제에 적용하면서 놀라운 성공들이 있어왔습니다. : 발화 인식, 언어 모델링, 번역, 이미지 자막달기... 등등 다양합니다. 나는 누군가가 RNN을 가지고 도달 할 수 있는 놀라운 어려움에 대한 토론에 대해 Andrej Karpath의 놀라운 블로그 포스트, The Unreasonable Effectiveness of Recurrent Neural Networks남겨놓겠습니다.  하지만 그들은 실제로 꽤 놀랍습니다. 

이 성공의 중요한 점은 "LSTM"의 사용입니다, 매우 독특한 종류의 recurrent neural network이며, 많은 작업시, 표준적인 버젼보다 더욱 잘 작동합니다. recurrent neural networks 에 대한 거의 모든 흥미로운 결과들은 이것과 함께 성취되었습니다. 이는 이 에세이가 탐구할 LSTM입니다. 

 

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

RNN의 매력중 하나는, 이전의 비디오 프레임을 사용하여 현재 프레임에 대한 이해를 알려주는 것과 같이, 이전의 정보를 현재의 작업에 연결할 수 있을지도 모른다는 아이디어 입니다. 만약 RNN이 이것을 가능하게 한다면, 그것은 매우 유용한 것이 될 것입니다. 하지만 그러할까요? 상황에 따라 다릅니다. 

때때로 우리는 오직 현재의 작업을 수행하기 위해 최근의 정보만 보는 것을 필요로 합니다. 예를들어 이전의 것에 기반하여 다음 단어를 예측하려고 시도하는 언어 모델을 생각해봅시다. 만약 우리가 마지막 단어 "the clouds are in the sky"를 예측하려고 시도한다면, 우리는 어떤 더많은 문맥을 필요로 하지 않습니다. - 다음 단어로  sky가 올 것이라는 것은 꽤 명백하기 때문입니다. 이런 케이스들에서는 관련된 정보와 그것을 필요로하는 장소 사이의 차이는 매우 작습니다.  RNN은 과거의 정보를 사용하여 배울 수 있습니다.  

 

 

하지만 우리가 더 많은 문맥을 필요로하는 케이스들 도 있습니다. 다음 문장에서 마지막 단어를 예측한다고 생각해봅시다. " I grew up in France.. I speak fluent French".  최근 정보는 다음 단어가 아마도 언어의 이름일 지도 모른다고 암시합니다. 하지만 만약 우리가 어떤 언어인지로 좁히길 원한다면, 우리는 더 나아가 France라는 문맥을 필요로 합니다, 이는 관련된 정보와 그것을 필요로하는 지점 사이의 차이가 매우 커지게 만드는 것을 가능케 합니다. 

불행히도, 차이가 커질 수록 RNN은 정보를 연결기 위해 학습하는 것이 어렵게 됩니다. 

 

이론적으로, RNN은 그런 "장기-의존성 문제"를 다루는 것이 절대적으로 가능합니다 . 인간은 이런 형태의 장난감 문제를 풀기위해 변수를 신중하게 선택할 수 있었습니다. 슬프게도, 실전에서는, RNN은 그들을 학습하는 것이 가능하게 보이지 않습니다. Hochreiter (1991) [German]  Bengio, et al. (1994) 는 왜 이것이 어려운지 꽤 근본적인 이유를 찾았고, 이 문제는 해당 논문에서 깊게 탐구 되었습니다. 

다행히도, LSTM은 이런 문제를 가지고 있지 않습니다 ! 

 

LSTM 네트워크 

특히 "LSTM" 이라고 불리는 장단기 기억 네트워크는 장기간 의존하는 학습을 가능하게 하는 RNN의 특별한 한 종류입니다. 이는 Hochreiter & Schmidhuber (1997) 에 의해 소개되었고, 다음의 후속 작업에서 많은 사람들에 의해 재정비되고 대중화 되었습니다.1 그들은 다양한 문제들에 엄청나게 잘 작용하고 있으며, 현재 널리 사용되고 있습니다. 

LSTM은 장기 의존성 문제를 피하기 위해 꽤 정확하게 디자인되었습니다. 오랜 기간동안 정보를 기억하는 것은 끄들의 기본적인 행동이지, 배우기 위해 고군분투 하는 것이 아닙니다! 모든 순환 신경망은 신경망을 반복하는 체인과 같은 형태를 가지고 있습니다. 표준 RNN에서는, 이 반복되는 모듈이 하나의 tanh 층과 같이 매우 단순한 구조를 가지고 있습니다. 

 

표준 RNN에서는 반복되는 모듈이 하나의 layer만 포함하고 있습니다.

LSTM 또한 이 체인같은 구조를 가지고 있습니다, 하지만 반복되는 모듈인 약간 다른 구조를 가지고 있습니다. 하나의 신경망 층을 가지는 것 대신에, 상호작용하는 4개의 특별한 방식이 있습니다. 

 

LSTM의 반복되는 모듈은 4개의 상호작용하는 층을 포함합니다. 

무슨 일이 일어나는 지, 자세한 사항에 대해서는 걱정하지 마세요. 우리는 LSTM 그림을 통해서 단계적으로 배워나갈 것입니다. 지금부터, 우리가 사용하게될 기호들에 친숙해져봅시다. 

 

위의 다이어그램에서 각 선은 한 노드의 출력에서 다른 노드의 입력까지 전체 벡터를 전달합니다. 분홍색 원은 벡터 덧셈과 같은 지점에서의 연산을 나타냅니다. 반면에 노란색 박스는 학습된 신경망 층입니다. 합쳐진 선은 병합을 의미합니다, 반면에 갈라진 선은 그 내용물이 복사되고 복사본은 다른 위치로 흘러가는 것을 의미합니다. 

LSTMs 뒤의 핵심 아이디어 

LSTM의 핵심은 그림의 위에서 수평지나가는 cell state 입니다.

cell state는 컨베이어 벨트와 같은 종류입니다. 이는 전체 체인 따라 곧장 지나가며, 약간의 사소한 선형 상호작용만 가지고있습니다. 정보가 그대로 흘러가는 것은 매우 쉽습니다. 

 

LSTM은 gate라는 구조로 조심스럽게 규제되는, cell state에 정보를 제거하거나 더하는 능력도 가지고 있습니다. 

Gate는 선택적으로 정보를 통과시키는 방식입니다.  그들은 sigmoid 신경망 층과 곱셈 연산으로 구성되어 있습니다. 

 

sigmoid 층은 각 요소가 얼마만큼이나 통과되어야 하는지를 설명하면서, 숫자를 0과 1 사이로 출력합니다. 숫자 0은 "아무것도 보내지 말아라"를 의미합니다. 반면에 숫자 1은 "모든 것을 보내십시오"를 의미합니다. 

한 LSTM은 cell state를 보호하고 통제하기 위해 3가지의 gate들을 가지고 있습니다. 

 

LSTM 진행되는 단계적 접근

LSTM의 첫번째 스텝은 cell state로 부터 우리가 무슨 정보를 전달해야할 지 결정하는 것입니다. 이 결정은 "forget gate layer" 라고 불리는 sigmoid 층에 의해 수행되어 집니다. 이는 $h_t$ 와 $x_t$ 를 전달받아, cell state $C_{t-1}$ 의 각자 수에 0과 1 사이의 숫자값을 출력합니다. $1$ 은 "완전이 이 정보를 지키시오"를 의미하며, $0$은 "완전히 이 정보를 지우시오"를 의미합니다. 

모든 이전의 것에 기반하여 다음 단어를 예측하려고하는 우리의 언어 모델로 돌아가봅시다. 이런 문제에서 cell state는 아마 현재 주제의 성별을 포함할 지도 모릅니다, 그래서 정확한 대명사가 사용될 수 있습니다. 우리가 새로운 주제를 발견했을 때, 우리는 오래된 주제의 성별을 지우길 원할 수 있습니다. 

 

다음 단계는 cell state에 저장할 새로운 정보를 결정하는 것입니다. 이는 2가지 부분을 가지고 있습니다. 첫번째로 "input gate 층" 이라고 불리는 sigmoid 층은 어떤 값을 업데이트할 지 결정합니다. 다음은 tanh 층이 새로운 후보값인 벡터$\tilde{C_t}$ 를 만들어 내고, 이 값은 상태에 더해집니다. 다음 단계로, 우리는 이 두가지를 상태에 업데이트하기위해 결합하게 됩니다. 

우리의 언어모델의 예시에서, 우리가 잊어야하는 오래된 것을 대체하며, cell state에 새로운 주제인 성별을 더하기를 원하게 됩니다. 

 

이제 오래된 cell state인 , $C_{t-1}$ 을 새로운 cell state $C_t$에 업데이트할 시간입니다. 이전의 단계에서 이미 우리가 할 것을 결정했고, 우리는 실제로 그것을 할 필요만 있습니다. 

우리는 오래된 것을 $f_t$로 곱하고 이전에 잊기로 결정한 것을 잊어버립니다. 그리고 나서 우리는 그것을 $\tilde{C_t}$ 에 곱합니다. 이는 얼마나 우리가 각각의 상태 값을 업데이트할 지 스케일 된 새로운 후보 값입니다. 

언어 모델의 경우에서, 우리는 우리가 이전 단계에서 결정했던 것처럼, 오래된 주제의 성별에 대한 정보를 실제로 제거하고, 새로운 정보를 더합니다. 

 

마지막으로, 우리는 우리가 출력할 것을 결정할 필요가 있습니다. 이 출력값은 우리의 cell state에 기반하게 됩니다, 하지만 필터된 버젼이 될 것입니다. 첫번째로, 우리는 cell state의 어떤 부분을 출력할지 결정하는 sigmoid층을 실행합니다. 그리고 나서, 우리는 cell state를 $tanh$ 를 통과하게 두고 (값을 $-1$ 과 $1$ 사이로 둡니다) 그것을 sigmoid gate의 출력값으로 곱합니다. 그 결과로 우리가 결정한 부분을 출력하게 됩니다. 

언어 모델 예시에서, 우리가 한 주제를 보았을 때, 다음에 다가올 경우를 대비하여, 동사와 관련된 정보를 출력하기 원할 지도 모릅니다. 예를 들자면, 그것은 주어가 단수인지 복수인지를 출력할 수 있습니다. 그래서 우리는 다음에 어떤 형태로 동사가 결합되어야 하는지 알 수 있습니다.

 

Variants on Long Short Term Memory

What I’ve described so far is a pretty normal LSTM. But not all LSTMs are the same as the above. In fact, it seems like almost every paper involving LSTMs uses a slightly different version. The differences are minor, but it’s worth mentioning some of them.

One popular LSTM variant, introduced by Gers & Schmidhuber (2000), is adding “peephole connections.” This means that we let the gate layers look at the cell state.

The above diagram adds peepholes to all the gates, but many papers will give some peepholes and not others.

Another variation is to use coupled forget and input gates. Instead of separately deciding what to forget and what we should add new information to, we make those decisions together. We only forget when we’re going to input something in its place. We only input new values to the state when we forget something older.

A slightly more dramatic variation on the LSTM is the Gated Recurrent Unit, or GRU, introduced by Cho, et al. (2014). It combines the forget and input gates into a single “update gate.” It also merges the cell state and hidden state, and makes some other changes. The resulting model is simpler than standard LSTM models, and has been growing increasingly popular.

These are only a few of the most notable LSTM variants. There are lots of others, like Depth Gated RNNs by Yao, et al. (2015). There’s also some completely different approach to tackling long-term dependencies, like Clockwork RNNs by Koutnik, et al. (2014).

Which of these variants is best? Do the differences matter? Greff, et al. (2015) do a nice comparison of popular variants, finding that they’re all about the same. Jozefowicz, et al. (2015) tested more than ten thousand RNN architectures, finding some that worked better than LSTMs on certain tasks.

Conclusion

Earlier, I mentioned the remarkable results people are achieving with RNNs. Essentially all of these are achieved using LSTMs. They really work a lot better for most tasks!

Written down as a set of equations, LSTMs look pretty intimidating. Hopefully, walking through them step by step in this essay has made them a bit more approachable.

LSTMs were a big step in what we can accomplish with RNNs. It’s natural to wonder: is there another big step? A common opinion among researchers is: “Yes! There is a next step and it’s attention!” The idea is to let every step of an RNN pick information to look at from some larger collection of information. For example, if you are using an RNN to create a caption describing an image, it might pick a part of the image to look at for every word it outputs. In fact, Xu, et al. (2015) do exactly this – it might be a fun starting point if you want to explore attention! There’s been a number of really exciting results using attention, and it seems like a lot more are around the corner…

Attention isn’t the only exciting thread in RNN research. For example, Grid LSTMs by Kalchbrenner, et al. (2015) seem extremely promising. Work using RNNs in generative models – such as Gregor, et al. (2015), Chung, et al. (2015), or Bayer & Osendorfer (2015) – also seems very interesting. The last few years have been an exciting time for recurrent neural networks, and the coming ones promise to only be more so!

Acknowledgments

I’m grateful to a number of people for helping me better understand LSTMs, commenting on the visualizations, and providing feedback on this post.

I’m very grateful to my colleagues at Google for their helpful feedback, especially Oriol Vinyals, Greg Corrado, Jon Shlens, Luke Vilnis, and Ilya Sutskever. I’m also thankful to many other friends and colleagues for taking the time to help me, including Dario Amodei, and Jacob Steinhardt. I’m especially thankful to Kyunghyun Cho for extremely thoughtful correspondence about my diagrams.

Before this post, I practiced explaining LSTMs during two seminar series I taught on neural networks. Thanks to everyone who participated in those for their patience with me, and for their feedback.


  1. In addition to the original authors, a lot of people contributed to the modern LSTM. A non-comprehensive list is: Felix Gers, Fred Cummins, Santiago Fernandez, Justin Bayer, Daan Wierstra, Julian Togelius, Faustino Gomez, Matteo Gagliolo, and Alex Graves.

 

 

 

출처 

colah.github.io/posts/2015-08-Understanding-LSTMs/

 

Understanding LSTM Networks -- colah's blog

Posted on August 27, 2015 Humans don’t start their thinking from scratch every second. As you read this essay, you understand each word based on your understanding of previous words. You don’t throw everything away and start thinking

colah.github.io