딥러닝 프레임워크/자연어 처리

RNN (1)

Zoo_10th 2024. 4. 18.

1. RNN

RNN(Recurrent Neural Network)은 시퀀스 데이터를 처리하기 위해 설계된 인공 신경망 모델이다. 이 모델은 입력과 출력을 시퀀스 단위로 처리하며, 각 시퀀스는 연속된 데이터 요소(예: 단어)의 나열로 구성된다. 예를 들어, 기계 번역에서 입력 시퀀스는 번역하고자 하는 문장의 단어들이고, 출력 시퀀스는 그에 상응하는 번역된 문장의 단어들이다.

RNN은 내부에 순환 구조를 갖고 있어서 이전의 처리 상태를 기억하면서 다음 상태의 입력으로 활용할 수 있다. 이 특성 덕분에 RNN은 문맥이 중요한 언어 번역, 음성 인식, 시계열 예측 등 다양한 시퀀스 처리 작업에 널리 사용된다.

특히, RNN은 시퀀스의 길이에 상관없이 일정한 크기의 네트워크로 처리할 수 있는 능력이 있다. 이는 RNN이 가변 길이의 입력 데이터를 처리할 수 있도록 해준다. 그러나, 장기 의존성 문제(Long-Term Dependencies)가 발생할 수 있는데, 이는 시퀀스가 길어질 때 초기 입력 정보가 네트워크를 통해 약해지거나 손실되는 현상을 말한다. 이러한 문제를 해결하기 위해 LSTM(Long Short-Term Memory)과 같은 고급 RNN 모델이 개발되었다.

2. RNN의 이해

2-1. 순환 신경망(Recurrent Neural Network, RNN)

일반적인 신경망, 즉 피드 포워드 신경망(Feed Forward Neural Network)은 데이터를 입력받아 은닉층을 거쳐 활성화 함수를 통과한 값이 출력층으로만 전달된다. 하지만 순환 신경망(RNN)은 이와 다르게 동작한다. RNN에서는 은닉층의 각 노드가 활성화 함수를 거친 후 그 결과를 출력층으로 전송할 뿐만 아니라, 다음 계산을 위해 자신의 이전 상태를 입력으로 다시 사용한다. 이러한 순환 구조는 RNN이 시간에 따른 데이터의 연속성을 인식하게 해준다.

2-2. 은닉층의 구성과 순환 메커니즘

RNN의 구조에서 가장 중요한 부분 중 하나는 은닉층이다. 은닉층에서는 '셀(cell)'이라고 불리는 노드들이 포함되어 있으며, 이 셀들은 데이터를 시간에 걸쳐 처리하는 메모리 기능을 수행한다. 이러한 셀들을 '메모리 셀' 또는 'RNN 셀'이라고 부르며, 각각의 셀은 두 가지 주요 기능을 수행한다.

1) 상태 유지(State Keeping)

각 메모리 셀은 이전 시점의 자신의 상태(은닉 상태)를 저장하고 있으며, 이 상태 정보는 시간에 따라 정보를 유지하는 데 중요한 역할을 한다. 이는 셀이 이전 데이터의 영향을 받아 현재의 출력을 결정하는 데 필수적인 요소이다.

2) 현재 상태 계산(Current State Computation)

각 시점에서 메모리 셀은 두 가지 입력을 받는다. 하나는 현재 시점의 외부 입력(예: 현재 단어의 벡터)이고, 다른 하나는 이전 시점의 은닉 상태이다. 이 두 입력은 셀 내에서 특정 가중치와 함께 결합되어 새로운 은닉 상태를 생성한다. 이 과정에서 비선형 활성화 함수(주로 하이퍼볼릭 탄젠트나 시그모이드 함수)가 적용되어 다음 시점의 입력 처리를 위한 새로운 상태가 만들어진다.

3) 순환 연결과 정보 흐름

메모리 셀의 이러한 구조 덕분에 RNN은 시간에 따라 정보를 "순환"시킬 수 있다. 이전 시점의 은닉 상태가 현재 시점의 계산에 직접적으로 영향을 미치는 방식으로, 네트워크는 과거의 정보를 현재의 결정과 연결지을 수 있다. 이 순환적 정보 흐름은 특히 시퀀스 데이터의 내재된 패턴과 연속성을 학습하는 데 매우 유용하다.

이러한 메커니즘은 RNN이 시계열 데이터, 언어 모델링, 음성 인식 등의 다양한 분야에서 강력한 성능을 발휘하게 한다. 각 시점에서의 입력과 이전 은닉 상태의 통합적인 처리는 RNN이 시간적 맥락을 갖는 데이터의 복잡한 특성과 종속성을 이해하고 모델링할 수 있게 해준다.

3. 은닉 상태의 전달

RNN에서는 각 시점 t의 은닉 상태가 매우 중요한 역할을 수행한다. 이 은닉 상태는 해당 시점에서의 네트워크 상태를 요약하며, 과거의 정보를 담고 있다. 이전 시점 t−1의 은닉 상태는 현재 시점 t의 은닉 상태 계산에 필수적인 입력 데이터 중 하나다.

3-1.  은닉 상태의 중요성

은닉 상태는 RNN의 핵심적인 부분으로, 시간에 따른 의존성과 문맥을 모델링하는 데 필수적이다. 이를 통해 RNN은 복잡한 시퀀스 데이터에서 중요한 시간적 특성과 패턴을 인식하고 예측할 수 있다. 이러한 특성은 RNN을 자연어 처리, 음악 생성, 시계열 분석 등 다양한 분야에서 유용하게 만든다.

3-2. 은닉 상태 계산

각 시점에서 은닉 상태는 주로 두 가지 주요 요소로부터 계산된다. 현재 시점의 입력과 이전 시점의 은닉 상태. 이 두 정보는 셀 내의 가중치와 함께 결합되어 새로운 은닉 상태를 생성한다. 이 과정에서 적용되는 비선형 활성화 함수는 보통 하이퍼볼릭 탄젠트(tanh)나 시그모이드(sigmoid) 함수이다.

3-3. 정보의 순환

은닉 상태는 시점 간에 순환되어, 각 시점의 처리가 이전 시점의 출력에 의존하게 된다. 이 메커니즘은 RNN이 과거의 정보를 기반으로 현재의 출력을 조정할 수 있게 하며, 시간에 따른 데이터의 패턴을 학습하는 데 중요하다.

3-4.  최종 출력층으로의 전달

계산된 은닉 상태는 다음 시점의 입력으로 사용될 뿐만 아니라, 종종 네트워크의 최종 출력층으로도 전달된다. 출력층에서는 은닉 상태를 바탕으로 최종 예측이나 분류 결과가 생성된다. 이는 예를 들어, 문장의 다음 단어를 예측하거나, 입력 시퀀스에 대한 감정을 분류하는 작업에서 볼 수 있다.

4. RNN의 형태와 활용

RNN은 그의 유연한 구조로 인해 다양한 형태(many-to-many, one-to-many, many-to-one)로 구성할 수 있으며, 각 형태는 특정 작업에 적합하다.

4-1. One-to-Many: 이미지 캡셔닝 (Image Captioning)

이미지 캡셔닝은 하나의 이미지(단일 입력)에서 여러 개의 단어(시퀀스 출력)로 구성된 문장을 생성하는 과정이다. 이는 one-to-many 구조의 RNN을 사용하는 대표적인 예시이다. 여기서 RNN은 컨볼루션 신경망(CNN)에 의해 추출된 이미지의 특징을 초기 입력으로 받아, 이를 바탕으로 문장을 구성하는 각 단어를 순차적으로 생성한다. RNN의 순환 구조는 이미지에 대한 설명을 차례로 형성하는 데 필수적이며, 각 단어의 생성은 이전 단어에 기반한다.

4-2. Many-to-One: 감성 분석 (Sentiment Analysis)

감성 분석은 문장이나 문단 같은 텍스트 시퀀스(다수의 입력)를 받아 그 내용이 긍정적인지 부정적인지의 단일 결과(단일 출력)를 내는 작업이다. 이는 many-to-one 구조의 RNN에서 자주 볼 수 있다. RNN은 전체 텍스트를 거치면서 각 단어의 정보를 이전 단어들의 맥락과 함께 처리하고, 최종적으로 전체 텍스트의 감정을 판단하는 은닉 상태를 형성한다. 이러한 은닉 상태는 최종 출력층에서 긍정 또는 부정으로 분류된다.

4-3. Many-to-Many: 기계 번역 (Machine Translation)과 텍스트 생성 (Text Generation)

1) 기계 번역

하나의 언어로 된 문장(입력 시퀀스)을 다른 언어로 번역하는 문장(출력 시퀀스)으로 변환한다. RNN은 이 경우 many-to-many 구조로 작동하며, 일반적으로 두 개의 RNN이 인코더와 디코더 역할을 수행한다. 인코더 RNN은 입력 텍스트를 내부 은닉 상태로 변환하고, 디코더 RNN은 이 은닉 상태를 사용하여 대상 언어의 텍스트를 순차적으로 생성한다.

2) 텍스트 생성

RNN은 주어진 초기 텍스트나 조건에 기반하여 새로운 텍스트 내용을 계속 생성하는 many-to-many 구조로 사용된다. RNN은 입력된 텍스트의 스타일과 구조를 학습하고, 이를 기반으로 새로운 단어를 연속적으로 생성하여 문법적으로 타당하고 맥락적으로 일관된 내용을 만들어낸다.

5. 수식을 통한 RNN의 이해

5-1.은닉층의 계산

RNN에서 각 시점 t 에서 은닉 상태 h_t 의 계산은 다음과 같이 이루어진다. 이는 입력 벡터 x_t와 이전 시점의 은닉 상태 h_{t-1}에 각각의 가중치를 적용하고, 그 결과를 합한 후 비선형 활성화 함수를 적용하여 새로운 은닉 상태를 생성한다.

 - W_{hh}는 이전 은닉 상태에서 현재 은닉 상태로의 가중치 행렬이다.
 - W_{xh} 는 입력 벡터에서 은닉 상태로의 가중치 행렬이다.

 - b_h는 은닉층에 대한 편향 벡터다.

 - tanh 는 하이퍼볼릭 탄젠트 함수로, 은닉 상태의 각 요소에 대해 비선형 변환을 제공한다.

5-2. 출력층의 계산

RNN의 출력층에서는 최종 은닉 상태 h_t를 사용하여 최종 출력 y_t를 계산한다. 이 계산은 종종 다른 활성화 함수를 사용하여, 특정 작업에 적합한 출력 형식을 생성한다. 예를 들어, 이진 분류 문제에서는 시그모이드 함수를, 다중 클래스 분류에서는 소프트맥스 함수를 사용한다.

1) 이진 분류

2) 다중 클래스 분류

 - W_{hy}는 은닉 상태에서 출력 벡터로의 가중치 행렬이다.

 - b_y 는 출력층에 대한 편향 벡터다.

 - sigma 는 시그모이드 활성화 함수로, 출력을 0과 1 사이의 확률로 제한한다.

 - softmax는 소프트맥스 활성화 함수로, 다중 클래스 분류 문제에서 사용되며, 각 클래스에 대한 확률 분포를 생성한다.

728x90

'딥러닝 프레임워크 > 자연어 처리' 카테고리의 다른 글

LSTM (1)  (1) 2024.04.19
RNN 실습  (0) 2024.04.18
RNN 문자 생성  (0) 2024.04.18
자연어 처리 예제(1)  (0) 2024.04.17
자연어 처리(Text Mining)  (0) 2024.04.16

댓글