본문 바로가기

AI

LSTM 공부

이번 딥다이브 프로젝트에선 손 동작 인식 후 메시지 보내는 기능을 만드려고한다. 

그 과정에서 기존의 미디어 파이프는  정적인 포즈를 다룬다는 것에 있어 동적 포즈를 인식하기 위해  LSTM을 이용해 동적 포즈 인식을 시도하려고한다.

그래서 이번엔 LSTM에 대해서 공부할 예정이다. 

LSTM을 공부하기 전 RNN이 무엇인지 짚고 넘어가봐야한다. 

1. RNN

먼저  RNN이란 Recurrent  Neurak Networks의 줄임말로 순환 신경망을 뜻한다.

RNN =  딥러닝의 가장 기본적인 시퀀스 모델

여기서 시퀀스 모델이란 연속적인 데이터를 다룬다는 것이다. 

 

RNN은 시간에 따른 의존성을 처리하기 위해 이전 상태를 기억하고 이를 다음단계로 전달한다. 

 

RNN(Recurrent Neural Network, 순환 신경망)은 주로 문장처럼 순서가 중요한 데이터를 처리하는 신경망이다. 문장을 읽을 때, 단어 하나하나가 앞뒤 맥락과 연관이 있듯이, RNN도 이전 정보를 기억해 현재 정보를 처리하는 방식으로 동작하게 된다.

 

RNN에서 기억 장치메모리 셀이라고 부르며, 이 셀은 이전의 정보를 기억하고, 그 정보를 바탕으로 출력을 만들어낸다. 예를 들어, "나는 고양이를"이라는 문장을 읽고 "좋아해"라는 단어가 나올 때, 앞서 나왔던 "나는 고양이를"이라는 정보가 있어야 전체 문장의 뜻을 정확히 파악할 수 있다. 이렇게 RNN은 과거 정보를 활용하는 모델이라고 할 수 있다.

RNN은 다양한 입력과 출력을 처리할 수 있으며, 다음과 같은 방식으로 분류된다.

  • 일 대 다 (one-to-many): 하나의 입력에서 여러 가지 출력을 만드는 경우를 말한다. 예를 들어, 한 장의 사진을 보고 그에 대한 설명을 생성하는 데 사용할 수 있다.
  • 다 대 일 (many-to-one): 여러 개의 입력을 받아 하나의 결과를 내는 경우이다. 예를 들어, 영화 리뷰를 읽고 그 영화가 긍정적인지 부정적인지 판단하는 모델이 여기에 해당한다.
  • 다 대 다 (many-to-many): 입력과 출력이 모두 시퀀스인 경우로, 번역기와 같은 시스템에서 사용된다.

한계점 

기울기 소실 문제

역전파 과정에서 그래디언트가 점점 작아져 학습이 어려워지는 현상이다. 이는 주로 시퀀스가 길어질수록 더 두드러지며, 네트워크의 초기 시점에서의 정보가 후속 시점으로 제대로 전달되지 않게 만든다.

 

장기 의존성 문제

시퀀스의 초반부에 중요한 정보가 뒤쪽에서 제대로 반영되지 않는 현상을 말한다. 이는 기울기 소실 문제로 인해 발생하는 결과로 볼 수 있다. 즉, 기울기 소실 문제로 인해 초기 시점의 정보가 뒤로 전달되지 않아, 장기 의존성 문제로 이어진다.

따라서 기울기 소실 문제는 장기 의존성 문제의 원인 중 하나이다. 기울기 소실 문제를 해결하지 않으면, 긴 시퀀스에서 장기 의존성 문제를 해결하는 데 어려움이 생기며, 결과적으로 네트워크가 장기적인 패턴을 학습하는 데 한계가 있다.

 

===>  해결하기 위해 LSTM 등장 ! 

 

2. LSTM

LSTM(Long Short-Term Memory)은 RNN(Recurrent Neural Network)의 변형으로, 장기 의존성 문제를 해결하기 위해 설계되었다. LSTM은 RNN의 히든 상태(hidden state)에 셀 상태(cell state)를 추가하여, 정보를 오랫동안 기억하고, 필요한 정보를 효과적으로 유지하며 불필요한 정보는 잊어버리도록 한다.

LSTM 구조 

LSTM의 메모리 셀은 입력값과 이전 상태에 따라 값을 업데이트 하고 새로운 상태를 출력한다. 셀의 값을 얼마나 기억할지 결정하는 것이 가능한 게이트를 가지고 있어서 필요한 정보만 기억하도록 제어가 가능하다는 특징이있다. 

메모리 셀 안에 상태 정보를 변경하는 게이트를 가진다. 

 

1. 입력게이트 : 

입력 게이트는 새로운 정보를 어떻게 반영할 것인가에 대한 결정을 내린다. 이를 통해 LSTM은 기존 정보와 새로운 정보를 적절하게 조합하여 더 정확한 예측을 가능하게 한다. 

입력 게이트에는 sigmoid 함수와 탄젠트 함수가 있다.  sigmoid 함수는 후보값을 얼마나 전달할지 결정을 내리는 값이다. 탄젠트값과 시그모이드 값을 곱해서 셀 상태에 더하면 최종적으로 다음 단계를 위해 보내는 셀 상태 Ct가 결정된다. 

 

2. 망각 게이트 :

셀 상태의 정보를 지울 것인지 말 것인지 결정하나다. 망각 게이트가 만들어내는 신호는 ft이며 이 값을 계산하기 위해서 sigmoid 활성화함수를 사용한다. Sigmoid 함수 특성상 0~1 사이의 값을 가지게 될 것이다. 값이 0이라면 셀 상태 정보는 0이 되어 사라지고 1이면 지우지 않고 그대로 전달한다. 

 

3. 출력 게이트 :

출력 게이트는 셀 상태 값에 탄젠트 함수를 적용한 값으로 출력한다. 그 값을 바로 사용하지 않고 출력이 얼마나 중요한지 조절하기 위해서 은닉 상태와 현재 입력에 대한 sigmoid 함수를 적용해 0~1 사이의 값을 만든 후 출력하고자 하는 신호와 곱해 크기 조절한 후 출력한다. 

 

4. Cell state :

이전 상태에서 현재 상태까지 유지되는 정보의 흐름을 나타내다. 이를 통해 LSTM은 오래된 정보를 기억하고 새로운 정보를 적절하게 갱신할 수 있다. Cell state는 망각 게이트와 입력 게이트에서 두 번의 변화를 겪으며 그 결과가 입력값으로 들어가는 Ct이다. (그림의 노란색 상단 부분) 

 

따라서 LSTM은 RNN의 종류 중 하나로서 시퀀스 데이터 작업을 수행하는데 사용되는 모델이다. 장기 의존성 문제와 기울기 소실 문제를 해결할 수 있다는 특징이 있다.