Deeplearning

RNN에서 디코더와 인코더

tir_hyun21 2024. 7. 13. 20:58

 

 

 

목차

 

 

 

RNN 기반 인코더

 

RNN 기반 인코더는 입력 시퀀스를 처리하여 고정 길이의 컨텍스트 벡터를 생성합니다. 수식은 다음과 같습니다:

상태 업데이트:

\( h_t = f(h_{t-1}, x_t) \)

여기서,

  • \( h_t \): 현재 시간 스텝 \( t \)의 상태 벡터
  • \( h_{t-1} \): 이전 시간 스텝 \( t-1 \)의 상태 벡터
  • \( x_t \): 현재 시간 스텝 \( t \)의 입력 벡터
  • \( f \): 상태 업데이트 함수 (예: RNN, LSTM, GRU 등)

최종 컨텍스트 벡터 계산:

\( c = h_T \)

여기서,

  • \( c \): 최종 컨텍스트 벡터, 인코더의 마지막 시간 스텝 \( T \)의 상태 벡터

설명:

  • \( h_t \): 현재 시간 스텝 \( t \)의 상태 벡터
  • \( h_{t-1} \): 이전 시간 스텝 \( t-1 \)의 상태 벡터
  • \( x_t \): 현재 시간 스텝 \( t \)의 입력 벡터
  • \( f \): 상태 업데이트 함수 (예: RNN, LSTM, GRU 등)
  • \( c \): 최종 컨텍스트 벡터, 인코더의 마지막 시간 스텝 \( T \)의 상태 벡터

RNN 기반 인코더의 작동 과정:

  1. 입력 임베딩: 인코더는 입력 시퀀스 \(\{x_1, x_2, \ldots, x_T\}\)를 받아들입니다.
  2. 상태 업데이트: 각 시간 스텝 \( t \)마다 상태 벡터 \( h_t \)를 업데이트합니다. 이전 상태 \( h_{t-1} \)와 현재 입력 \( x_t \)를 사용하여 새로운 상태 \( h_t \)를 계산합니다.
  3. 최종 컨텍스트 벡터 계산: 인코더의 마지막 시간 스텝 \( T \)에서의 상태 벡터 \( h_T \)를 최종 컨텍스트 벡터 \( c \)로 사용합니다. 이 벡터는 디코더로 전달되어 출력 시퀀스를 생성하는 데 사용됩니다.

이러한 인코더 구조는 입력 시퀀스를 효과적으로 처리하고, 입력 시퀀스의 중요한 정보를 압축하여 고정 길이의 벡터로 변환합니다. 이 벡터는 이후 디코더에서 출력 시퀀스를 생성하는 데 사용됩니다.

 

 

 

 

 

 

RNN 기반 디코더

RNN 기반 디코더는 이전 시간 스텝의 출력과 상태를 사용하여 현재 시간 스텝의 상태와 출력을 계산합니다. 수식은 다음과 같습니다:

상태 업데이트:

\( s_t = f(s_{t-1}, y_{t-1}, c_t) \)

출력 계산:

\( \hat{y}_t = g(s_t) \)

여기서,

  • \( s_t \): 현재 시간 스텝 \( t \)의 상태 벡터
  • \( s_{t-1} \): 이전 시간 스텝 \( t-1 \)의 상태 벡터
  • \( y_{t-1} \): 이전 시간 스텝 \( t-1 \)의 출력 (또는 디코더의 입력)
  • \( c_t \): 현재 시간 스텝 \( t \)의 컨텍스트 벡터 (필요에 따라 다름)
  • \( f \): 상태 업데이트 함수 (예: RNN, LSTM, GRU 등)
  • \( g \): 출력 계산 함수 (예: 선형 변환 및 softmax)

정리

디코더의 핵심 수식은 이전 상태, 이전 출력, (필요한 경우) 컨텍스트 벡터를 사용하여 현재 상태와 출력을 계산하는 것입니다. 디코더에서는 인코더의 출력을 기반으로 각 시간 스텝마다 다른 컨텍스트 벡터를 계산하여 디코더의 입력으로 사용합니다.

이러한 수식들은 디코더가 시퀀스 데이터를 효율적으로 처리하고, 특히 길고 복잡한 시퀀스에서 중요한 부분에 집중할 수 있도록 돕습니다.

```