RNN은 입력과 출력을 시퀀스 단위로 처리하는 시퀀스 모델입니다.
RNN은 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층으로 보내는 것과 동시에 다시 은닉층의 노드의 다음 계산의 입력으로 보내는 특징을 가지고 있습니다.


RNN의 수식은 다음과 같습니다.
hidden layer
output layer
BPTT는 RNN에서 사용하는 역전파 알고리즘입니다.
일반적인 역전파 알고리즘은 고정된 신경망으로 통해 학습을 진행하지만, RNN에서는 시간에 따라 정보가 순차적으로 전달되기 때문에 시간축에 따른 역전파를 사용합니다.
BPTT 작동 방식
RNN 모델은 입력과 출력의 크기에 따라 여러 종류로 분류됩니다.
입력 시퀀스가 주어지면 각 입력에 대응하는 출력 시퀀스를 생성합니다.
따라서 입력과 출력의 길이가 동일합니다.
입력이 순차적으로 주어지며, 모든 입력 시퀀스가 처리된 후 하나의 출력이 나옵니다.
하나의 입력에서 시작해 여러개의 출력 시퀀스를 생성하는 구조입니다.
입력과 출력이 각각 하나로 이루어져 있는 구조입니다.

Language model은 텍스트 데이터를 기반으로 단어 시퀀스의 확률 분포를 학습해 텍스트를 생성하는 모델이며 Sequence creation 과정에서 입력된 문맥을 기반으로 모델이 다음 단어를 예측하며 반복적인 예측을 통해 문장을 확장하는 방식으로 작동합니다,
토큰화 -> 모델 -> 손실 함수 과정을 거칩니다.
문장을 단어 별로 나누어 라벨링하는 과정입니다.
토큰화된 데이터를 입력받아 임베딩 벡터를 계산하고 RNN을 거쳐 문맥 정보를 파악합니다.
모델이 예측한 값과 실제 값 사이의 차이를 계산합니다.
일반적으로 교차 엔트로피 손실을 사용합니다.

RNN모델로 부터 시퀀스 데이터를 샘플링 하는 과정입니다.

단어 대신 문자 수준의 RNN을 만드는 것이다.

RNN 모델의 문제점은 이전 정보를 반복적으로 사용시 기울기가 너무 작이진다는 것 입니다.
해당 문제는 gradient clipping을 통해 어느 정도 해결 가능합니다.
GRU는 더 긴 시퀀스를 잘 처리할 수 있으며 Vanishing Gradient 문제를 해결할 수 있습니다.
GRU에서는 두가지 게이트를 사용하여 정보를 제어합니다.
업데이트 게이트: 현재 상태에서 이전 상태의 정보를 얼마나 유지할지를 결정합니다.
리셋 게이트: 이전 상태의 정보를 얼마나 버릴지 결정합니다.
리셋된 상태 계산: 리셋 게이트를 통해 이전 상태를 리셋합니다.
최종 은닉 상태 계산: 업데이트 게이트와 리셋된 상태를 결합하여 최종 은닉 상태를 계산합니다.

LSTM은 게이트 구조를 통해 중요한 정보를 장기적으로 기억하고 불필요한 정보는 삭제할 수 있습니다.
LSTM의 구조
셀 상태: 정보를 저장하고 전달하는 역할을 수행합니다
입력 게이트: 입력이 얼마나 셀에 추가될지를 결정합니다.
망각 게이트: 이전 셀 상태에서 얼마나 많은 정보를 잊을지를 결정합니다.
출력 게이트: 현재 셀 상태를 기반으로 다음 출력 상태를 얼마나 반영할지 결정합니다.
BRNN은 두개의 RNN을 사용하여 시퀀스를 처리합니다.

입력 시퀀스를 양방향으로 처리하여 더 풍부한 문맥 정보를 활용할 수 있는 모델입니다.
하지만 계산비용이 증가하고 복잡한 구조를 가지고 있는 단점이 존재합니다.
복잡한 특징을 학습하기 위해 RNN을 여러층으로 구성한 것이다.

각 층을 연결하여 이전 층의 은닉 상태를 입력 받아 다음 층의 은닉 상태를 계산합니다.
이러한 과정을 통해 추상화 레벨이 깊어질 수 있습니다.