소프트웨어 개발/Computer Vision

Deep Learning Basics For Computer Vision

Leo's notes 2020. 1. 17. 11:08

Learning Methods

Supervised Learning

주어진 입력 데이터 (Sample, Instance, X) 에 대한 타겟 (Target, Label, Y) 을 학습한다.

  • Regression : 입력에 대한 결과값 예측
  • Classification : 입력이 어떤 분류인지 예측
  • Tagging : 입력이 어떤 분류인지 다중 예측
  • Search/Ranking : 입력 집합에 대한 순위 예측
  • Sequence Learning : 다중 입력에 대한 결과값 예측

Unsupervised Learning

주어진 입력 데이터에 대한 타겟 없이 학습한다.

  • Clustering : 비슷한 분류로 그룹핑
  • Subspace Estimation : 부분 공간 추정 (특성을 좌우하는 파라미터 검출)
  • Principal Component Analysis : 주성분 분석 (특성을 좌우하는 파라미터 검출)
  • Representation Learning : 엔티티와 그 관계들을 분석
  • Generative Adversarial Network (GAN) : 실제/가짜 데이터가 같은지 판단하여 데이터 합성

Reinforcement Learning

시간 단계에 걸쳐 환경과 작용하며 행동을 판단한다. 어떤 환경으로부터 어떤 행동을 하고 그 결과는 다시 환경으로 전달된다.

Overview

Deep Learning을 위해 크게 4가지의 구성요소가 필요하다.

Data

학습 및 검증을 위한 입력값이다.

  • Training data set : 학습을 위한 데이터
  • Validation data set : 모델 선택을 위한 데이터
  • Test data set : 모델 정확도 산출을 위한 데이터

Model

모델은 데이터를 통해 얻고자 하는 결과를 도출한다. Perceptron + Activation Function 으로 이루어진다.

  • Perceptron : 사람의 신경망을 따라 기계적으로 구현한 개념이며, 각각은 신호들을 받은 뒤 Activation Function에 따라 결과값을 출력한다.
  • Activation Function : Perceptron의 출력 기준을 설정한다. Step function의 경우 입력값들의 연산 결과가 특정 값 이상이면 1을, 미만이면 0을 출력한다.

다중 퍼셉트론 (Multi Layer Perceptron) 의 경우 입력층과 출력층 사이에 하나 이상의 hidden layer가 추가되며, 각각의 hidden layer의 결과마다 activation function이 적용된다. (hidden Layer가 3개 이상이면 Deep Neural Network 라고 한다)

Loss Function (Cost Function)

Model에서 아래 두 종류의 오류를 추적하고 오차를 계산하여 모델을 평가한다.

  • Training error : 학습 데이터에 대한 오류
  • Test error : 테스트 데이터 (학습에 포함되지 않았던 데이터) 에 대한 오류

Optimization Algorithm

Loss Function의 오차(loss, cost)를 최소화할 수 있는 파라미터 집합을 찾는 역할을 한다.

Activation Function

Perceptron 신호의 출력을 다음으로 보낼지 말지 또는 신호의 강도를 결정한다.

Step Function

  • 0 또는 1의 출력값을 가진다.
  • 임계값을 기준으로 출력을 활성화(1) 또는 비활성화(0) 한다.

Sigmoid Function

  • 0과 1 사이의 출력값을 가지며 모든 값을 확률로 변환하는 데 유용하다.
  • Vanishing Gradient 문제가 발생한다.

Tanh (Hyperbolic Tangent) Function

  • -1과 1 사이의 출력값을 가진다.
  • Sigmoid와 달리 중심값이 0이기 때문에 Optimization이 빠르다.
  • Sigmoid와 마찬가지로 Vanishing Gradient 문제가 발생한다.

ReLU (Rectified Linear Unit) Function

  • 입력값 x가 0 이하이면 0을, 이상이면 x를 출력한다.
  • Vanishing Gradient 문제가 발생하지 않는다.
  • Sigmoid, tanh에 비해 converge 속도가 빠르며 연산에 대한 부담이 적다.
  • Dying ReLU 문제가 발생한다.

Dying ReLU Problem

입력이 0보다 작은 경우 0을 출력하고 다시 값을 갖기 어렵기 때문에, 이 경우가 너무 많이 발생하면 대부분의 신경이 죽어버리는 상태가 된다.

Softmax Function

신경망 출력의 총 합이 1이 되도록 한다.

출력 값을 확률 분포의 일부로 해석 가능하여 다중 클래스 분류 문제에 유용하다.

보통 One-hot encoding과 함께 사용된다.

Loss Function

Model을 평가한다. 최종 학습의 목표는 Loss function의 오차(Loss, Cost)를 최소화하는 것이다.

  • MSE (Mean of Squared Error) : 계산이 간편하기 때문에 가장 많이 사용된다. 오차 계산시 단순 차이를 이용하면 음수가 발생하므로 차이에 대한 제곱을 합산하여 평균을 내는 방식을 사용한다.
  • CEE (Cross-Entropy Error) : 분류 (Classification) 문제에서 One-hot Encoding을 사용하는 경우에 적용이 가능하다. 모델의 출력값에 자연로그를 곱하는 형태로 정답에 멀어지면 오차가 기하급수적으로 증가한다.
  • L1 Loss : 실제 값과 예측된 값의 차에 대한 절대값을 구해 모두 더한다.
  • L2 Loss : 실제 값과 예측된 값의 차에 대한 제곱을 구해 모두 더한다.

Optimization Algorithm

Loss function의 오차(Loss, Cost)를 최소화하기 위해 모델의 Parameter를 조정하는 알고리즘이다.

Gradient descent

각 파라미터를 조금씩 변경하면서 loss가 어떤 방향으로 움직이는지를 보고, 감소하는 방향으로 파라미터를 업데이트 하는 방법이다.

Stochastic gradient descent

데이터 전체를 고려해서 가중치를 수정하는 것은 시간이 너무 오래걸리므로, 데이터를 나눠서 Gradient descent 방식을 사용는 방법이다.

w+ = w - [learning rate] * [gradient]

  • Learning Rate : 한번에 얼마나 학습할지 결정한다.
  • Gradient : 어떤 방향으로 학습할지 결정한다.

Learning Rate, Gradient를 각각 개선한 다양한 Optimization Algorithm들이 생겨나고 있다.

(Momentum, Nag, Adagrad, RMSProp, AdaDelta, Adam, Nadam, ...)

Regularization

트레이닝 데이터에만 과도하게 맞춰 모델이 학습되면 일반적인 테스트 데이터에 대해 예측률이 떨어지는데, 이를 Overfitting 이라고 한다.

  • 모델 복잡도가 높은 경우
    • 튜닝 가능한 파라미터의 수가 많은 경우
    • 파라미터에 할당된 가중치의 범위가 넓은 경우
  • 데이터가 충분하지 않은 경우

Overfitting을 해결하기 위해 데이터셋의 양을 늘리는 것은 일반적으로 어렵기 때문에 주로 함수의 복잡도를 조정하게 된다. Regularization은 모델 복잡도에 대한 패널티를 주어 Overfitting을 예방하고 성능을 높이는데 도움을 준다.

모델의 그래프가 Overfitting되어 심하게 구불구불한 상태를 조금 더 직선에 가깝게 펴는 과정이라고 생각하면 이해하기 쉽다.

Dropout

Overfitting 방지를 위해 몇몇 뉴런들을 누락시킨다는 개념으로,

  • 학습 과정에서 중간 레이어들에 적용되는 Activation h 값을 같은 기대값을 갖는 랜덤 변수 h'로 드롭아웃 확률 p만큼 변경한다.
  • 각 훈련마다 Hidden layer의 유닛을 무작위로 선택하기 때문에 매번 다른 모델 구조를 얻는다.
  • 여러 신경망을 결합하는 효율적인 방법이다.

L1 Regularization (Lasso)

Loss function 뒤에 L1항을 추가하여 모델을 학습할 때 특정 상수를 지속적으로 제외시켜 (계수를 0으로 만들어) 핵심적인 Feature들만 반영되도록 한다. 작은 가중치들은 대부분 0으로 수렴이 되고 몇 개의 중요한 가중치들만 남게 된다.

L2 Regularization (Ridge)

Loss function뒤에 L2항을 추가하여 전체적인 Weight의 절대값을 감소시켜 그래프를 덜 구불구불하게 만든다. L1은 일부 항의 계수를 아예 0으로 만들지만 L2는 일정비율로 감소시키기 때문에 L1에 비해서는 더 구불구불하다고 생각할 수 있다.

Numerical Stability

좋은 Activation Function의 선택은 최적화 알고리즘을 빠르게 수렴시키는 역할을 하며, 잘못된 선택은 Exploding gradient, Vanishing gradient 등을 발생시킨다.

  • Exploding Gradient : 너무 많은 확률이 곱해질 때 산술적인 Underflow와 비슷한 상황이 발생한다. 이는 수치적인 표현의 문제일 뿐 만 아니라 최적화 알고리즘이 수렴하지 않을 수 있게 된다.
  • Vanishing Gradient : Sigmoid의 경우 값이 중간 범위에 들어가지 않고, 아주 큰 수나 아주 작은 수일 경우 gradient가 소멸된다. 이 문제 때문에 ReLU가 Deep Neural Network의 설계에 기본 선택이 되었다.

위 문제를 완화시키기 위해 가중치 초기화 (Weight Initialization) 방법이나 배치 정규화 (Batch Normalization) 방법 등을 사용한다.

Weight Initialization

  • Xavier Initialization : 표준 정규 분포를 입력 개수의 표준 편차로 나누어 초기화하는 방법이다. Sigmoid 또는 Tanh 함수와 함께 사용된다. ReLU 함수를 사용할 경우 출력값, 평균, 표준편차가 모두 0으로 수렴하게 되므로 함께 사용할 수 없다.
  • He Initialization : Xavier Initialization과 비슷하지만 입력 개수의 절반의 제곱으로 나누어 초기화하는 방법이다. ReLU 함수와 함께 사용된다.

Batch Normalization

신경망이 깊어질수록 같은 입력값이더라도 가중치들의 작은 변화가 출력값의 큰 변화로 이어져 전혀 다른 값을 얻는 불안정한 현상이 생긴다.

 

 

이를 안정화하기 위해 출력값 자체를 정규화해주는 방법을 사용한다.

  • Layer의 출력을 Batch의 평균 0과 표준 편차 1로 정규화한다.
  • 이후에 다른 레이어에서 Weight를 학습하듯 Back propagation으로 학습시킨다.
  • Overfitting을 억제하고 훈련 속도를 향상시켜 복잡한 신경망을 학습시키는데 유용하다.

Convolutional Neural Network

기존 (Fully Connected) Neural Network는 이미지 또는 영상 처리에 있어 한계를 가진다.

  • 3차원 데이터인 이미지를 1차원으로 평면화시킬 때 공간 정보가 손실된다.
  • 동일한 그림으로 된 이미지 입력이더라도 그림의 위치가 한칸씩만 움직이면 실제 입력은 아주 크게 달라지게 된다.

이를 보완하기 위해 CNN을 사용한다.

  • 각 레이어의 입출력 데이터 형상이 유지된다.
  • 이미지의 공간 정보를 유지하면서 인접 이미지와의 특징을 효과적으로 인식한다.
  • 필터를 공유 파라미터로 사용하여 일반 Neural Network에 비해 파라미터 개수가 매우 적으면서도 (FC 파라미터 양의 약 20%) 더 높은 인식률을 가진다.

CNN은 크게 이미지의 특징을 추출 (Feature Extraction) 하는 부분과 클래스를 분류 (Classification) 하는 부분으로 나뉜다.

  • Feature Extraction : Convolution Layer + Pooling Layer를 어러 겹 쌓아 구성한다.
    • Convolution Layer : 이미지에서 어떤 특징이 얼마나 있는지를 구하는 과정이다. 입력 데이터에 필터를 적용하고 Activation Function을 적용한다.
    • Pooling Layer : 추출한 이미지의 특징을 모으고 강화한다. 이미지의 뒤틀림이나 크기 변화에 따른 왜곡의 영향을 축소한다.
  • Classification : 분류를 위한 Fully Connected Layer 이다. 분류를 위해 이미지 형태의 데이터를 배열 형태로 만드는 Flatten Layer가 포함된다.

Convolution Layer

Convolution Layer는 필터를 통해 입력 데이터를 지정된 간격으로 순회하며 채널별로 합성곱을 하고, 모든 채널의 합성곱의 합을 Feature Map으로 만든다.

  • Filter : 필터는 이미지의 특징을 찾아내기 위한 공용 파라메터이며 Kernel 이라고도 한다.
    • CNN의 학습 대상은 필터 파라메터가 된다.
    • 일반적으로 정사각 행렬로 정의된다.
  • Stride : 필터가 지정된 간격으로 순회하며 합성곱을 계산할 때, 이 지정된 간격을 Stride라고 한다.

입력 데이터가 여러 채널을 갖는 경우 필터는 각 채널을 순회하며 합성곱을 계산하며, 채널 수와 상관없이 필터별로 1개의 Feature Map이 만들어진다. 결국 필터의 개수는 Feature Map의 채널 개수가 된다.

Convolution Layer에서 Filter와 Stride의 작용으로 Feature Map의 크기는 입력데이터보다 무조건 작게 출력된다. 이를 방지하기 위한 방법으로 Padding을 사용한다.

  • Padding은 입력 데이터의 외각에 지정된 픽셀만큼 특정 값으로 채워 넣는다.
  • 보통 Padding 값은 0을 사용한다.
  • Neural Network가 이미지의 외각을 인식하는 학습 효과도 발생한다.

Pooling Layer

Convolution Layer의 출력 데이터를 입력으로 받아서 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용된다. Pooling 방법은 3가지가 있다. 보통 CNN에서는 Max Pooling을 사용한다.

  • Max Pooling
  • Average Pooling
  • Min Pooling

Pooling Layer의 특징은 다음과 같다.

  • Pooling Layer는 학습 대상 파라메터가 없다.
  • 통과 후 행렬의 크기가 감소한다.
  • 통과 후 채널 수에 변경이 없다.

Convolution Layer의 출력 크기는 Pooling 크기의 배수가 되어야 한다. 예를 들어 Pooling의 크기가 (3, 3) 이라면 Convolution Layer의 출력값의 크기는 (3의 배수, 3의 배수) 이어야 한다.

보통 Pooling 크기와 Stride를 동일하게 설정하여 모든 원소가 한 번씩 처리 되도록 한다.

References

https://ko.d2l.ai/chapter_preface/preface.html

https://gomguard.tistory.com/177?category=712467

http://taewan.kim/post/cnn/

https://dailyheumsi.tistory.com/57