[NLP 13] RNN(Recurrent Neural Network) 3 : RNN 심화 이론

방선생·2025년 1월 21일
0

Natural Language Processing

목록 보기
13/22

순환 신경망 - RNN (Recurrent Neural Network)

  • 입력 데이터의 순차적 특성을 학습하기 위해 반복 구조를 사용하는 신경망
  • 이전 상태의 정보를 현재 상태로 전달하며, 시계열 데이터, 자연어 처리 등 시간적 의존성이 있는 데이터를 처리하는 데 적합함
  • 입력과 출력이 시간에 따라 의존적이므로, 이전 단계의 정보를 다음 단계에 피드백하는 구조를 가짐

  • 데이터 전처리(토큰화 등)을 할때 데이터 벡터사이즈를 동일하게 맞춰주는것이 중요함



RNN의 입력층 (Embedding layer)

  • 시점 tt에서의 입력 xtx_t를 받음 (텍스트의 경우 단어 또는 단어 벡터를 입력 받을 수도 있음)

RNN의 은닉층 (RNN layer)

  • 은닉상태(hidden state) hth_t는 시점 tt에서의 입력 xtx_t와 이전 시점 t1t-1의 은닉 상태 ht1h_{t-1}를 결합 하여 계산됨
    • hth_tht1h_{t-1}와 현재 입력xtx_t를 결합하여 다음 시점에 전달되며, 이전 모든 시점에서 축적된 정보를 포함하여 은닉 상태를 유지함

  • RNN layer 기본 구조


  • 은닉층의 활성화 함수 (tanh - 하이퍼볼릭 탄젠트)
    • RNN의 대표적인 활성화 함수 (tanh Function)
      • 다른 모델같은 경우에는 잘 쓰이지 않음
    • tanh Function : 시그모이드 함수와 비슷, 출력 값이 -1과 1사이에 존재

  • 가중치 행렬(W)
    • WxW_xWhW_h는 일반적으로 값이 다름
    • b(bias)b(bias)에 경우 모델이 학습하면서 자동으로 조정되는 값임

Q) RNN layer에서 WhW_h를 곱하는 이유는?

  • tt가 진행될 수록 WhW_h를 해주지 않으면 벡터값이 그대로 계속해서 늘어남(벡터의 나열) 그렇기 때문에 과거의 값들 전부 묶어서 하나의 벡터로 압축하기 위해 WhW_h를 곱하는 것

  • 만약 WhW_h를 곱하지 않고, 단순히 입력 벡터를 더하기만 하면, 이전시점(ht1h_{t-1})의 정보가 현재 시점 tt의 계산에 반영되지 않게 됨 즉, RNN의 설계 목적에 맞지않음 (시간적 연속성을 반영하지 못하기 때문)

RNN의 출력층 (Dense layer)

  • Dense layer
    • RNN의 출력은 주어진 문제에 따라 달라짐
    • 마지막 은닉 상태 hTh_T를 기반으로 결과를 생성함
  • 완전 연결 계층(fully connected(fc) layer)
    • 결과 값을 출력하는 위치에서 사용, 신경세포(뉴런)의 기능 구현
    • 값이 둘중 하나만 출력된다(0 & 1) == 이진 분류 (binary classification)
    • 값이 여러개로 나온다 (0~1 사이의 값) = 다중 분류
    • y=w1x1+w2x2+...+wnxn+by = w_1x_1 + w_2x_2 + ... + w_nx_n + b (xx는 은닉층의 출력값)

  • 활성화 함수 (activation)
    • 입력 값을 출력 값으로 변환하는 함수
    • 입력의 총합의 결과를 시그모이드 함수의 넣고, 그 결과를 판단하여 출력함
    • Sigmoid 함수
      • zz == 입력의 총합
      • 값이 0~1사이의 값이 나오게됨
      • 0.5를 기준으로 정답 레이블을 0 과 1로 변환 해줘야 정확한 이진분류가 가능

  • softmax 함수
    • 이진 분류의 경우
    • 다중 분류의 경우
  • 다중분류에서 사용되는 활성화 함수
    • 분모 = 입력값의 합, 분자 = 해당 클래스
    • softmax 함수의 출력값은 항상 0과 1사이이며, 모든 출력값의 합은 항상 1임
    • 즉 softmax 함수는 입력값을 확률 분포로 변환하는 함수임
    • 출력층의 각 노드가 특정 클래스에 대한 확률을 나타내며, 예측된 클래스는 확률이 가장 높은 클래스로 예측됨
      • ex) 클래스 1의 확률이 0.7이고 클래스 2의 확률이 0.2라면, 모델은 클래스 1에 속할 가능성이 더 높다고 판단함

Q) RNN dense layer에서 Sigmoid함수의 0~1사이의 값을 다중 분류로 볼 수 있는가?

  • 다중 분류는 정답 레이블의 종류가 0&1 등 두 종류가 아닌 것들을 의미함

  • Sigmoid함수의 출력값은 모델이 예측한 값이며, 정답레이블(0 & 1)로 변환 되어 이중 분류를 함



최적화 함수 (optimizer)

  • 기본 : 경사 하강법
    • 수식
      • Wnew=WW_{new}= W - (learning_rate * 현재 가중치에서의 기울기)

  • 최적화 함수의 종류

  • SGD (Stochastic Gradient Descent)
    • 기본적인 경사 하강법. 전체 데이터 셋이 아니라 랜덤하게 선택한 미니 배치 또는 샘플 하나에 대해 기울기를 계산해 가중치를 업데이트함
  • Momentum
    • SGD의 단점을 개선. 이전 업데이트 방향을 고려하여 모멘텀(가속도)을 추가하고, 이전 기울기의 일부를 가중치 업데이트에 반영해, 진동을 줄이고 수렴 속도를 높임
  • AdaGrad (Adaptive Gradient Algorithm)
    • 모든 파라미터에 대해 개별적으로 적응형 학습률을 적용하여, 자주 업데이트되는 파라미터는 학습률을 줄이고, 덜 업데이트되는 파라미터는 학습률을 높이는 방식
  • Adam (Adaptive Moment Estimation)
    • RMSProp(학습률을 각 가중치에 대해 적응적으로 조정)과 Momentum(기울기의 1차 모멘텀과 2차 모멘텀을 모두 사용하는 기법)을 결합한 방법
  • RMSProp (Root Mean Square Propagation)
    • 기울기의 제곱 이동 평균을 사용해 학습률을 조정함. 학습이 오래된 정보를 덜 반영하고, 새로운 기울기 정보에 더 큰 비중을 둠



+ 역전파

  • 신경망 학습에서 모델이 예측한 값과 실제 값 사이의 오차를 계산하고 오차를 통해 가중치를 업데이트하는 방법

  • 경사 하강법과 함께 사용되어 가중치를 점진적으로 업데이트하여 예측 성능을 개선함
    • 순전파 > 오차계산 > 역전파 > 가중치 업데이트 순서로 진행됨

  • 순전파 (Forward Propagation)
    • 입력 데이터를 신경망에 통과 시키면서, 각 층의 가중치를 활용해 계산함 > 출력층에서 예측 결과가 출력됨
    • 오차 계산
      • 모델의 출력과 실제 값(레이블) 사이의 차이를 계산하여 오차를 구함(손실함수 계산)

  • 역전파 (Backpropagation)
    • 계산된 오차를 기반으로 각 가중치에 대해 손실 함수의 기울기를 계산함
    • 출력층부터 시작하여 입력층까지 거꾸로 전달됨
    • 기울기는 신경망의 각 가중치가 손실함수에 얼마나 영향을 미치는지 나타내며, 이를 통해 가중치를 업데이트함
    • 가중치 업데이트
      • 경사 하강법(Gradient Descent)을 사용해, 각 가중치를 손실이 줄어드는 방향으로 조정함

(제 지식의 한계로 수식까진 다루지 않겠습니다)
profile
AI & Robotics

0개의 댓글