JasonScript

Jason's Research Blog

Naver Boostcamp AI Tech/Level 1

< Boostcamp > Recurrent Neural Network

jason.bak 2023. 12. 27. 17:50

RNN

Sequential Model

시퀀스 데이터(sequence data)를 처리할 때 가장 큰 어려움은 데이터의 길이가 미리 정해져 있지 않다는 점입니다. 이는 데이터의 차원을 사전에 알 수 없다는 것을 의미하며, 이러한 특성 때문에 전통적인 완전 연결 계층(fully connected layers)이나 합성곱 신경망(CNN)과 같은 방법을 직접적으로 적용하는 데 한계가 있습니다.

시퀀스 데이터의 가변적인 특성을 다루기 위해, 우리는 입력 데이터의 정보량을 제한하는 방법을 사용합니다. 이를 수학적으로 표현하면, 특정 시점 $\tau$ 이전까지의 정보만을 입력으로 사용하는 것입니다. 이러한 접근 방식은 $AR(\tau)$로 표현됩니다.

$\tau = 1$로 설정하는 모델을 마르코프 모델(Markov model)이라고 합니다. 마르코프 모델의 주요 장점 중 하나는 그것의 결합 분포(joint distribution)를 표현하기가 상대적으로 간단하다는 것입니다. 그러나, 이 모델은 한 시점의 데이터만을 고려하기 때문에 많은 정보를 손실할 위험이 있습니다. 이는 시퀀스 데이터의 특성을 충분히 활용하지 못하는 결과를 초래할 수 있습니다.

잠재 자기회귀 모델(Latent Autoregressive Model)은 시퀀스 데이터를 처리하는 고급 방식 중 하나로, 특히 중간에 숨겨진 상태(hidden state)를 포함하는 것이 특징입니다. 이 숨겨진 상태는 과거의 정보를 요약하여 담고 있으며, 이를 '잠재 상태(latent state)'라고 부릅니다.

RNN

순환 신경망(RNN)은 시퀀스 데이터 처리에 사용되는 모델로, 다른 모델과의 주요 차이점은 자기 자신으로 돌아오는 피드백 루프가 있다는 것입니다. 이 특징 덕분에, RNN은 과거 데이터의 정보를 순차적으로 '기억'하면서 새로운 입력에 대해 반응할 수 있습니다.

 

RNN(Recurrent Neural Network)의 주요 단점은 장기적인 의존성(Long-term dependencies)을 포착하는 데 어려움을 겪는다는 것입니다. 즉, 먼 과거의 정보가 네트워크를 통과하면서 점차 희미해지고, 주로 최근 몇 시점의 정보(Short-term dependencies)에 집중하게 됩니다. 이러한 한계를 극복하기 위해 LSTM(Long Short-Term Memory)이 개발되었습니다. LSTM은 RNN의 구조를 개선하여 장기적인 정보를 보다 효과적으로 기억하고 활용할 수 있게 설계되었습니다. 이로 인해 LSTM은 복잡한 시퀀스 데이터, 특히 장기 의존성이 중요한 분야에서 RNN보다 우수한 성능을 보입니다.

RNN(Recurrent Neural Network)에서는 'W'라는 가중치가 시퀀스의 각 단계마다 반복적으로 사용되고, 이 과정에서 연속적으로 곱해지게 됩니다. 이러한 구조는 기울기 소실(Vanishing Gradient) 또는 기울기 폭발(Exploding Gradient) 문제를 일으킬 수 있습니다.

LSTM

 

LSTM(Long Short-Term Memory)은 RNN의 기울기 소실(Vanishing Gradient)과 기울기 폭발(Exploding Gradient) 문제를 해결하기 위해 개발된 모델입니다. LSTM의 독특한 구조는 이러한 문제를 완화하는 데 중요한 역할을 합니다.

 

LSTM은 내부에 게이트(gate) 메커니즘을 가지고 있습니다. 이 게이트들은 네트워크의 정보 흐름을 조절하여 필요한 정보를 유지하고 불필요한 정보를 제거합니다. 이를 통해 LSTM은 장기적인 의존성을 기억하는 데 필요한 기울기를 보존하면서도, 기울기 소실과 폭발 문제를 효과적으로 방지합니다.

  • 망각 게이트(Forget Gate): 과거 정보 중 현재에 불필요한 것을 잊게 합니다.
  • 입력 게이트(Input Gate): 새로운 정보를 셀 상태에 추가하는 역할을 합니다.
  • 출력 게이트(Output Gate): 다음 숨겨진 상태에 전달할 정보를 결정합니다.

GRU

 

GRU(Gated Recurrent Unit)는 LSTM과 유사한 목적으로 설계되었지만, 구조적으로 더 간결합니다. GRU는 두 개의 게이트, 즉 리셋 게이트(reset gate)와 업데이트 게이트(update gate)를 가지고 있으며, LSTM과 달리 별도의 셀 상태(cell state)를 갖지 않고 숨겨진 상태(hidden state)만을 유지합니다.


Transformer

트랜스포머(Transformer)는 순차적인 데이터 처리에 새로운 접근 방식을 제공하는 모델입니다. RNN과 같이 순차적으로 데이터를 처리하는 방식은 omitted sequence(생략된 시퀀스)나 permuted sequence(순서가 변경된 시퀀스)와 같은 복잡한 시퀀스 구조를 모델링하는 데 어려움이 있습니다. 트랜스포머는 이러한 한계를 극복하기 위해 등장했습니다.

Transformer

트랜스포머의 핵심 특징은 '어텐션 메커니즘(attention mechanism)'입니다. 이 메커니즘은 모델이 입력 시퀀스의 전체에 걸쳐 각 요소 간의 관계를 직접적으로 계산할 수 있게 해줍니다. 결과적으로, 트랜스포머는 시퀀스의 모든 부분을 동시에 처리할 수 있으며, 이로 인해 시퀀스 내의 복잡한 관계와 장기적인 의존성을 더 효과적으로 학습할 수 있습니다.

트랜스포머 모델을 이해하기 위해서는 세 가지 주요 요소에 대한 이해가 필요합니다.

  1. 인코더에서의 병렬 처리: 트랜스포머의 인코더는 입력 시퀀스의 단어를 한 번에 모두 처리합니다. 이는 RNN이나 LSTM과 달리 시간적 순서에 따라 한 단계씩 처리하는 것이 아니라, 모든 단어를 동시에 고려합니다. 이를 통해 트랜스포머는 각 단어 간의 관계와 전체적인 문맥을 효과적으로 파악할 수 있습니다.
  2. 인코더와 디코더 간의 정보 교환: 트랜스포머의 디코더는 인코더로부터 전달받은 정보를 사용하여 출력 시퀀스를 생성합니다. 이 과정에서 인코더와 디코더 사이의 어텐션 메커니즘을 통해 인코더가 처리한 정보가 디코더에게 전달됩니다. 디코더는 이 정보를 바탕으로 다음 단어를 예측하며, 이 과정이 반복됩니다.
  3. 디코더의 생성 작업: 디코더는 입력 시퀀스에 기반하여 새로운 출력 시퀀스를 생성합니다. 이 과정은 한 단어씩 순차적으로 이루어지며, 각 단계에서 디코더는 이전에 생성된 단어들을 고려하여 다음 단어를 예측합니다. 이때 디코더 내부의 어텐션 메커니즘이 이전 단어들의 정보를 활용하여 보다 정확한 예측을 가능하게 합니다.

Encoder

트랜스포머 인코더의 구성과 작동 방식을 이해하는 것은 모델의 전반적인 이해에 중요합니다.

  1. 인코더의 구성: 트랜스포머의 인코더는 크게 두 부분으로 구성됩니다: 셀프 어텐션(self-attention) 부분과 피드 포워드 신경망(Feed forward neural network)입니다.
  2. 단어의 벡터 변환: 처리를 시작하기 전에, 인코더는 먼저 입력된 각 단어를 특정 차원의 벡터로 변환합니다. 이 벡터 변환은 주로 단어 임베딩(word embedding) 과정을 통해 이루어집니다.
  3. 셀프 어텐션 메커니즘: 셀프 어텐션은 인코더 내에서 중요한 역할을 합니다. 이 메커니즘은 단어 벡터들 간의 관계를 파악하기 위해, 한 벡터(단어)만을 독립적으로 고려하는 것이 아니라, 입력 시퀀스의 모든 벡터를 동시에 고려합니다. 셀프 어텐션은 각 단어가 문장 내에서 다른 단어와 어떻게 관련되어 있는지를 파악하여, 이를 통해 각 단어의 문맥상 의미를 더 풍부하게 만듭니다.

  1. Query, Key, Value 벡터 생성: 각 단어의 벡터를 사용하여 Query, Key, Value라는 세 개의 벡터를 생성합니다.
  2. Score 벡터 계산: 각 단어(i번째)의 Query 벡터와 다른 모든 단어의 Key 벡터들과의 내적을 통해 Score 벡터를 계산합니다. 이 Score 벡터는 i번째 단어가 나머지 단어들과 얼마나 관련이 있는지를 나타냅니다.
  3. Score 벡터의 정규화: 구해진 Score 벡터를 Key 벡터의 차원의 루트 값으로 나누어 정규화합니다.
  4. Attention weights 계산: 정규화된 Score 벡터를 softmax 함수에 적용하여 attention weights를 계산합니다.
  5. 인코딩 벡터의 최종 계산: 구해진 attention weights를 각 단어의 Value 벡터와의 가중합으로 계산하여, 이를 해당 단어의 최종 인코딩 벡터로 사용합니다.

트랜스포머의 셀프 어텐션에서 Query와 Key 벡터는 내적을 계산해야 하기 때문에 두 벡터의 차원은 반드시 같아야 합니다. 이 일치하는 차원은 단어 간의 관계를 정량화하는 데 중요합니다. 반면, Value 벡터는 Query와 Key 벡터의 내적 결과인 attention weights와 가중합을 계산하는 데 사용되므로, 꼭 Query와 Key 벡터의 차원과 같을 필요는 없습니다. 이러한 유연성은 모델이 다양한 정보를 다룰 수 있게 합니다. 트랜스포머는 한 번에 여러 단어(n개)를 처리할 수 있지만, 입력 시퀀스의 길이가 길어질수록 처리할 수 있는 한계에 도달할 수 있습니다, 이는 메모리와 계산 리소스의 제약 때문입니다. 그러나 이 방식은 모델이 유연하고 다양한 정보를 표현할 수 있게 하며, 복잡한 언어 구조와 의미를 더 효과적으로 포착할 수 있게 합니다.

Multi-head attention

멀티-헤드 어텐션은 기본적인 어텐션 메커니즘을 여러 번 병렬로 수행하는 과정입니다. 이는 하나의 단어에 대해 다양한 관점에서의 어텐션을 적용할 수 있게 하여, 단어 간의 관계를 더 풍부하게 포착합니다.

Position encoding

포지션 인코딩은 트랜스포머 모델과 같이 순서 정보가 명시적으로 포함되지 않는 모델에 순차적인 정보를 주입하기 위해 사용됩니다. 이것은 단어의 순서나 위치에 대한 정보가 모델에 전달되지 않을 때 유용합니다.

 

Decoder

 

디코더에 입력되는 단어들로부터 생성된 Query 벡터와, 인코더에서 받아온 Key 벡터와 Value 벡터를 이용하여 최종 값을 계산합니다. 이 과정은 Autoregressive하게 이루어집니다. 즉, 디코더는 이전 단어들을 참고하여 다음 단어를 예측하고 출력합니다.

모델 학습 시에는 입력과 출력의 정답을 알고 있기 때문에, 이전 단어들만을 참고하고 뒤의 단어들은 참고하지 않도록 Masking을 수행합니다. 그런 다음 Q, K, V를 사용하여 Attention을 계산하고, 단어들의 분포를 생성한 뒤, 이 중에서 샘플링을 통해 최종 결과를 얻습니다.

'Naver Boostcamp AI Tech > Level 1' 카테고리의 다른 글

< Boostcamp > Convolutional Neural Network  (0) 2023.12.27
< Boostcamp > Optimization  (0) 2023.12.27
< Boostcamp > Numpy / Pandas  (0) 2023.12.27
< Boostcamp > Python 3  (0) 2023.12.27
< Boostcamp > 딥러닝 기초  (0) 2023.12.27