관리 메뉴

코딩 기록 저장소

[딥러닝] 순환 신경망(Recurrent Neural Network, RNN) 본문

개인 공부/인공지능

[딥러닝] 순환 신경망(Recurrent Neural Network, RNN)

KimNang 2024. 3. 27. 18:17

목차

     

     

    1. RNN (Recurrent Neural Network)

    01. RNN 개념

    - RNN(Recurrent Neural Network)는 가장 기본적인 인공신경망 시퀀스(Sequence) 모델

    - 시계열 또는 순차 데이터를 예측하는 딥러닝을 위한 신경망 아키텍처

    - 다양한 길이의 순차 데이터로 작업하고 자연 신호 분류, 언어 처리, 비디오 분석 등의 문제를 해결하는 데 특히 효과적임

    - 시퀀스를 처리하기 위해 고안된 모델을 시퀀스 모델이라고 하는데 그 중 RNN은 가장 기본적인 인공 신경망 시퀀스 모델

     

    02. RNN의 구조 및 형태

    RNN의 구조

    - 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로 보내면서, 다시 은닉층 노드에 입력값으로 보내는 특징

    - 입력층의 입력 벡터를 x, 출력층의 출력 벡터를 y라고 하고, 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드를 셀(cell)이라고 함
    - 각각의 시점(time step)에서 바로 이전 시점에서의 은닉층의 메모리 셀에서 나온 값을 자신의 입력으로 사용하기 때문에 "메모리 셀" 이라고 부르기도 함 (현재 시점을 t라고 표현함)

    - 메모리 셀이 출력층 방향 또는 다음 시점인 t+1의 자신에게 보내는 값을 은닉상태(hidden state)라고 함

    - t 시점의 메모리 셀은 t-1 시점의 메모리 셀이 보낸 은닉 상태 값을 t 시점의 은닉 상태 계산을 위한 입력값으로 사용하는 상태

    - RNN에서는 입력층을 입력 벡터, 출력층을 출력 벡터, 은닉층에서는 은닉 상태라는 표현을 주로 사용함

     

    RNN의 형태
    • 일대다 (one to many)
      - 하나의 입력값에 대해 여러개의 시퀀스한 벡터를 출력함
      - ex) 이미지 캡셔닝(Image Captioning)

    • 다대일 (many to one)
      - 여러개의 입력값에 대하여 1개의 벡터를 출력함
      - ex) 감정분석(Sentiment Analysis)

    • 다대다 (many to many)
      - 여러개의 입력값에 대하여 여러개의 벡터를 출력함
      - 시퀀스 투 시퀀스 (Sequence-to-Sequence)라고도 불림
      - ex) 문장 번역

     

    RNN 수식

    - 현재시점의 출력값을 도출하기 위한 활성화 함수로는 주로 하이퍼볼릭탄젠트 함수(tanh)를 많이 사용함

    - 이진 분류에서는 주로 로지스틱 회귀를 사용하여 시그모이드 함수를 사용, 다중 클래스 분류 문제에서는 소프트맥스 함수를 사용

    → 활성화 함수를 사용하는 이유 : 비선형적인 그래프를 그리기 위함

     

    장단점
    • 장점
      - 임의의 길이의 순차적인 입력을 처리할 수 있음. 입력과 출력의 길이가 유연하기 때문에 다양한 모델을 설계할 수 있음
      - 전 timestep에 걸쳐 같은 파라미터를 공유할 수 있음. 긴 입력값이 들어와도 모델 크기가 증가하지 않음
    • 단점
      - 이전 timestep이 모두 계산되어야 현재 timestep을 계산할 수 있어 다소 속도가 느림
      - 기울기 소실/발산 현상
      - 장기의존성 문제 (Long-Term Dependency)

     

     

    2. LSTM (Long Short Term Memory)

    01. LSTM 개념

    - RNN의 한 종류로 기존 RNN의 문제를 해결하기 위해 고안된 구조

      → "메모리 셀(Cell)"이라는 구조를 통해 정보의 저장과 삭제를 조절

      → 불필요한 정보를 잊고, 중요한 정보는 오래 보존할 수 있도록 설계

    - 이전 정보를 오랫동안 기억할 수 있는 메모리 셀을 가지고 있으며, 이를 통해 긴 시퀀스 데이터를 처리할 수 있음

     

    02. LSTM의 구조 및 형태

    LSTM의 구조

    - hidden state만이 아니라 cell state가 있으며 Forget gate, Input gate, Output gate를 통해 계산이 이루어짐

    - 어떤 정보를 잊을지 유지할지를 선택해 long term과 short term에 대한 정보를 고려할 수 있음

    - 게이트는 시그모이드(σ) 함수와 곱셈 연산을 통해 정보를 통과할지, 막을지를 결정함

    • 셀 상태(Cell State)
      - LSTM의 핵심 메모리 역할
      - 전체 시퀀스에 걸쳐 정보를 운반하면서, 게이트에 의해 업데이트되거나 유지됨

    • 게이트(Gates)
      - 망각 게이트(Forget Gate) : 과거 정보를 잊을지 말지 결정하는 과정
      - 입력 게이트(Input Gate) : 현재 정보를 저장할지 결정하는 과정
      - 출력 게이트(Output Gate) : 어떤 출력값을 출력할지 결정하는 과정

     

    LSTM의 형태

    - LSTM의 한 시점 t에서의 동작 과정

    1. 망각 게이트 (Forget Gate)
      - 과거 정보를 기억할지 잊을지를 결정하는 단계
      - 현재 시점 t의 x값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지나게 됨
      - 시그모이드 함수를 지나면 0과 1 사이의 값이 나옴 이 값이 곧 삭제 과정을 거친 정보의 양
      - 0에 가까울수록 정보가 많이 삭제된 것이고 1에 가까울수록 정보를 온전히 기억한 것
      - forget gate의 연산으로 나온 f(t)는 '과거 정보에 대해서 얼마나 잊었냐/기억하냐를 가지고 있는 값'


    2. 입력 게이트 (Input Gate)
      - 현재 정보를 잊거나 기억하기 위한 gate
      - 현재 시점 t의 x값과 입력 게이트로 이어지는 가중치 W(xi)를 곱한 값과, 이전 시점 t-1의 은닉 상태가 입력 게이트로 이어지는 가중치 W(hi)를 곱한 값을 더하여 시그모이드 함수를 지나는데 이를 i(t)라고 함
      - 그리고 현재 시점 t의 x값과 입력 게이트로 이어지는 가중치 W(xi)를 곱한 값과 이전 시점 t-1의 은닉 상태가 입력 게이트로 이어지는 가중치 W(hg)를 곱한 값을 더하여 하이퍼볼릭탄젠트 함수를 지나는데 이를 g(t)라고 함
      - 시그모이드 값은 0~1 사이의 값을, tanh는 -1~1 사이의 값을 갖기 때문에 0<i<1, -1<g<1을 만족
      - i(t)는 forget gate와 마찬가지로 0에 가까울수록 많은 정보를 삭제하는 것을 의미
      - 반면 g(t)는 -1~1 사이의 값을 갖는데 나중에 현재 정보를 cell state에 얼마나 더할지를 결정하는 역할


    3. 셀 상태 업데이트 (Cell State Update)
      - 입력 게이트에서 구한 i(t), g(t)에 대해서 원소별 곱(entrywise product)을 진행
          원소별 곱 : 같은 크기의 두 행렬이 있을 때 같은 위치의 성분끼리 곱하는 것
      - f(t)*C(t-1)의 계산을 통해 이전 시점의 cell 정보를 얼마나 유지할지를 구함
      - i(t)*g(t)를 통해 현재 기억할 정보를 구함
      - '과거에서 유지할 정보' + '현재에서 유지할 정보'를 통해 현재 시점의 cell state를 업데이트 함
      - 이 값은 다음 t+1 시점의 LSTM 셀로 넘겨짐


    4. 출력 게이트 (Output Gate)
      - 어떤 출력값을 출력할지 결정하는 과정
      - Cell 상태에 기반을 두지만 Filtered된 버전
      - Sigmoid층을 동작해서 어떤 부분을 출력할지 결정
      - tanh와 sigmoid 출력 게이트와 곱함

     

     

    3. GRU (Gated Recurrent Units)

    01. GRU 개념

    - RNN 계열의 또 다른 신경망 모델

    - LSTM과 비슷한 역할을 하지만 구조가 더 단순함

    - GRU는 장기 의존성 문제를 해결하기 위해 LSTM의 일부 기능을 제거하고, 하나의 업데이트 게이트와 리셋 게이트로 구성됨

    - 이로 인해 LSTM보다 계산이 간단하고 학습이 빠름

     

    02. GRU의 구조 및 형태

    GRU의 구조

    - 내부 메모리 값이 외부에서 보게되는 hidden state 값과 다르지 않음. LSTM에 있는 출력 게이트가 없음

    - 입력 게이트와 망각 게이트가 업데이트 게이트 z로 합쳐졌고, 리셋 게이트 r은 이전 hidden state 값에 바로 적용

    - 따라서, LSTM의 망각 게이트의 역할이 r과 z에 나눠졌다고 생각할 수 있음

    - 출력값을 계산할 때 추가적인 비선형 함수를 적용하지 않음

    • 게이트(Gates)
      - 리셋 게이트(Reset Gate) : 지난 정보를 얼마나 버릴지 결정
      - 업데이트 게이트(Update Gate) : 이번 정보를 얼마나 반영할지 결정

     

    GRU의 형태
    1. Rt : Reset Gate
      - 지난 정보를 얼마나 버릴지 결정함
      - 현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wr와 내적
      - 전 시점의 hiddenstate ht-1는 그 시점의 가중치 Ur와 내적
      - 마지막으로 두 계산이 더해져 sigmoid 함수에 입력 → 결과는 0~1사이의 값

    2. Zt : Update Gate
      - 이번 정보를 얼마나 반영할지 결정함
      - 현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wz와 내적
      - 전 시점의 hiddenstate ht-1는 그 시점의 가중치 Uz와 내적
      - 마지막으로 두 계산이 더해져 sigmoid 함수에 입력  → 결과는 0~1사이의 값

    3. ~h : 현재 시점에 과거의 메모리를 얼마나 사용할건지
      - 현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wh와 내적
      - 전 시점의 hiddenstate ht-1는 그 시점의 가중치 Uh와 내적하고 Rt(지난 정보 버림값)와 성분 곱
      - 마지막으로 두 계산이 더해져 tanh 함수에 입력
      → Rt, Zt 각각 현시점 인풋 Xt와 이전시점 hidden state ht-1을 weight와 곱한뒤 sigmoid 통과 시키는 구조
           다른 점은 연산되는 weight matrix 값이 다르다는 것

    4. h : 최종 메모리 정보
      - update gate 출력값 Zt (이전정보 얼마나 반영) 와 이전시점 hidden state ht-1를 성분 곱
      - update gate에서 버리는 값인 1-Zt (이전정보 얼마나 안반영) 와 현재시점 hidden state ht 을 성분 곱

     

     

     

     

     

     

    참고한 링크