ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Understanding LSTM Networks [번역]
    머신러닝, 딥러닝 공부 2020. 5. 22. 18:08
    반응형

    Recurrent Neural Networks

    인간은 매 순간마다 처음부터 생각을 시작하지 않는다. 이 에세이를 읽으면서 당신은 이전의 단어에 대한 이해를 바탕으로 단어 하나하나를 이해하게 된다. 모든 것을 버리고 다시 처음부터 생각하기 시작하는 것이 아니다. 너의 생각은 끈기가 있다.

     

    기존의 neural network은 이것을 할 수 없고, 그것은 주요한 단점처럼 보인다. 예를 들어, 영화의 모든 순간에서 어떤 종류의 사건이 일어나고 있는지 분류하고 싶다고 상상해 보자. 기존의 neural network가 어떻게 영화의 이전 사건들에 대한 추론을 사용하여 이후의 사건들을 예측할 수 있을지는 불분명하다.

     

    Recurrent neural network은 이 문제를 해결한다. 그것들은 루프가 있는 네트워크로 정보가 지속되도록 한다.

     

    Recurrent Neural Networks have loops.

    위의 그림에서 신경망 덩어리 A는 어떤 입력 x_t를 보고 h_t 값을 출력한다. 루프는 네트워크의 한 단계에서 다음 단계로 정보가 전달되도록 한다.

     

    이 루프들은 recurrent neural network을 신비롭게 보이게 만든다. 하지만 조금만 더 생각해보면, 이것은 일반적인 neural network과 별반 다르지 않다. recurrent neural network은 동일한 네트워크의 복수 복사본으로 생각할 수 있으며, 각각은 다음 네트워크에게 메시지를 전달한다. 루프를 풀면 어떻게 되는지 생각해보자:

     

    An unrolled recurrent neural network.

    이러한 사슬과 같은 recurrent neural network는 시퀀스 및 리스트와 밀접하게 관련되어 있음을 드러낸다. 그것들은 이러한 데이터에 사용하기 위한 neural network의 자연적 구조이다.

     

    그리고 이것들은 확실히 사용된다! 지난 몇 년 동안, 음성 인식, 언어 모델링, 번역, 이미지 캡션 등 다양한 문제에 RNN을 적용하는 놀라운 성공이 있었다.

     

    이러한 성공에 필수적인 것은 "LSTM"의 사용인데, 이것은 표준 버전보다 훨씬 더 잘 작동하는 매우 특별한 종류의 recurrent neural network이다. recurrent neural network에 기초한 거의 모든 흥미진진한 결과는 이것들로 이루어진다. 이 에세이가 탐구할 것은 이 LSTM들이다.

     

    The Problem of Long-Term Dependencies

    RNN의 매력 중 하나는 이전 비디오 프레임을 사용하는 것과 같이 이전 정보를 현재 작업에 연결할 수 있다는 아이디어이다. 만약 RNN이 이것을 할 수 있다면 매우 유용할 것이다. 하지만 실제로 할 수 있을까? 경우에 따라 다를 것이다.

     

    때때로, 우리는 현재 task를 수행하기 위해 최근 정보만 볼 필요가 있다. 예를 들어, 이전 단어를 기반으로 다음 단어를 예측하려고 하는 언어 모델을 생각해보자. “the clouds are in the sky”에서 마지막 단어를 예측하려고 한다면 더 이상의 문맥(context)이 필요하지 않다. 다음 단어가 하늘이 될 것이다. 이렇게 관련 정보와 필요한 장소 간의 차이가 작은 경우 RNN은 과거 정보를 사용하는 방법을 배울 수 있다.

     

    이론적으로, RNN은 그러한 "long-term dependencies"을 틀림없이 처리할 수 있다. 인간은 이런 형태의 toy problem을 해결하기 위해 매개 변수를 신중하게 선택할 수 있었다. 안타깝게도, 실제로 RNN은 그것들을 배울 수 없을 것 같다. 이 문제는 Hochreiter(1991)와 Bengio(1994)에 의해 심층적으로 탐구되었다.

     

    다행히 LSTM은 이런 문제가 없다!

     

    LSTM Networks

    일반적으로 "LSTM"이라고 불리는 Long Short Term Memory network는 long-term dependencies을 학습할 수 있는 특별한 종류의 RNN이다. 그것들은 Hochreiter & Schmidhuber(1997)에 의해 소개되었고, 후속 연구에서 많은 사람들에 의해 수정되고 대중화되었다. 이 네트워크는 다양한 문제들에 매우 잘 적용되고 있으며, 현재 널리 사용되고 있다.

     

    LSTM은 long-term dependency 문제를 피하기 위해 설계되었다. 정보를 오랫동안 기억하는 것은 사실상 이 네트워크의 기본 행동이지 배우려고 애쓰는 것이 아니다!

     

    모든 recurrent neural network은 neural network의 반복 모듈들의 체인의 형태를 가지고 있다. 표준 RNN에서 이 반복 모듈은 단일 tanh layer처럼 매우 단순한 구조를 가질 것이다.

     

    The repeating module in a standard RNN contains a single layer.

    LSTM도 이 체인형 구조를 갖지만 반복 모듈은 다른 구조를 갖는다. 하나의 neural network layer을 갖는 대신에 매우 특별한 방식으로 상호 작용하는 네 가지가 있다.

     

    The repeating module in an LSTM contains four interacting layers.

    무슨 일이 일어나고 있는지에 대해 걱정하지 말자. 이제 LSTM 다이어그램을 단계별로 살펴볼 거니까. 먼저 우리가 사용할 표기법에 익숙해지도록 하자.

     

    위의 다이어그램에서 각각의 선은 한 노드의 출력에서 다른 노드의 입력까지 전체 벡터의 전달을 의미한다. 분홍색 원은 벡터의 덧셈과 같은 pointwise 연산을 나타내며 노란색 상자는 학습된 neural network layer를 의미한다. 선이 합쳐지면 연결을 나타내고 선이 나뉘면 내용이 복사되고 그 사본이 다른 위치로 이동 함을 나타낸다.

     

    The Core Idea Behind LSTMs

    LSTM의 핵심은 cell state이며 그림의 상단을 가로지르는 수평선이다.

    cell state는 컨베이어 벨트와 비슷하다. 약간의 linear 상호 작용만으로 전체 체인에서 바로 실행된다. 정보가 그대로 유지되는 것은 매우 쉽다.

     

    LSTM은 gate라고 불리는 구조물에 의해 세심하게 조절되는 cell state에 정보를 제거하거나 추가할 수 있는 능력을 가지고 있다.

     

    Gate는 선택적으로 정보를 통과시키는 방법이다. 그들은 sigmoid neural net layer과 pointwise multiplication operation으로 구성되어 있다.

     

    Sigmoid layer는 0과 1 사이의 숫자를 출력하며, 각 구성요소의 어느 정도가 통과되어야 하는지를 결정한다. 0의 값은 "아무것도 통과시키지 말라"를 의미하고, 1의 값은 "모든 것을 통과하라!"를 의미한다.

     

    LSTM은 cell state를 보호하고 통제하기 위해 세 개의 gate를 가지고 있다.

     

    Step-by-Step LSTM Walk Through

    LSTM의 첫 번째 단계는 cell state에서 어떤 정보를 버릴지 결정하는 것이다. 이 결정은 "forget gate layer"라고 불리는 sigmoid layer에 의해 이루어진다. h_t-1과 x_t를 보고, cell state C_t-1의 각 숫자에 대해 0과 1 사이의 숫자를 출력한다. 1은 "이것을 유지하는 것"을 나타내고, 0은 "이것을 없애는 것"을 나타낸다.

     

    이전의 모든 단어를 기반으로 다음 단어를 예측하려는 언어 모델의 예로 돌아가 보겠다. 이러한 문제에서, cell state는 현재 대상의 성별을 포함할 수 있어서, 정확한 대명사가 사용될 수 있다. 우리가 새로운 주어를 볼 때, 우리는 오래된 주어의 성별을 잊고 싶다.

     

    다음 단계는 cell state에 어떤 새로운 정보를 저장할 것인지 결정하는 것다. 여기에는 두 단계가 있다. 먼저, "input gate layer"라는 sigmoid layer가 업데이트할 값을 결정한다. 다음으로, tanh layer는 state에 추가될 수 있는 새로운 후보 값 C^~_t의 벡터를 생성한다. 다음 단계에서는 이 두 가지를 결합하여 state에 대한 업데이트를 만든다.

     

    우리의 언어 모델의 예에서, 우리는 새로운 주어의 성별을 cell state에 추가하여 잊어버린 이전의 성별을 대체하고 싶다.

     

    이제 이전 cell state C_t-1을 새로운 cell state C_t로 업데이트할 차례이다. 이전 단계에서 이미 무엇을 해야 할지 결정했으므로 그대로 하면 된다.

     

    이전 상태에 f_t를 곱하여 이전에 잊기로 결정한 것을 잊어버린다. 그런 다음 i_t ∗ C ^ ~ _t를 추가한다. 이것은 새로운 후보 값으로, 각 상태 값을 얼마나 업데이트하기로 결정했는지에 따라 조정된다.

     

    언어 모델의 경우 이전 단계에서 결정한 대로 이전 주어의 성별에 대한 정보를 실제로 삭제하고 새 정보를 추가하는 곳이다.

     

    마지막으로 출력할 내용을 결정해야 한다. 이 출력은 cell state를 기반으로 하지만 필터링된 버전이 된다. 먼저 sigmoid layer를 실행하여 cell state에서 출력할 부분을 결정한다. 그런 다음 cell state를 tanh를 통해 sigmoid gate의 출력에 곱하여 결정한 부분만 출력한다.

     

    언어 모델의 예에서는 방금 주어를 보았으므로 다음에 올 경우 동사와 관련된 정보를 출력하려고 할 수 있다. 예를 들어, 주어가 단수인지 복수인지를 출력할 수 있으므로, 다음에 나오는 것이 동사가 어떤 형태로 결합되어야 하는지 알 수 있다.

     

     

    Variants on Long Short Term Memory

    지금까지 설명한 것은 꽤 일반적인 LSTM이다. 그러나 모든 LSTM이 위와 동일한 것은 아니다. 실제로 LSTM과 관련된 거의 모든 논문은 약간 다른 버전을 사용하는 것 같다. 그 차이는 미미하지만 그중 일부를 언급할 가치가 있다.

     

    Gers & Schmidhuber (2000)에 의해 도입된 인기 있는 변형 LSTM 중 하나는 "peephole connections"를 추가하는 것이다. 이것은 gate layer가 cell state를 보도록 한다.

     

    위의 그림은 모든 gate에 peephole을 추가하지만 많은 논문은 일부만 peephole을 제공한다.

     

    또 다른 변형은 forget 및 입력 input gate를 결합하여 사용하는 것이다. 무엇을 잊어버리고 새로운 정보를 추가해야 하는지 별도로 결정하는 대신, 이러한 결정을 함께 내린다. 우리는 그 자리에 무언가를 입력할 때만 잊어버린다. 오래된 것을 잊었을 때만 새로운 값을 state에 입력한다.

     

    LSTM의 약간 더 극적인 변형은 Cho가 도입 한 Gated Recurrent Unit(GRU)이다. forget gate와 input gate를 하나의 "update gate"로 결합한다. 또한 cell state와 hidden state를 병합하고 다른 사항을 변경한다. 결과 모델은 표준 LSTM 모델보다 단순하며 점점 인기가 높아지고 있다.

     

    이것들은 주목할만한 LSTM의 변형 중 일부에 불과하다. Yao (2015)의 Depth Gated RNN과 같은 다른 많은 것들이 있다. Koutnik (2014)의 Clockwork RNN과 같이 장기 의존성을 다루는 완전히 다른 접근법도 있다.

    반응형

    댓글

Designed by black7375.