Data Analysis & ML/Deep Learning

[Deep Learning][딥러닝] DNN (Deep Neural Network)

YSY^ 2020. 9. 22. 15:34

DNN (Deep Neural Network)

유닛/노드/뉴런 (Un1qit, Node, Neuron)

  • Tensor를 입력받아 tensor를 출력하는 데이터 처리 모듈
    • Input -> Output
  • 입력 값에 Weight(가중치)를 곱하고 bias(편향)을 더한 뒤 활성화 함수를 거쳐 출력한다.

레이어/층(Layer)

  • Input Layer: 입력값들을 받아 Hidden Layer에 전달하는 노드들로 구성된 Layer.
  • Output Layer: 예측결과를 출력하는 노드들로 구성된 Layer
  • Hidden Layer
    • Input Layer와 Output Layer사이에 존재하는 Layer.
    • 데이터의 패턴을 찾는 역할을 한다.
  • 대부분 Layer들은 가중치(weight)를 가짐 (dropout, pooling과 같이 가중치가 없는 layer도 있음)
    • weight가 모델이 데이터를 이용해 학습할 대상이다.
  • 많이 사용되는 Layer의 예
    • Fully connected layer (Dense layer)
    • Convolution layer
    • Recurrent layer
    • Embedding layer
  • https://www.tensorflow.org/api_docs/python/tf/keras/layers

모델 (Network)

  • Layer를 쌓아(연결하여) 만드는 네트워크
  • 이전 레이어의 출력을 input으로 받아 output을 주는 층을 순서대로 쌓음
  • 적절한 network 구조(architecture)를 찾는 것은 과학 보다는 예술의 경지! 많은 경험이 필요
  • 기존의 잘 작동한 구조를 기반으로 구현하는 방식으로 접근

딥러닝(Deep Learning)

- Layer를 깊게 쌓으면 딥러닝이라고 한다.

손실함수(Loss function, 비용함수)

  • Model을 통해 나온 예측값(prediction) $\hat y^{(i)}$와 실제 데이터(output) $y^{(i)}$의 차이를 수량화하는 함수
  • 훈련하는 동안 최소화될 값으로 이 값을 바탕으로 파라미터(가중치와 편향)을 업데이트한다.

해결하려는 문제의 종류에 따라 표준적인 Loss function이 존재함

  • Binary classification (이진 분류)
    • 두 개의 클래스를 분류
    • 예) 문장을 입력하여 긍정/부정 구분
    • binary_crossentropy를 loss function으로 사용

  • Multi-class classification (다중 클래스 분류)
    • 두 개 이상의 클래스를 분류
    • 예) 이미지를 0,1,2,...,9로 구분
    • categorical_crossentropy를 loss function으로 사용

  • Regression (회귀)
    • 연속형 값을 에측
    • 예) 주가 예측
    • Mean squared error를 loss function으로 사용

활성 함수 (Activation Function)

  • 입력을 받아 활성, 비활성을 결정하는데 사용
  • 각 유닛이 입력결과를 처리한 후 출력하기 위해 거치는 함수
  • 같은 층(layer)의 모든 유닛들은 같은 활성 함수를 가진다.
  • 최종 출력 레이어의 경우 문제유형에 따른 표준 활성화 함수가 존재함
  • 은닉층 (Hidden Layer)의 경우 Relu 함수 계열을 많이 사용한다.
  • 문제의 결과가 직선을 따르는 경향이 있다면 선형함수를 주로 이용한다.
  • 2개를 분류하는 경우는 Vanishing Gradient Problem때문에 sigmoid는 잘 사용하지 않고 ReLU와 그 변형된 활성화함수를 주로 사용한다.
  • 3개 이상을 분류하는 경우는 주로 Softmax와 그 변형된 활성화함수를 주로 사용한다.

주요 활성함수(Activation Function)

출처:https://stanford.edu/~shervine/teaching/cs-229/

  • Sigmoid (logistic function)

    • 0<sigmoid(z)<1
    • 비용함수에서 최소지점을 Global minimum이라고 하고 그 외 지점을 Local minimum이라고 한다
    • Local minimum을 벗어나기 위한 방법은 다음과 같다.
      1. Start 지점을 변경해서 여러 번 트레이닝을 한다.
      2. Momentum을 크게 해서 local minimum을 넘어가게 한다.
      3. Noise를 줘서 local minimum을 넘어가게 한다.
    • 초기 딥러닝 모델에서 활성함수로 사용되었으나 Gradient vanishing(소실) 문제 때문에 사용되지 않는다.
    • binary classification 문제의 output layer에서 사용
  • Hypterbolic tangent

    • -1<tanh(z)<1
    • Sigmoid의 이동한 형태
    • Output이 0을 중심으로 분포하므로 sigmoid보다 학습에 효율적
  • ReLU(Rectified Linear Unit)

    • 최적화 과정에서 gradient가 0과 가까워져 수렴이 느려지는 문제를 해결
    • Sigmoid의 경우에는 입력값이 아무리 커도 신경망 노드의 출력은 1을 넘지 못했지만, ReLU 함수는 이런 제한이 없음
    • 음수를 모두 0으로 처리하는 문제가 있다. (Dead ReLU)
    • Leaky ReLU, ELU 등 변화된 형태도 있음
  • Softmax

    • 각 class의 score를 정규화 하여 각 class에 대한 확률값으로 변환(sum=1)
    • 소프트맥스 출력의 각 원소는 0.0 이상 1.0 이하의 실수이며, 노드의 출력을 모두 합한 값이 항상 1이 된다.
    • 소프트맥스 함수는 모든 출력 값의 상대적인 크기를 고려한 값을 출력하기 때문에, Multi-class classification (다중 클래스 분류)에 적합
    • 소프트맥스 함수는 이미지가 어떤 레이블에 속하는지 근거(evidence)를 계산하고, 근거들을 각 레이블에 대한 확률로 변환하는 것
    • 벡터의 각 원소를 정규화하기 위해 소프트맥스 함수는 입력 값을 모두 지수 값으로 바꿈(지수 함수 가중치를 더 커지게 하는 효과)
    • 소프트맥스는 가중치의 합이 1이 되도록 정규화하여 확률분포를 만들어 준다.
    • 예측이 잘 이루어지면 1에 가까운 출력은 하나만 있고 다른 출력은 0에 가까워짐

Optimizer (최적화 방법)

  • Loss function을 기반으로 최적의 weight를 어떻게 업데이트 할지 결정하는 알고리즘
    • 경사하강법과 오차역전파 알고리즘을 이용해 weight를 최적화한다.

Gradient Decent (경사하강법)

  • Loss Function의 미분(Gradient)를 이용하여 weight를 update하는 방법

  • Batch Gradient Decent (배치 경사하강법)

    • 경사하강법을 이용해 weight들을 업데이트 한다.
    • 한번 반복시 전체 학습데이터의 오차를 다 계산해 그 평균값을 기반으로 weight를 최적화한다.
    • 속도가 느리다. 데이터가 클 경우 메모리가 부족할 수 있다.
  • Mini Batch Stochastic Gradient Decent (미니배치 확률적 경사하강법)

    • 한번 반복 시 전체 데이터를 다 사용하지 않고 지정한 데이터 수 (batch size) 만큼 마다 오차를 계산해 weight를 업데이트 한다.
    • 계산은 빠른 장점이 있지만 최적값을 찾아 가는 방향이 불안정하다.

오차 역전파(Back Propagation)

오차역전파란?

  • Loss 부터 꺼꾸로 한계단씩 미분해 gradient 값을 구하고 이를 Chain rule(연쇄법칙)에 의해 곱해가면서 Weight에 대한 gradient를 구하는 방법

SGD를 기반으로 한 주요 옵티마이저

  • 학습식을 보면 수정할 수 있는 부분이 Learning Rate 와 Gradient 부분이라는 것을 알 수 있습니다. 그래서 Optimizer 의 발전 과정은 어떤 부분을 수정하느냐에 따라 나누어집니다.
    • 방향성을 개선한 최적화 방법
      • Momentum
      • Nag
    • 학습률을 개선한 최적화 방법
      • Adagrad
      • RMSProp
      • AdaDelta
    • 방향성 + 학습률 개선 최적화 방법
      • Adam
      • Nadam

협곡에서 옵티마이저별 경로(출처 : developer.nvidia.com)
말안장점에서 옵티마이저별 경로(출처 : developer.nvidia.com)

728x90
반응형