[강의 요약] 패캠 시계열 분석 - Part5. 딥러닝을 이용하여 정교하게 예측하기

Ch 2. 어서와, 인공신경망은 처음이지?

인공신경망(뉴럴 네트워크) 개념 소개

  • 다층 퍼센트론(Multi-Layer Perceptron)
    • 입력층 하나와 은닉층(Hidden Layer)이라 불리는 하나 이상의 층과 출력층으로 구성
    • 출력층을 제외하고 모든 층은 편향 뉴런을 포함하여 다음층과 완전히 연결
    • 인공신경망의 은닉층이 2개 이상일 때 심층 신경망(DNN)이라 부른다
  • 역전파(Backpropagation)
    • 다층 퍼센트론을 효율적으로 학습시킬 수 있는 알고리즘
    • 각 훈련 샘플에 대해 역전파 알고리즘이 먼저 예측을 만들고(정방향), 오차를 측정하고, 그 다음 역방향으로 각 층을 거치면서 각 연결이 오차에 기여한 정도를 측정(역방향)
    • 이 오차가 감소하도록 가중치(weight)를 조금씩 조정 <-- 경사하강법

기본 구조(1): 입력층, 은닉층, 출력층

  • 입력층
  • 은닉층
    • 데이터의 입출력 과정에서 직접 보이진 않지만 숨겨진 특징을 학습하는 역할
  • 출력층

기본 구조(2): Activation Function

활성화 함수

  • 딥러닝 네트워크에서는 노드에 들어오는 값들에 대해 곧바로 다음 레이어로 전달하지 않고 주로 비선형 함수를 통과시킨 후 전달한다
  • 이때 사용하는 함수를 활성화 함수(Activation Function) 이라 부른다

은닉층

  • 하이퍼볼릭 탄젠트 함수: tanh(𝒵) = 2σ(2 𝒵) - 1.
    • 시그모이드(Sigmoid) 함수를 보완
    • 출력범위가 -1 ~ 1 사이이기 때문에 훈련 초기에 각 층의 출력이 다소 정규화되는 경향(원점 주의로 몰리게 되는 경향)
  • ReLU (Rectified Linear Unit) 함수: ReLU(𝒵) = max(0, 𝒵)
    • 계산속도가 빠르다는 장점, 출력에 최댓값이 없기 때문에 경사하강법의 문제를 완화(편평한 지역에서 심하게 지체되지 않는다)
    • 과거에는 Sigmoid 함수를 많이 사용했지만 최근에는 ReLU가 딥러닝에 더 적합하다고 알려져 많이 쓰이는 추세
    • Sigmoid 함수와 tanh 함수는 입력값 x가 너무 커지거나 너무 작아지면 그래프의 미분값(기울기)이 0이 되는 문제가 발생하는데, ReLU는 입력값 x가 0보다 작으면 미분값이 0이이지만 0보다 클 경우 입력값이 아무리 커져도 미분값이 1인 상태가 유지되기 때문에 Vanishing Gradient 가 발생할 확률이 적다
    • "Dying Neuron" 현상

출력층

  • 소프트맥스 활성화 함수
    • input값을 [0,1] 사이의 값으로 모두 정규화하여 출력하며, 출력값들의 총합은 항상 1이 되는 특성을 가진 함수
    • 다중분류에 사용: 2개 클래스 대상으로 정의하던 logit을 K개의 클래스를 대상으로 일반화하면 softmax함수가 된다

기본 구조(3): 손실함수, 경사하강법, Optimizer

손실함수(Loss Function)

  • 측정한 데이터를 토대로 산출한 모델의 예측값과 실제값의 차이를 표현하는 지표
    • MSE(Mean Squared Error)
    • 크로스 엔트로피 (Cross-Entropy)

Optimizer

  • 손실함수의 값이 최대한 작아지도록 모델 파라미터들을 조정
  • 손실함수를 줄여나가면서 학습하는 방법은 어떤 optimizer를 사용하느냐에 따라 달라진다
    • Adam Optimizer

경사하강법(Gradient Descent)

  • 함수의 기울기(경사)를 구하고 경사의 절댓값이 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복
  • Local Minima

Learning Rate (epsilon)

Ch 3. 심층신경망(Deep Neural Network)

기존 뉴럴네트워크 모델의 단점

  • 계산비용, 계산인프라의 부족
  • 오차 역전파
    • Learning Represntations by Back-propagating Errors (1986)

합성곱 신경망(CNN)

컨볼루션 신경망

  • 이미지 분야를 다루기에 최적화된 신경망 구조
  • 컨볼루션층(Convolution Layer)
    • 컨볼루션 연산을 통하여 이미지의 특징을 추출하는 역할
  • 컨볼루션(합성곱)이란?
    • 커널(kernel) 또는 필터(filter)라 불리는 윈도우 사이즈만큼의 X*X 크기의 행렬을 Y * Y 크기의 부분과 곱해서 모두 더하는 연산
    • 행렬곱의 결과로 이미지 행렬의 X * X 크기 부분의 값들은 모두 더해져 하나의 값으로 모아짐
    • 이 행렬곱을 Y * Y 크기의 이미지 행렬의 가장 왼쪽 위부터 가장 오른쪽 아래까지 순차적으로 수행하는 연산
  • 컨볼루션층(Convolution Layer)과 풀링층(Pooling Layer) 두 종류 층을 포함하는 순방향 신경망(Feed-forward Neural Networks)
  • 전처리 과정을 추가한 다층 퍼셉트론의 한 종류로 2차원 데이터의 입력과 훈련에 용이하고 적은 매개변수만이 필요하다는 장점
  • 컨볼루션층(Convolutional Layer)과 풀링층(Pooling Layer), 완전연결층(Fully-Connected Layer)으로 구성되어 있으며, 입력층 이후에 합성곱층과 풀링층이 반복되며 마지막 첫번째 또는 두번째 층에서 완전연결층으로 진행하도록 구성
  • 이미지와 영상 및 음성 인식과 같은 분야에서 좋은 성능

CNN 기본 개념

  • 풀링층(Pooling Layer)
    • 풀링 or 서브샘플링
    • 차원을 축소하는 역할
    • 이미지의 X * X 크기 부분에서 가장 큰 값 하나를 추출해서 원본 이미지의 X * X개의 값을 1개의 값으로 축소
    • Max Pooling, Average Pooling, Min Pooling
    • 컨볼루션에서는 주로 Max Pooling 이용
  • 스트라이드: 건너뛰는 정도
  • 패딩(Padding)
    • 컨볼루션 레이어에서 필터와 스트라이드를 적용하여 나오게 되는 Feature Map의 크기는 입력 데이터보다 작게 됨
    • 이 때 컨볼루션 레이어의 출력 데이터가 줄어드는 것을 방지하는 방법이 패딩
    • 입력 데이터의 외곽에 지정된 픽셀만큼 특정값으로 채워넣는 것을 의미
    • 제로패딩: 풀링을 거친 값의 차원이 정수로 나누어 떨어지지 않을 수도 있기 때문에 인풋 이미지의 상하좌우 모서리에 0을 채워줌
  • 채널
    • 흑백 이미지는 채널이 1개지만, 컬러 이미지는 채널이 3개(R, G, B)

CNN 1d, 2d, 3d

  • 1D CNN
    • 이미지가 아닌 시계열 분석 (time-series analysis)나 텍스트 분석을 하는데 주로 많이 사용된다
    • 합성곱을 위한 커널과 적용하는 데이터의 sequence가 1차원의 모양을 가짐
    • 컨볼루션이 움직이는 방향이 한 방향이기 때문에 1D로 이해해도 무방함
    • 2D CNN의 입출력 데이터는 3차원이었듯이, 1D CNN의 입출력 데이터는 2차원
  • 3D CNN
    • 3D CNN의 입출력 데이터는 4차원이며 주로 3D 이미지 데이터 (MRI, CT 스캔) 분석에 사용

Ch 4. CNN 분류모형 예시

텐서플로의 간단한 소개

  • 텐서(tensor): 행렬로 표현할 수 있는 2차원 형태의 배열을 높은 차원으로 확장한 다차원 배열
  • 텐서플로의 계산은 데이터 흐름 그래프(dataflow graph)로 이루어진다
  • 즉, 텐서 형태의 데이터들이 딥러닝 모델을 구성하는 연산들의 그래프를 따라 연산이 일어나기 때문에 텐서플로라는 이름이 붙은 것
  • 텐서플로의 기능
    • 사전학습 모델 제공
    • 고수준(High-level) API 제공: 텐서보드 및 Keras와 같은 추상화 라이브러리 제공

하이퍼 파라미터 소개

은닉층의 수와 유닛 수

  • 보통 각 은닉층의 뉴런은 정규화 기술이 적용되어 모델의 정확도를 높이는데 기여
  • 뉴런의 개수와 레이어의 깊이는 오버피팅 혹은 언더피팅에 영향을 주므로 적잘한 수의 층이 중요

가중치 초기화(Initialization)

  • 가장 이상적인 방법은 각 층에서 사용되는 Activation Function에 따라서 적절한 Weight 초기화 기법을 사용하는 것이 좋다
  • ReLU, Leaky ReLU 등을 이용한다면 He 초기화(He Initialization)를 사용
  • 초기화시 사용되는 난수는 uniform distribution을 주로 사용

학습률(Learning Rate)

  • 딥러닝의 학습은 모델로부터 얻은 예측값(output 또는 y hat)과 기대값(desired output 또는 label)과의 차이를 계산하여 얻은 비용(cost) - 가중치(Weight, W) 간의 gradient를 이용하여 기존 Weight를 업데이트하는 방식으로 이루어진다
  • 이 때 gradient를 얼만큼 이동할지를 정하는 것이 학습율(eps) 하이퍼 파라미터
    • 고정된 값을 이용할 수도 있고 학습을 진행하면서 값을 변화시킬 수도 있다("Learning Rate Decay")
  • 학습율은 학습의 속도와 학습성과에 영향을 주기 때문에 적절한 설정이 필요
    • 너무 크다면 global minimum (또는 원하는 극값)에 도달하지 못할 수 있으며, 너무 작으면 학습시간이 오래 걸릴 수 있기 때문

모멘텀(Momentum)

  • Gradient Descent에 대한 최적화 기법 중 하나로 global minimum에 도달하기 위해 학습하는 과정에서 가중치(W)를 업데이트하는데에 가속도를 주어 Weight가 감소하거나 증가하는 방향으로 더 많은 변화를 주는 것이다
  • 모멘텀을 적용하는 이유는 학습횟수를 줄이고 효율화하기 위함

에폭(Epoch)

  • 학습을 반복하는 횟수
  • 모델이 전체 데이터 셋에 대하여 Feedforward와 Backpropagation을 거친 것을 의미
  • 즉 에폭을 한번 거쳤으면 학습을 한번 완료했다는 뜻

배치 사이즈(Batch Size)

  • 한번의 batch마다 주는 데이터 샘플 사이즈

과대적합(overfitting)의 극복

규제화(Regularization)

  • 규제화 즉 가중치 규제는 가중치의 값이 커지지 않도록 제한하는 기법
  • 가중치를 규제하면 모델의 일반화(generalizability) 정도가 올라간다 --> 즉 오버피팅을 방지할 수 있게 됨
  • 가중치의 크기를 제한하면, 모델이 소수의 데이터에 집착하지 않기 때문
  • L1 규제: 손실함수에 가중치의 절대값인 L1 Norm을 추가한다
    • c.f.) Lasso: 회귀모형에 L1 규제 추가한 것
  • L2 규제: 손실함수에 가중치에 대한 L2 Norm을 추가한다
  • 주로 L2 규제를 많이 사용

드롭아웃(Dropout)

  • 은닉층의 뉴런을 일정 비율로 배제하고 학습
  • 드롭아웃의 하이퍼파라미터는 제외할 뉴런의 비율이며, 이 값이 너무 낮으면 오버피팅 방지 효과가 크지 않은 반편 너무 높으면 언더피팅(과소적합)이 될 수 있다

추가 개념: Batch Normalization, Early Stopping

배치 정규화(Batch Normalization)

  • 뉴럴 네트워크의 깊이가 깊어질수록 학습이 안정적으로 되지 않는 문제가 발생
    • 은닉층을 많이 거칠수록 전달되는 오차가 크게 줄어들어 학습이 되지 않는 현상
    • 신경망의 활성함수의 도함수 값이 계속 곱해지다 보면 가중치에 따른 결과값의 기울기가 0에 가까워지게 됨
    • 역전파(Backpropagation) 알고리즘에서 입력층으로 진행할수록 기울기가 점차적으로 작아지다가 나중에는 거의 기울기의 변화가 없어지는 문제
  • 이러한 불안정의 원인으로 "Internal Covariance Shift" 현상이 지목되기도 함
    • 딥러닝에서 각 층을 지나면서, inner representation의 distribution이 달라지는 현상 --> 층별로 입력 데이터 분포가 달라지는 현상
    • 따라서 레이어(층)를 지날 때마다 변하는 분포의 scale을 맞춰준다면 안정된 학습을 보장할 수 있을 것
  • 배치 정규화의 방법
    • 데이터의 범위를 정한다(이 범위에 따라 batch normalization/ layer normalization이 나눠지기도 함)
    • 평균과 분산을 구한다
    • 표준화(zero mean, unit variance)
    • 추가로 scale과 shift를 추가해 분포를 조정할 수도 있다(affine transform)
  • 배치 정규화는 각 층에 들어가는 입력의 평균과 분산을 정규화하여 학습을 효율화하기 때문에 기울기 소실이나 폭주 문제를 예방하기도 함

조기종료(Early Stopping)

  • 모델이 과적합 되기 전 훈련을 멈추는 정규화 기법
  • 훈련 중 주기적으로 성능 검증을 하다가 성능이 더 좋아지지 않으면 과적합이라 판단하고 훈련을 멈추게 됨
  • 에폭(epoch) 단위로 성능 검증을 하며 epoch보다 자주 검증해야 할 때는 배치 실행 단위로 검증하기도 함
  • c.f.) 조기종료는 파라미터 공간을 작게 만들기 때문에 L2 규제화와 동일한 효과
    • 예) 손실함수가 2차 함수로 정의되는 선형 모델

Ch 5. 딥러닝과 시계열

순환 신경망(RNN)

순환 신경망(Recurrent Neural Network)

  • 기본 인공신경망 구조에서 이전 시간(𝑡-1)의 은닉층의 출력값을 다음 시간(𝑡)의 은닉층의 입력값으로 다시 집어넣는 경로가 추가된 형태
  • 현재 시간 𝑡 의 결과가 다음 시간 𝑡+1에 영향을 미치고, 다시 다음 시간 𝑡+2에 영향을 미치는 과정이 끊임없이 반복
  • 순환신경망은 자연어 처리 문제에 주로 사용되며 시계열 데이터를 다루기에 좋다
  • 예) 주식가격, 파형으로 표현되는 음성데이터, 앞뒤 문맥을 가진 단어들의 집합으로 표현되는 자연어 데이터

RNN과 시계열

장단기 기억 네트워크(Long Short-Term Memory, LSTM)

RNN의 기울기 소실(Vanishing Gradient) 문제

  • 𝑡₁에서 입력받은 데이터는 𝑡₁에서 RNN의 파라미터를 업데이트 하거나 예측을 진행하는데 강한 영향력(큰 경사도)을 미침
  • 하지만 𝑡₂, 𝑡₃, ... 계속해서 새로운 데이터가 들어오면서 새로 들어온 인풋의 영향력에 덮여 𝑡₁데이터의 영향력은 조금씩 사라지게 됨
  • RNN이 장기기억력을 가지지 못한다는 단점
    • 현재 시간에서 가까운 시간의 데이터만 고려해서 모델링한다면 장기간의 시간 고려가 필요할 때 성능이 감소하게 됨

LSTM 구조

  • 4개의 게이트(gate)
    • (1) Forget Gate: 과거 정보를 버릴지 결정
    • (2) Input Gate: 저장된 정보가 이동
    • (3) Memory Cell: 현재 정보를 저장할 지 결정
    • (4) Output Gate: 어떤 값을 출력할지 결정

실습

https://colab.research.google.com/drive/1ELl1ozMfdxsBNDapdJY9q5cXp5J8ukA3?hl=ko#scrollTo=8AiU3DNGUdKc