300x250

자주 잊어버리는 딥러닝 기초 내용을 여러 포스팅에 걸쳐 간단하게 정리해보려 한다. 다룰 내용은 크게 아래와 같다.

  • Introduction
  • Elements of ML
  • Multi-layer Perceptron
  • Model Selection
  • CNN
  • GNN
  • RNN

 

 

목차

     

     

     

     

    Non-linear Models

     

    이전 포스팅에서 살펴본 모델들은 data를 예측하거나 분류할 때 linear function을 이용하였다.

    예를 들어, binary classification task가 주어졌다고 하자. binary classification이란 두 가지를 분류(예를 들어 사진이 강아지, 고양이 둘 중 무엇인가?)하는 task이다. 이 경우, classification 모델의 학습 과정은 데이터의 두 class(강아지, 고양이)를 나누는 decision boundary(hyperplane)을 찾는 과정으로 볼 수 있다.

     

    Fig 1. Example of Binary Classificaiton

     

    Fig 1은 hyperplane이 직선인 간단한 경우이다. Output을 one-hot vector로 표현하여 데이터의 차원이 고차원인 (예를 들어, 데이터 \(\mathbf{x}\)의 요소가 \(x_1, x_2, x_3\)인) 경우에도 위와 같이 나타낼 수 있다.

     

    그런데, 만약 deision boundary가 nonlinear하다면 어떨까? 다음 그림을 보자.

     

    Fig 2. Non-linear Decision Boundary

     

    이러한 경우, 위 데이터 feature를 맵핑하여 hyperplane 하나로 나뉠 수 있도록 데이터를 나타낸 공간을 변형(transform)해주어야 한다.

    하지만, linear function은 이러한 맵핑을 할 수 없다. (linear transform은 affine transform이기 때문이다. 더 자세한 설명은 이 포스팅의 수준을 넘어서므로 궁금하다면 따로 검색해보도록 하자.)

     

     

     

     

    From Linear to Nonlinear

     

    Fig 3. Manifold(Mapping)

     

    예시의 데이터를 분류하는 함수를 찾기 위해서는 Fig 3와 같이 고차원 공간의 manifold를 찾아 맵핑해주어야 한다. 이러한 과정을 manifold learning이라 하고, 이를 위해 multi-layer perceptron을 사용한다.

     

    XOR Problem and Non-linear Activation Function

     

    Fig 4. OR gate and XOR gate

     

    Pereptron은 linear function이다. 이러한 linear function을 여러 번 사용한다고 해도 절대 Fig 4에서와 같은 XOR 문제를 해결할 수는 없다. 다음 예시를 살펴보자.

     

    Fig 5. MLP example

     

    각 layer에서 일어나는 연산을 수식으로 표현해보면 아래와 같다.

    \( h_j = \sum\limits_{i} w_{ij}^{(1)} x_i = \mathbf{w}_j^{(1)} \mathbf{x} \)

    \( o_k = \sum\limits_{j} w_{jk}^{(2)}\mathbf{h} \)

    두 함수를 합성해보아도 결국 선형 함수이므로, 결국 non-linearity를 갖지 못한다.

     

    따라서, 아래와 같이 nonlinear activation function \(\varphi\)를 사용하여 비선형성을 부여할 수 있다.

    \( h_j = \varphi \left( \sum\limits_{i} w_{ij}^{(1)} x_i \right) = \varphi ( \mathbf{w}_j^{(1)} \mathbf{x}) \)

    \( o_k = \sum\limits_{j} w_{jk}^{(2)} h_j = \mathbf{w}_k^{(2)} \mathbf{h} \)

     

    Activation function에 자주 활용되는 함수는 다음과 같다.

     

    Fig 6. Activation Functions

     

    Activation function의 결과, ReLU는 0 이상의 값, Sigmoid는 0에서 1 사이의 값, Hyperbolic Tangent는 -1에서 1사이의 값을 가지므로, task와 상황에 따라 적절히 사용된다.

     

     

     

     

     

    Stochastic Gradient Descent Optimization

     

    Optimization 방법 중 하나인 Stochastic Gradient Descent (SGD) optimization에 대해 알아보자.

    SGD optimization은 weight(+bias)를 update하는 방법 중 하나로, 확률적으로 mini-batch를 뽑아 gradient descent를 진행하는 방법이다.

    \( (\mathbf{w}, b) \leftarrow (\mathbf{w}, b) - \cfrac{\eta}{\lvert \mathcal{B} \rvert} \sum\limits_{i \in \mathcal{B}} \partial_{(\mathbf{w}, b)} l^{(i)}(\mathbf{w}, b) \)
    • \(\leftarrow\)의 의미 : iterative(반복적) update
    • \(\eta\) : learning rate
    • \( \mathcal{B} \) : mini-batch
    • \(\partial_{(\mathbf{w}, b)} l^{(i)} (\mathbf{w}, b)\) (\(= \nabla_{\boldsymbol{\theta}} \mathcal{L}(\boldsymbol{\theta})\)) : gradient

    먼저, gradient descent란, loss function의 최솟값에 다다르기 위해 gradient(경사) 방향으로 반복적으로 하강하는 방법이다.

    모든 batch에 대해 gradient descent를 진행하는 batch gradient descent보다 mini-batch를 뽑는 경우 다음과 같은 이점이 있다.

    • Memory의 resource를 아낄 수 있다.
    • Non-convex optimization을 다룰 수 있다. 즉, local optima에 빠지는 문제를 해결할 수 있다.
      • Mini-batch를 샘플링할 때마다 매번 조금씩 다른 그래프가 생성되기 때문이다.
       

    Fig 7. SGD Optimization Example

     

     

    728x90
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기