Posts List

[컴퓨터비전] 9. DNNs

DNNs (Deep Neural Networks)

Deep Learning이 출현하기 이전에는 Hand-crafted image features를 통해 사람의 노력으로 image recognition을 시도했었다. 예를 들어 이 사진이 증명사진인지 아닌지를 인지하기 위해 살구색의 픽셀수의 갯수와 눈, 코, 입으로 추정되는 픽셀의 위치를 hand-crafted rule로 정의하고 비교하는 것이다. 또 다른 hand-crafted feature의 예로 이미지 gradient의 분포(HOG:Histogram of Oriented Gradients)를 활용한 경우도 있다.

그리고 이렇게 hand-crafted feature로 표현되는 ① feature space에 이미지를 point로 mapping 시켜보고 ② 두 범주를 구분하는 함수를 찾는 방법으로 image recognition task를 시도했었다. 

여기서 ②과정은 비교적 다양한 optimize 문제로 전환하여 풀기 쉽지만, 가장 중요한 것은 어떤 함수로 구분될 수 있는 feature를 찾아내는 과정① 이었다.

이번 포스팅에서 소개할 Deep learning 기법은 ① feature를 찾는 Cov+Pooling 과정과 ② Fully Connected layer를 이용한 분류기(Classifier)까지 한번에 학습할 수 있게하는 것을 목표로 하며, 이미 현재 다양한 분야에서 성능을 입증받았다.


Neural Network Basics

Perceptron : Single-Layer Neural Network

인공신경망의 기본은 생물학적 신경망의 원리에서 시작한다.

생물학적 신경망은 전기 신호들(Electrical signals)을 입력받아 특정 조건이 되면 전기신호를 또 다른 신경망으로 입력시키는 원리를 가진다.

그리고 인공신경망 역시

  • 다양한 입력 채널로부터 받은 신호를 weight와 bias로 증폭시켜 취합한뒤, 
  • Activation function을 통해 특별한 형태로 가공해서 출력하는,

생물학적 신경망을 모방하는 형태로 구성되어 있다. 

그리고 Perceptron의 목적은 Error를 최소화 하는 weight와 bias를 찾는 것(학습)이다.

위는 이미지에 사람이 있는지 없는지를 구분하는 binary classification 모델의 Error를 계산하는 예를 보여주며,

Perceptron은 그 Error를 최소화 하기 위해 Gradient descent(경사하강법)의 원리로 E가 최소가 되는 weight를 찾는다. (그간 많이 다뤘음으로 자세한 설명은 생략한다.)

Gradient decent의 핵심 목적은 Error 에 weight가 미치는 영향(gradient, dE/dw)를 파악하고, 이 gradient를 이용해서 w를 update하는 것(Backpropagation)이며, 

Backpropagation의 자세한 원리는 역시 앞 포스팅 [머신러닝/딥러닝 : MLP]에서 다루었음으로 본 포스팅에서는 생략하도록 한다.

이렇게 학습된 Perceptron은 input의 linear combination으로 구분되는 linear classifier이기 때문에 결과 확인이 매우 직관적인 장점이 있다.


Multi-Layer Perceptron

앞서 배운 Perceptron은 Linear function으로 분류할 수 있는 문제에는 효과적이지만, 현실은 위 그림과 같이 non-linear function이 필요한 경우가 많다. 그리고 Perceptron 1가닥으로는 이 문제를 절대 풀 수 없다. (Minsky 교수가 XOR문제를 제기한 것과 같은 이유)

이 문제를 해결하기 위해서 Perceptron을 여러가닥으로 이어 위와 같이 Multi-Layer Perceptron구조를 이루어주면 non-liner classification 문제를 풀 수 있다.

여기서 중간 층을 hidden layer라하며, hidden node는 최초의 feature인 X로 부터 학습된 새로운 feature를 추출한 결과(Data transformation)라 할 수 있다.

MLP 또한 Perceptron의 원리를 크게 벗어나지 않으며, 위와 같이 gradient를 동일한 방법(Backpropagation)으로 찾을 수 있다.

[Multi-label soft-margin loss]

[Cross entropy loss]

그리고 Perceptron에서 간단한 Error(loss) function을 소개했는데, 그 외에도 다양한 error function이 있으며, 이 함수를 어떻게 설정하느냐에 따라 모델의 성능이 달라질 수도 있다. 즉, 일종의 하이퍼파라미터라 할 수 있다. 

※ 이미지 classification에서는 cross entropy 를 error로 사용하는 것이 일반적으로 효과가 우수한 것으로 알려져있다.


Issues in Deep neural networks

DNN에서는

  • 파라미터수(weight, bias)가 많은 만큼 엄청나게 많은 데이터가 필요하고,
  • 전체 데이터를 학습(iteration, epoch)하기 위한 시간이 필요한하며,
  • 모델이 복잡해지면서 overfitting 경향이 발생하거나,
  • layer를 깊게 구성하면서 gradient가 소멸하는 문제 (Vanishing Gradient)

가 발생하는 이슈가 있다.

그 중 4번 문제를 해결하기 위해 상당히 오랜 기간 연구가 이루어졌었는데,

통상 사용하던 sigmoid function 이 아닌 ReLU(Rectified Linear unit)와 같은 gradient를 어느정도 보존할 수 있는 activation function이 고안되면서 현재 많이 해결된 상황이다. 물론 gradient를 살림으로써 수렴 속도의 개선 효과도 있다.

그리고 HW발전에도 불구하고 고질적인 문제인 학습속도에 대해서는 현재까지도 활발한 연구분야이다. 그 중 Optimization 방법인 gradient decent알고리즘을 개선시키기 위한 알고리즘으로 SGD, Momentum, ADAM과 같은 다양한 optimizer가 소개되었다.
(마찬가지로 [머신러닝/딥러닝:Optimization]에 알고리즘별로 자세한 설명이 있으니 참고하자.)


Practical tips and caveats

Techniques to avoid overfitting

overfitting은 모델의 복잡도를 극한으로 끌어올려 training data에 과적합된 경우를 말하며, 분산(variance)가 매우 높은 상태이다.

DNN의 구조가 복잡한 만큼 파라미터의 수는 기하급수적으로 높아지는데, 정석대로라면 파라미터의 수만큼 데이터가 많이 있어야 한다. 하지만 DNN의 파라미터 수는 생각보다 매우 많고(초창기 DNN인 AlexNet은 60million의 파라미터를 가진다.), 우리가 가진 현실 데이터는 한정적이다. 그리고 데이터의 수가 부족할 수록 overfitting에 빠지기 쉽다. 

이 때 overfitting에 대처하기 위한 방법으로는

  • 더 많은 데이터를 확보하거나,
  • 모델을 간소화하거나, (ex. drop-out)
  • training data에 과하게 학습되지 않게 학습을 early stopping 

하는 방법이 있다.

Network Weight Initialization

gradient decent는 초기 시작위치에 따라 수렴의 속도나 수렴 가능성에 큰 영향을 받는다.

이 때 initial weight를 주는 방법에는 일반적으로 random하게 주는 방법이 있고,
※ He et al.: Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. ICCV 2015

이미 training 된 모델의 weight에서부터 학습을 시작하는 방법 등 다양한 방법이 있다. 
※ Oquab et al.: Learning and Transferring Mid-Level Image Representations using Convolutional Neural Networks. CVPR 2014

Network Optimization

(Gradient descent optimizer를 개선시키기 위한 learning rate schedule, Momentum, ADAM, RMSprop 등은 [머신러닝/딥러닝] 포스팅에서 다루었음으로 본 포스팅에서는 생략한다.)




댓글 쓰기

0 댓글