Notice
Recent Posts
Recent Comments
Link
12-19 23:36
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

AI 전문가가 되고싶은 사람

RNN(Recurrent Neural Networks) 본문

논문

RNN(Recurrent Neural Networks)

Kimseungwoo0407 2024. 11. 18. 20:49

https://seungwoo0407.tistory.com/62

 

Transformer 리뷰를 위한 공부

신경망과 시퀀스 모델 학습Transformer의 등장 배경인 RNN 계열 모델과 Attention 메커니즘을 이해합니다.필수 학습 주제RNN (Recurrent Neural Networks): 순차 데이터 처리 기초https://seungwoo0407.tistory.com/63 RNN(R

seungwoo0407.tistory.com

첫 번째 과제인 RNN 공부 시작해보겠습니다.

해당 영상을 바탕으로 공부하였습니다.

https://www.youtube.com/watch?v=OkTyY28XMuQ&t=182s

 

RNN의 특징과 활용 사례

RNN(순환 신경망)은 시계열 데이터와 순차적인 정보 처리에 특화된 모델이다. 이를 통해 순차적인 데이터에서 시간적 의존성을 학습할 수 있다. 예를 들어, 주식 가격 예측에서는 이전 날의 주식 가격이 오늘의 주식 가격에 영향을 미치기 때문에 RNN은 이러한 시간적 패턴을 잘 포착한다.

또한 문장 내 단어 간의 관계를 분석할 때도 유용하다. 예를 들어, 번역 시스템에서는 문맥을 이해하고 각 단어가 다른 단어들과 어떤 관계를 갖는지 파악하는 데 RNN이 중요한 역할을 한다.

https://jiho-ml.com/weekly-nlp-10/


RNN의 동작 원리

https://www.geeksforgeeks.org/introduction-to-recurrent-neural-network/

RNN은 각 입력 데이터에 대해 순차적으로 계산을 수행하며, 이전 입력의 영향을 반영할 수 있는 Hidden State를 유지한다. 예를 들어, 문장 "I am learning AI"에서 'learning'이라는 단어가 나오면, RNN은 앞서 나온 'I'와 'am'의 정보를 고려하여 'learning'의 의미를 보다 정확하게 파악한다.

RNN은 시간에 따라 정보를 기억하고 그 정보를 바탕으로 새로운 데이터를 처리하는 방식을 통해 데이터의 흐름을 이해한다.


 

RNN의 기본 구조

RNN의 기본 구조는 각 시점에서 입력 벡터를 받아들여 그에 해당하는 Hidden State를 갱신한다. 그 후, 갱신된 Hidden State를 이용해 출력 벡터를 계산한다. 각 시점마다 갱신되는 Hidden State는 현재 입력뿐만 아니라 이전 상태의 정보도 반영하기 때문에, RNN은 연속적인 데이터의 패턴을 학습할 수 있다.

예를 들어, "I love AI"라는 문장을 처리하는 RNN이라고 할 때, I라는 단어를 입력 받고 I에 해당하는 벡터를 처리하게된다. 이후 Hidden State를 업데이트한 뒤 Hidden State는 I라는 단어의 정보를 기억하는 역할을 한다. 그 다음으로 'love'라는 단어가 입력 됐을 때 I라는 이전 단어의 정보를 바탕으로 새로운 Hidden State를 계산한다. 즉 "I love"라는 구를 이해하려고 한다. 마찬가지로 AI라는 단어가 입력됐을 때 AI와 I love라는 이전 단어들의 정보를 결합하여 문장의 전체 의미를 파악하려고 한다.


 

역전파( Backpropagation Through Time, BPTT)의 개념과 작동 원리

https://www.geeksforgeeks.org/introduction-to-recurrent-neural-network/

RNN의 학습은 역전파 과정으로 이루어진다. 전통적인 신경망에서는 오류를 역전파하여 가중치를 업데이트하는 방식이 사용되지만, RNN에서는 시간을 따라 흐르는 데이터의 특성 때문에 BPTT라는 기법을 사용한다. BPTT는 순차적으로 처리된 데이터의 오류를 역으로 전파하여 각 시점에서 가중치를 조정하는 방식이다. 이 과정을 통해 RNN은 과거의 정보를 적절히 반영하면서 가중치를 업데이트할 수 있다.

먼저, Forward Pass 단계에서 입력 데이터를 시퀀스 순서대로 모델에 입력하고 출력값을 계산한다. 이때 RNN의 각 시점에서 발생한 출력과 Hidden State를 저장하며, 입력된 단어들이 시간에 따라 처리된다. 예를 들어 "I love AI"라는 문장에서 각 단어는 하나씩 모델에 입력되어 처리되고, 이 과정에서 각 시점마다 Hidden State가 갱신된다.

그 다음, 오차 계산 단계에서는 모델의 예측값과 실제값 사이의 차이를 손실 함수를 통해 계산한다. 예를 들어, 텍스트 생성 모델에서는 실제 단어와 예측된 단어 간의 차이를 계산하여 오차를 구한다.

역전파 단계에서는 계산된 오차를 역으로 전파하여 가중치를 업데이트한다. 하지만 RNN에서는 "시간"이라는 차원이 있기에 이전 시점의 정보가 현재 시점에 영향을 미친다. 예를 들면, 첫 번째 시점에서 발생한 오류는 두 번째 시점의 가중치에 영향을 미치고, 두 번째 시점에서 발생한 오류는 세 번째 시점의 가중치에 영향을 미친다. 이렇게 시점 간의 연쇄적 의존성에 따라 각 시점의 가중치를 업데이트해야 한다.

기울기 계산 단계에서는 각 시점에서 계산된 기울기를 바탕으로 가중치를 업데이트한다. 이때 기울기는 손실 함수의 기울기를 기준으로 계산되며, BPTT는 이 기울기를 시간에 따라 전파하여 과거 시점에서의 오류까지 고려해 가중치를 업데이트한다. 예를 들어, 3번째 시점에서의 오류는 1번째 시점까지 거슬러 올라가면서 기울기를 계산하고 가중치를 업데이트한다.

마지막으로, 가중치 업데이트 단계에서는 계산된 기울기를 바탕으로 가중치를 업데이트한다. 이 과정은 경사하강법을 사용하여 가중치를 수정하는 방법으로, 모든 시점에서 가중치가 업데이트된다.

BPTT의 주요 장점은 시간에 따른 연쇄적 의존성을 잘 반영하여, 시퀀스 데이터를 처리하는 데 적합하다는 점이다. 하지만 기울기 소실 문제와 기울기 폭발 문제를 겪을 수 있다.

이는 시퀀스가 길어질수록, 초기 시점의 오류가 후속 시점에 미치는 영향이 줄어들거나, 기울기가 너무 커지는 문제를 발생시킬 수 있다.

https://medium.com/@amanatulla1606/vanishing-gradient-problem-in-deep-learning-understanding-intuition-and-solutions-da90ef4ecb54

이러한 문제를 해결하기 위해 LSTM이나 GRU와 같은 변형된 RNN 모델들이 개발되었다. 이들 모델은 기억 장치와 게이트를 사용해 중요한 정보를 장기간 기억하거나 불필요한 정보를 잊어버리도록 설계되어 더 효과적인 학습이 가능하다.


 

마무리

BPTT는 RNN에서 시계열 데이터를 처리하는 중요한 학습 알고리즘이다. 이 알고리즘은 시간에 따른 데이터를 순차적으로 처리하고, 이전 시점의 정보를 바탕으로 현재의 예측을 개선하는 데 핵심적인 역할을 한다. 이를 통해 RNN은 단어 간의 관계를 학습하거나 주식 가격 예측과 같은 시계열 데이터에서 중요한 패턴을 인식할 수 있다.

하지만 기울기 소실과 기울기 폭발 문제와 같은 단점도 존재하기에 이후 LSTM과 GRU와 같은 개선된 모델을 리뷰할 것이다. 원리를 이해하였기에 실습을 통해 적용해 보는 것이 중요하다고 생각하여 다음 글은 실습해보는 것으로 해야겠다.