Skip to content
Juhoon edited this page Jan 2, 2023 · 1 revision

Index

Topic

  • 개요: RNN을 포함한 여러 모델
  • RNN
    • 입력층, 은닉층, 출력층 (input, hidden, output)
    • RNN이 무엇인가
    • RNN의 종류
      • 깊은 순환 신경망 Deep RNN
      • 양방향 순환 신경망 Bidirectional RNN
    • Activation Function의 정의와 종류
      • sigmoid
      • tanh
      • softmax
    • Loss Function의 정의와 종류
      • MAE
      • MSE(RMSE)
    • BPTT
      • Gradient( golobal gradient, local gradient )
      • Computational Graph
  • 최적화 기법
    • 경사하강법
    • Momentum
    • AdaGrad
    • RMSProp
    • Adam
  • RNN의 문제점과 극복 대안(소개만)
  • 코드 예제 및 결과 분석

Intro

  1. Topology
    • 뉴럴 네트워크
    • RNN까지 발전 과정
  2. RNN을 포함한 모델 간단하게 소개

Topology

Neural Network(뉴럴 네트워크)

일정 역치에 따라 신호가 1이나 0인 사람의 뉴런을 따라 만든 인공 뉴런(퍼셉트론: 여러 가중치, 인자를 가지고 하나의 결과를 내보내는 것)이 있고 이를 여러 층으로 쌓은 것이 요즘의 뉴럴 네트워크라고 할 수 있습니다.

RNN

RNN은 Recurrent Neural Network의 약자로 이름처럼 반복되는 구조로 인해 이전 상태의 값을 알기때문에 순차적인 데이터에 적합합니다. 예를들어 시계열 데이터, 텍스트(문장) 데이터 등이 있습니다.
RNN에선 은닉층이 다음 결과를 예측하는데 중요하게 사용됩니다. 은닉층의 결과값이 다음 데이터의 예측에 영향을 미치기 때문입니다.

RNN의 학습 흐름에 대해 알아보도록 하겠습니다. 먼저 RNN은 Activation Function을 사용해 여러 가중치와 데이터를 하나의 정리해 출력할 수 있습니다. 이렇게 은닉층에서 계산된 값은 모델에 따라 여러개의 출력이 될 수도 있고 하나의 출력이 될 수도 있습니다. 이후 출력된 값을 Loss Function이라는 손실함수를 통해 정답과 얼마나 다른지 손실률을 계산하고 역전파 과정을 통해 각 가중치가 결과에 미치는 영향을 계산후 이 계산한 값을 최적화 기법에 적용해 가중치를 갱신하게 됩니다.

ANN CNN DNN RNN

ANN ( Artificial Neural Network )

  • 기본 구조
  • 최적값 찾기 어려움
  • Overfitting
  • 학습이 오래걸림

DNN ( Deep Neural Network )

  • 은닉층이 여러개 있는 것
  • DNN을 응용한 것이 CNN, RNN(Deep Recurrent Neural Network)

CNN ( 합성곱신경망 : Convolution Neural Network )

  • Convolution: 데이터 추출 과정, 각 성분의 인접 성분을 조사해 특징을 파악하고 파악한 특징을 한장으로 도출시키는 과정
  • Pooling: Convolution과정을 거친 레이어의 사이즈를 줄이는 과정, 데이터 사이즈 감소 및 노이즈 상쇄
  • 정보추출, 문장분류, 얼굴인식 등에서 사용

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

  • 반복적이고 순차적인 데이터학습에 특화
  • 과거의 학습을 현재 학습에 반영
  • 기존의 순차적 데이터학습의 한계를 해결
  • 시간에 종속되어 시계열 데이터 분석에 용이
  • 음성 웨이브폼, 텍스트 앞 뒤 성분 파악

RNN의 종류

  • Deep RNN
  • Bidirectional Recurrent Neural Network

Activvation Function

  • 이진 분류를 해야하는 경우라면 출력층의 로지스틱 회귀(ex. Sigmoid함수)

  • 다양한 카테고리 중에서 선택해야하는 문제라면 Softmax 함수

  • 10가지 분류라면 n은 10이다 그리고 각 출력은 0~1을 가지고있고 10개를 모두 더하면 1이 된다.

  • 즉, 각 출력은 각 항목에 대한 확률이라고 할 수 있다.

출력층 Activation Function

  • 연속형 변수에 대한 예측값은 항등함수(linear), Keras의 Dense에서 Default 값!
  • 두가지 이진 출력은 logistic == Sigmoid
  • 3개 이상의 다중 Class로 분류하는 경우에는 softMax를 사용

지표

  • 분류의 성능 평가 지표: 정확도(Accuracy), 오차 행렬(Confusion Matrix), 정밀도(Precision), 재현율(Recall), F1 score, ROC AUC
  • 회귀의 손실함수: 대부분 실제 값과 예측값의 오차에 기반한 평가 (MSE, MAE)

회귀 지표(손실 함수)

손실함수의 의미

L: 손실함수 arg min: argument of minimu: 목적함수의 최소가 되기위한 입력을 찾는 것. 여기서는 손실함수 L이 목적함수가 된다.
x: 학습데이터 입력값
y^: x로부터 얻어진 예측값
y: 학습데이터의 정답
𝜃: 모든 파라미터의 vector 𝜃 ̃: 새로운 추정 파라미터
x,y는 고정된 값임으로 최적의 추정 파라미터를 찾는 것

MAE (Mean Absolute Error): 실제 값과 예측값의 차이를 절댓값으로 변환해 평균한 것

  • 손실함수가 오차와 비례하여 일정하게 증가
  • 오차가 큰 값이 와도 비슷한 미분값을 도출 가능(MSE는 제곱에 비례해 크게 변화)

MSE (Mean Squared Log Error): 실제 값과 예측값의 차이를 제곱해 평균한 것

  • 오차가 커질수록 손실 함수 값이 빠르게 증가하는 특징
  • RMSE (Root Mean Squared Eerror): MSE 같은 오류의 제곱을 구할때 실제 오류 평균보다 더 커지는 특성이 있으므로 MSE에 루트를 씌운 것
  • R 제곱: 분산 기반으로 예측 성능을 평가한다. 실제 값의 분싼 대비 예측값의 분산 비율을 지표로 하며, 1에 가까울 수록 예측 정확도가 높다.
    R 제곱 = 예측값 Variance / 실제값 Variance
  • MAE와 MAE는 절대적인 값으로 비교(9와10의 차이, 999와 1000의 차이)로 비교해 더 큰 에러를 감지할 수 없는데 해결을 위해 weight를 적용한 것인 MSPE, MAPE가 있다.

BPTT

  • RNN은 역전파 과정을 통해 최적의 파라미터를 찾아 업데이트
  • 연쇄 법칙을 통해 global gradient에 local gradient를 곱해 계산
  • Computational Graph를 통해 설명 가능
  • (𝜎L/𝜎X) -> X가 L에 미치는 영향!

역전파를 하는 이유

  • 각 파라미터가 LossFunction에 어떤 영향을 미치는지 알아내고 값을 업데이트하기 위함.

최적화 기법

경사하강법

새로운 가중치 = 기존가중치-학습률*(기존 가중치 gradient)
W(t) = W(t-1) * ⛛W(t-1)

문제점

  • Local Minimun: 최적의 값인 Global Minimum에 가지 못하는 경우가 있다.(비볼록 함수: 파라미터의 시작에 따라 최적이 아닐 수 있음.)

Momentum

이동시에 관성을 부여하는 기법
v(t) = 관성계수 * v(t-1) + 학습률 * ⛛F(X(t-1))
X(t) = X(t-1) - v(t)
관성계수는 보통 0.9

AdaGrad

계속 학습이 진행될 때, 학습률이 꾸준히 감소하다가 0이 되는 것

RMSProp

AdaGrad의 한계를 개선한 해결책
Feature마다 동일한 학습률을 적용하는 것은 비효율적임으로 AdaGrad를 적용해 Feature별로 학습률을 다르게 조절
학습률이 너무 작으면 학습 시간이 길고 너무 크면 제대로된 학습이 이루어지지 않음으로 AdaGrad는 학습률 감소를 이용 최근 기울기는 많이 적용, 과거의 먼 기울기는 조금 반영

Adam

Momentum과 RMSProp의 장점을 결합한 알고리즘
Momentum의 장점 + RMSProp의 장점 (이전 방향의 관성 적용 + 파라미터마다 다른 크기의 학습률 적용) 알려진 가장 좋은 파라미터: 학습률0.001, momentum 지수이동평균 0.9,RMSProp의 지수이동 평균 0.999

더 좋은 기법으로 RAdam, AdamW 같은 것도 있다고 함

코드 예제

  • tensorflow 기본 예제
  • Sign 그래프 분석
    • SimpleRNN -> Dense(1)
    • Deep RNN
    • test 그래프 및 결과 비교
    • Loss 그래프

문제점

Gradient vanishing, exploding
기울기 소실, 폭주

  • sigmoid나 tanh의 미분값이 계속해서 곱해짐으로 역전파가 이뤄질수록 값이 매우 작아짐(그나마 sigmoid는 기울기가 00.25고 tanh는 01), 그나마 tan값이 0~1임으로 sigmoid보단 먼저 사용
  • 이후 학습률을 곱해 파라미터 업데이트시 거의 변하지가 않음(최적의 값에 도달하지 못함.)
  • 반대로 기울기가 너무 커질 수도 있다.

해결법

  • LSTM, GRU 등의 대안
  • ReLu, LeakyRelu 등이 있는데 RNN에서는 계속해서 이전의 값을 사용함으로 Cx1 * Cx2 * Cx3 = C³X 가 되어 Layer를 쌓지 못하고 발산하게 되어 사용할 수 없다. (RNN에선 사용X)
  • gradient Clipping : 기울기가 임계값을 넘지 않도록 자르는 것
  • Weight initialization(가중치 초기화) : 초기의 가중치를 적절히 배치
  • Batch Normalization(배치 정규화): mini-batch에 대해 activation function에 넣기 전 정규화
  • Layer Normalization(층 정규화): 배치 정규화와 비슷하지만 feature 단위로 정규화

기울기소실 참조 링크

Overfitting ( 과적합: 학습 데이터에만 맞춰진 것, 테스트 데이터에는 잘 맞지 않을 수 있다.)

  • 해결법
    • 모델 단순화
    • 데이터 양 늘리기
    • Loss function에 가중치 규제
    • DropOut(RNN에서는 적합하지 않다: 이전의 정보를 반영하는 RNN 특성상 Dropout시 과거의 정보가 통째로 지워질 수 있기 때문)

과적합 참조 링크

Weak1 Trouble Shooting

  • Apple M1 Mac의 Tensorflow 설치
    • Conda로 설치하는 라이브러리가 약간 다음
    • 최신 버전은 충돌이 발생해 Tensorflow
    • 2.9.0 버전을 사용
  • 입출력 데이터가 너무 큰 문제
    • 데이터를 정규화해서 사용