프로그래밍 공부
카테고리
작성일
2024. 6. 18. 03:32
작성자
WDmil
728x90

순환신경망 (RNN)[Recurrent Neural Network]

자연어 처리문제와 시계열 데이터를 다루기에 최적화된 인공신경망이다.

 

시계열 데이터

  • 시간 축을 중심으로 현재 시간의 데이터가 이전 및 이후 시간의 데이터와 연관관계를 가지는 데이터.
  • 예 : 주식 가격, 음성 데이터, 자연어 데이터 등..

 

주식을 예로 들면

오늘의 주식 가격은 어제의 주식 가격과 연관되어있고,

내일의 주식 가격은 오늘의 주식 가격과 연관관계가 있다.

 

따라서 주식 가격은 시계열 데이터로 볼수 있다.

 


RNN 구조

RNN의 구조

 

기본 개념

  • 기본적인 인공신경망(ANN) 구조에 이전 시간의 은닉층 출력값을 현재 시간의 입력값으로 사용하는 경로가 추가된 형태이다.
  • 이러한 순환 구조는 시간에 따라 데이터를 처리하고 이전 상태의 정보가 현재와 미래 상태에 영향을 미치도록 한다.

수식

  • 은닉층 활성값 계산

    $ a_ {t}^{h} = \sum_{t=1}^{I}W_{ih}X_{i}^{t} + \sum_{h'=1}^{H}W_{h'h}b_{h'}^{t-1} $
    • $ X_{i}^{t}  $ : 시간 t에서 i번째 입력 데이터.
    • $ W_{ih} $ : 입력에서 은닉층으로 가는 가중치
    • $ b_{h'}^{t-1} $ : 이전 시간 ( t - 1) 의 은닉유닛 활성값.
    • $ W_{h'h} $ : 은닉 유닛간의 가중치
  • 활성 함수 적용

    $ b_{h}^{t} = \sigma _{h}(a_{h}^{t}) $
    • $ \sigma _{h} $ : 시그모이드 또는 ReLU와 같은 활성 함수.
  • 초기 은닉유닛 활성값

    $ b_{h}^{t} = 0 $
    • 보통은 위와같이 초기 은닉유닛의 경우 0으로 초기화한다.

    출력층

    • 출력값 계산
      • 은닉층으로부터 주어진 입력값과 가중치를 곱하고 합하여 출력값을 구한다.

        $ a_{k}^{t} = \sum_{h=1}^{H}W_{hk}X_{h}^{t} $
      • $ W_{hk} $ : 은닉층에서 출력층으로 가는 가중치.

    • 활성 함수 적용

      $b_{out}^{t} = \sigma _{out}(a_{out}^{t}) $
    • $ a_{out} $ : 출력층의 활성 함수.

     

    RNN의 장점

    • 메모리 효과:
      • 이전 상태의 정보를 저장하고 사용할 수 있는 메모리 형태를 가진다.
      • 시계열 데이터나 자연어 처리와 같은 앞뒤 문맥을 가지는 데이터를 다룰때 효과적이다.
    • 자연어 처리 예시
      • 예 : "푸른 하늘에 OO이 떠있다." 문장에서 OO에 들어갈 단어를 예측한다.
      • 앞뒤 문맥인 "푸른", "하늘", "떠있다" 라는 단어를 통해 OO에 "구름"이 들어갈 것을 예측할 수 있다.
728x90