6-11 RNN의 핵 LSTM(Long Short Term Memory) Architecture

codingart(66)
Published in
#kr
Words
783
Reading
4 min
Listen
Play
8y

RNN 레이아웃이 뉴럴 네트워크가 연동되어 이루어지는 알고리듬이기 때문에 상당히 까다로운 편이다. 하지만 인간이 사용하는 언어의 구조만 하더라도 만만치 않을 정도의 복잡성을 띄고 있기 때문에 RNN 레이아웃에서 완벽한 학습을 위하여 cell 들끼리 넘겨주어야 하는 정보와 cell 자체 내부에서 고려해야할 많은 요인들이 있을 수 있다.

이와 같이 복잡할 수밖에 없는 알고리듬이 필요한 까닭은 언어 표현 구조에서부터 비롯된다. 다음의 영어 문장을 생각해보자.
“Clouds are in the” + “???”
Clouds 즉 구름이란 단어와 연관어로서 “???”는 “sky” 가 될 확률이 높다. 이런 경우에는 Clouds 라는 명사와 “???” 과의 갭(gab)이 작기 때문에 vocabulary 학습이 충분히 되어 있다면 RNN이 “sky” 라는 단어를 확률적 예측을 통해 끄집어낼 수 있는 가능성이 있다.

noname01.png

또 다른 갭 문제로서 다음 문장에서 마지막 단어인 언어 즉 “French”를 예측해 보는 문제를 생각해 보자.
“I grew up in France ∙∙∙” “I speak fluent ??????”
최근의 문장을 참조해 보면 다음에 필요로 하는 단어가 언어명이 될 것이라는 점을 암시한다고 볼 수 있다. 과연 언어 종류가 무엇인지 그 범위를 좁히고자 한다면 앞으로 돌아가 France 라는 문맥이 필요함을 알 수 있다. 물론 관련된 정보와 그 정보를 필요로 하는 위치 사이의 갭이 커도 충분히 가능할 것이다.

하지만 RNN 은 갭이 커짐에 따라 정보를 연결하도록 학습하는 것이 불가능하다. 이론적으로야 RNN이 그와 같은 “long term dependencies”를 처리할 수 있을 것이다. 인간의 경우는 주의 깊게 이런 파라메터들을 집어낼 수 있으나 RNN은 이런 문제를 제대로 학습하지 못한다는 점이다.

독일의 Hochreiter(1991) 와 Bengio(1994) 가 심층 연구를 통해 왜 RNN이 그런 작업을 해주기 어려울 수도 있는지 근본적인 이유들을 찾아냈으며 대안으로 Hochreiter 와 Schumidhuber(1997)가 memory cell 갸념의 LSTM 알고리듬을 제시하였다. LSTM을 간단히 설명하기는 어렵지만 그래도 시도를 해 보기로 한다. 다음 그림은 가장 표준적인 RNN 의 구조이다.

noname02.png

전형적인 RNN을 구성하는 cell 패턴은 hidden layer를 기본으로 포함하면서 activation 함수로서 하이퍼볼릭 탄젠트(tanh)를 사용한다. 다음과 같은 알고리듬을 사용하여 입력 데이터를 처리하여 출력을 한다.

noname07.png

tanh를 사용하는 이유는 아주 긴 체인형 RNN에서 각 cell 별로 activation 함수 처리를 하게 되면 Vanishing gradient 또는 Exploding gradient 문제를 회피하기 위한 기법인 듯하다. ReLU를 사용할 수도 있지 않느냐 생각할 수 있지만 이는 Exploding gradient 문제를 일으키지 않나 하는 우려가 있을 수 있다. 반면에 LSTM은 위 그림의 오른쪽 사례에서처럼 상당히 복잡한 연산 알고리듬을 보여 주고 있다.

LSTM의 핵심 아이디어 Cell State에 관해서 알아보자. Cell State 의 특성은 Hopfield 뉴럴 네트워크에서 2개의 입력에 대해 NOR 또는 NAND 논리게이트 2개를 사용하여 Flip Flop을 구성할 수 있었던 것처럼 앞 cell 과 현재 cell 을 대상으로 cell 의 상태를 그대로 유지 하던가 또는 SET 할 수 있는 기능을 부여한다.

noname03.png

언어 모델의 예를 들어 보자. 맨 처음 시작할 때에는 당연히 RESET 상태가 될 것이다. 실행이 이루어지는 어느 단계의 앞 cell에서 John 같은 남성의 이름으로 볼 수 있는 주어(subject)가 나타나면 체크가 되어 Cell State가 SET 이 될 것이며 뒤 따라 오는 cell들에서 나타날 지도 모르는 대명사 he 를 찾았을 경우 Cell State 체크에 의해서 즉 학습에 의해서 John이라는 것을 알 수 있을 것이다. 반면에 새로이 남성이나 여성의 이름이라고 볼 수 있는 새 주어가 나타나면 Cell State를 다시 SET 시킬 수 있어야 할 것이다. 이와 같은 일종의 Addressible Memory 효과는 이미 Hopfield 뉴럴 네트워크에서 그 가능성을 엿보았다.

LSTM을 구성하는 서로 상호작용을 하는 4개의 뉴럴 네트워크 중에서 “forget gate”에 관해서 살펴보자.

전형적인 RNN에서처럼 새로이 입력되는 데이터 Xt에 대해 설정되는 랜덤 웨이트 매트릭스에다 앞 cell에서 넘겨준 웨이트 매트릭스와 합산하여 은닉층 연산 후 Sigmoid 처리한 결과인 를 앞에서 넘어온 Cell State 정보 Ct-1에 point-wise 곱하기 연산하는 “forget gate” 과정이다. Sigmoid 처리 결과가 0.0에 가까우면 Cell State 값이 0.0에 가까운 값이 되며 망각 상태에 가까워진다. 그 반대면 정보가 유지가 되는 것이다.

noname04.png

아울러 현재 cell에서 입력되는 정보를 “input gate”를 사용하여 처리하자. 단 앞의 “forget gate” 와 무관한 입력 정보의 처리이므로 랜덤한 웨이트 매트릭스를 새로 생성해서 사용하며 양의 값 즉 0.0과 1.0 사이의 값을 가지는 가 얻어진다. 아울러 별도로 랜덤 웨이트 매트릭스를 생성하여 ∓1.0 사이의 값을 가지도록 tanh를 사용하여 얻어진 값을 에 곱하여 Cell State 정보에 업데이트 하도록 한다.

noname05.png

“forget gate” 과정과 “input gate” 과정에 의해서 현재 cell 의 Cell State 정보가 얻어지는데 각 cell 별로 컴퓨터 메모리에 학습 정보로서 저장이 되어야 할 것이다. 대다수 문헌에서 정보가 흐른다고만 표현하고 있는데 이 정보들이 흘러감에 따라 앞부분의 정보들이 소멸되는 것이 아니다. 읽어 보면 누구라도 그런 착각이 들도록 작성이 되어 있는데 틀린 것은 아니겠지만 학습과정 부연설명이 빠져서 그런 것이다. 즉 이는 각 cell 의 t 값이 점차 커짐에 따라 cell 별로 학습하게 되는 웨이트 매트릭스와 Cell State 정보들이 저장되어 있어야 테스트 과정에서 불러 사용할 수 있을 것이다. 참고로 RNN이나 LSTM에서 cost 함수의 Backprogation 과정 설명은 그다지 설명할 필요를 못 느낄 정도로 지루하고 상당히 길다는 점을 지적해 둔다.

마지막으로 “output gate”를 살펴보자. 4번째로 랜덤 웨이트 매트릭스를 생성하여
hidden layer 연산 후 Sigmoid 로 처리한 결과에 Cell State 값에 tanh를 취하한 ∓1 사이의 값을 곱해서 출력한다. 군데 군데 tanh 가 많이 사용되는데 이는 Vanishing gradient 또는 Exploding gradient 문제 해결에 도움을 주며 아울러 Normalization 역할을 한다.

noname06.png

이 LSTM은 상당히 효용성이 커 2015년 이후 애플 스마트폰에 Siri 로 탑재가 되었었다. 하지만 이제는 보다 진보하여 Attention 모델로 죄다 넘어가는 상황이다.
마나마인로고.png

6-11 RNN의 핵 LSTM(Long Short Term Memory) Architecture | Ecency