[Chap 4] 딥러닝 기초

Hyungseop Lee·2023년 4월 4일
0
post-thumbnail

딥러닝의 등장

  • MLP에 단지 은닉층을 여러 개 추가하면 DMLP(Deep MLP)이 된다.
    DMLP을 학습시키는 알고리즘을 딥러닝(Deep Learning)이라고 한다.

  • DMLP는 제대로 학습되지 않는 문제가 있다.

    1. Gradient Vanishing(소멸) :
      back propagation 알고리즘은 출력층에서 시작하여 입력층 방향으로 진행하며
      gradient를 계산하고 weight를 갱신하는데,
      여러 층을 거치면서 gradient가 작아져서 입력층에 가까워지면 변화가 거의 없어지는 문제점.
    2. 추정해야 할 매개변수는 크게 늘었지만,
      Train Set의 크기는 작은 상태로 머물러 있어 Overfitting 위험.

➡️ 이를 극복하기 위해
Running Rate에 따른 성능 변화, 모멘텀의 영향 분석, 은닉 노드 수에 따른 성능 변화,
데이터 전처리의 영향, 활성함수의 영향, 규제 기법 등 다양한 연구가 진행되었다.

이러한 연구들이 딥러닝에 대한 긍정적인 영향을 미쳤다.

딥러닝의 혁신 요인

  • 사실 딥러닝은 신경망에서부터 창안된 새로운 이론이나 원리는 없다.
    그런데도 딥러닝이 기술 혁신을 주도하게 된 데에는 몇 가지 중요한 요인이 존재한다.

    • CNN : CNN은 작은 크기의 Convolution Mask를 사용하기 때문에
      완전연결 구조인 MLP보다 매개변수가 훨씬 적다.
      게다가 모든 노드가 같은 Mask를 공유하는 Weight Sharing 기법을 사용한다.
      (Chap 4.3 ~ 4.4 에서 공부...)

    • GPU : 학습 시간을 크게 단출시킬 수 있도록 병렬 처리를 하는 값싼 GPU가 등장하였다.

    • Train data : 인터넷 발달로 인해 Train Data가 크게 늘어났다.
      게다가 data에 Gaussian noise를 섞거나 영상을 조금씩 이동하거나 회전하여
      data를 인위적으로 수십~수백 배 증가시키는 기법이 개발되었다.
      (data 확대 기법은 Chap 5.4.3 에서 공부...)

    • Activation Function : 현재 사실상 표준으로 자리 잡은 ReLU function은
      비교연산(max(0, a)) 한 번으로 계산할 수 있고, gradient 소멸 문제가 크게 완화된다.

    • Layerwise Pretraing : 층별 예비학습 기법.
      (Chap 6.7.2 에서 공부...)

특징 학습의 부각

  • MLP를 공부할 때,
    은닉층은 원래의 특징 공간을 변환하는 Feature Extractor로 볼 수 있었다.
    새로운 특징 공간은 신경망이 주어진 목적을 달성하는 데에 더욱 유리하다.

  • 하지만 은닉층 1~2개만 가진 Shallow 신경망은
    특징 공간의 변환이 충분히 이루어지지 않아 낮은 성능에 머무른다.

    • 따라서 과거에는 사람이 시행착오를 거쳐 고안한 Feature Extraction Algorithm으로
      특징 벡터를 추출하여 신경망에 입력하는 접근 방법인 Hand-crafted Feature를 사용했다.

    • 현대 기계 학습의 주류인 DMLP에서는 Feature Extraction이라는 작업 자체도
      수작업인 아닌 기계 학습으로 설계한다.
      이와 같이 전체 과정을 한꺼번에 학습하는 방식을 end-to-end learning(통째 학습) 이라 부른다.
      앞 단계의 은닉층은 주로 엣지나 코너와 같은 Low-level Feature를 추출하고
      뒤로 갈수록 더 추상적인 형태의 High-level Feature를 추출한다.

    • 현대 기계 학습에서는 이처럼 특징을 학습으로 자동 설계하는 일을 무척 중요하게 취급한다.
      이를 Feature Learning 또는 Representation Learning이라 한다.
      표현 학습이 발점함에 따라 분류, 회귀 문제를 버서안 생성 모델이나 영상을 화소 수준으로 분할하는 모델 등이 등장했다.
      ➡️ ex) CNN이 자연영상에서 중요한 feature 추출 + LSTM은 feature를 의미적으로 분석하여 문장을 생성하는 협력 모델.
      (Chap 6.5 ~ 6.8, Chap 7.1 ~ 7.2에서 공부 ...)


DMLP

구조

  • DMLP(Deep Multi Layer Perceptron, 깊은 다층 퍼셉트론)
    단순히 한 두개의 은닉층만 가진 MLP에 여러 은닉층을 추가한 구조이다.
    • 은닉층 : L1L - 1개, 출력층 : 11개 ➡️ 총 LL개의 층을 가지는 DMLP이다.
    • ll번째 층의 node 수를 nln_l로 표기한다. (이때 bias node는 제외)
    • 입력층에는 x=(1,x1,x2,...,xd)Tx = (1, x_1, x_2, ..., x_d)^T가 입력된다.
      ➡️ n0=dn_0 = d
    • 출력층에는 o=(o1,o2,...,oc)To = (o_1, o_2, ..., o_c)^T를 출력한다.
      ➡️ nL=cn_L = c
    • (l1l-1)번째 층과 (ll)번째 층을 연결하는 Weight는 (nl1+1)nl(n_{l-1} + 1) * n_l개 인데,
      전체 Weight를 다음과 같은 행렬 UlU^l로 표기할 수 있다.

동작

  • DMLP는 단지 MLP에 은닉층을 추가한 것 뿐이라서
    MLP의 동작을 단순히 확장하면 된다.

  • 구체적인 수식으로 써 보자.

    • 입력층의 특징 벡터 xx는 나중에 Activation Function을 거치며 새로운 특징이 되므로
      xx를 내부에서 사용하는 zz 변수로 대입한다.
    • zz vector와 jj번째 node에 연결된 edge의 weight의 곱의 합을 구하여
      ss 변수에 저장.
      Activation Function에 ss를 넣어 출력 결과를 zz변수에 저장.

행렬 표기를 이용하여 ll번째 층에 있는 모든 node의 연산을 한꺼번에 표현하면 다음과 같다.

은닉층에 해당하는 l=1,2,...,L1l = 1, 2, ..., L-1 층의 Activation Function :
주로 ReLU 사용
출력층에 해당하는 l=Ll = L층의 Activation Function :
주로 Sigmoid or Tanh or Softmax 사용

학습

  • DMLP 학습 알고리즘은 MLP의 error back propagation 알고리즘과 크게 다르지 않다.
    단지 gradient 계산과 weight update를 더 많은 단계에 걸쳐 수행한다는 점만 다르다.

  • 다음과 같은 구조의 DMLP가 있다.

    error back propagation을 사용하여
    LL층의 정보를 이용하여 L1L-1층,
    L1L-1층의 정보를 이용하여 L2L-2층,
    L2L-2층의 정보를 이용하여 L3L-3층,
    ...
    11층의 gradient를 계산하는 공식이다.

  • 위의 DMLP를 위한 mini batch SGD 알고리즘을 가상코드 형식으로 나타내면 다음과 같다.

CNN의 우월한 성능

  • MLP의 역사적 발전 양상은 다음과 같다.

  • DMLP가 MLP를 능가하게 되었지만, 그렇다고 딥러닝의 대세를 점하지는 못한다.
    왜냐하면 CNN에 비하면 성능이 떨어지기 때문이다.

  • CNN이 DMLP보다 우수하다는 어떠한 과학적 증거는 없지만,
    숫자보다 훨씬 복잡한 자연영상의 분류 문제를 다루는 ILSVRC 대회를 살펴보면,
    CNN이 확연히 우세하기 때문에 CNN이 우월하다고 해도 무방하다.

  • 또한 CNN의 매개변수가 훨씬 적어 현재 기술로 CNN의 학습이 더 쉽다.
    만약 학습 알고리즘이 개선되고 컴퓨터 성능과 데이터양 측면에서
    획기적인 발전이 이루어진다면 DMLP가 CNN을 능가할지도 모른다.

  • 현재 딥러닝에서 가장 널리 쓰이며,
    우월한 성능으로 기술 발전을 주도하고 있는 CNN에 대해 공부해본다.


CNN(Convolution Neural Net)

기본 개념

  • DMLP :
    완전연결 구조(fully-connected)여서 weight가 너무 많아 복잡도가 높다.
    따라서 학습이 매우 더디고 Overfitting에 빠질 가능성도 크다.

  • CNN(Convolution Neural Network) :
    부분연결 구조(partially-connected)여서 모델의 복잡도를 획기적으로 낮춘다.
    그런데 낮은 복잡도에서도 모든 층은 좋은 feature를 추출해야 한다는 본연의 임무에 충실한다.
    ➡️ CNN은 영상처리나 신호처리 분야에서
    일반적으로 사용하는 Convolution 연산을 적용함으로써
    모델 복잡도를 낮추고 좋은 feature를 추출하는 두 가지 목적을 충실히 달성한다.

    ➡️ Convolution 연산을 적용하여 얻은 Feature Map을 Down sampling하기 위해
    Pooling 연산을 수행한다.
    결국 Convolution층과 Pooling층이 반복되는 구조를 가진다.

partially-connected & receptive field

  • DMLP :
    왼쪽 층의 모든 node와 오른쪽 층의 모든 node가 연결된
    fully-connected 구조를 가진다.
    따라서 두 층이 각각 (nl1),(nl)(n_{l-1}), (n_l)개의 node를 가진다면
    총 (nl1nln_{l-1} * n_l)개의 weight가 있다.
  • CNN :
    오른쪽 층 jj번째 node는 왼쪽 층의 i1,i,i+1i-1, i, i+1 위치에 있는 node 3개에만 연결된
    partially-connected(= sparsely-connected) 구조를 가진다.
    오른쪽 층이 nln_l개의 node를 가진다면 왼쪽 층의 node 개수와 무관하게
    3nl3 * n_l개의 weight가 있다.
    • 따라서 CNN은 인간 시각을 모방한 구조라고도 한다.
    • jj node가 연결된 왼쪽 층의 파란색 박스 영역을 receptive field(수용장)이라고 한다.
    • 여기서는 3개가 receptive field를 구성하는데,
      실제 구현에서는 상황에 따라 여러가지 크기를 사용한다.

input data

  • DMLP의 input data는 vector 구조에 불과한데,
    CNN의 input data는 3차원 이상의 Tensor까지도 가능하다.

  • DMLP는 input Sample이 항상 같은 크기를 가져야 한다.
    즉, 입력으로 들어오는 feature vector의 차원이 항상 같아야 한다.
    CNN은 가변 크기의 입력까지 처리할 수 있다.
    즉, 크기가 다른 영상이 입력되어도 처리할 수 있다는 장점이 있다. (Chap 4.3.3)

Convolution Layer

Convolution 연산, kernel, Padding, Bias

  • Convolution 연산은 해당하는 element끼리 곱하여 결과를 모두 더하는 선형 연산이다.
  1. 1차원 입력 Convolution

    • h는 kernel의 크기로, 만약 1*3 kernel을 사용한다며 h=3이다.
      kernel이 대칭을 이루도록 보통 h를 홀수로 사용한다.

    • kernel 크기 h가 한쪽 가장자리에서
      node 1개가 줄어 총 node 2개가 되어 연산이 불가능한 표시로 -라고 되어 있다.

      이러한 현상을 방지하기 위해 Padding을 수행한다.

    • 0 Padding : 0을 덧대는 방식

    • Copy Padding : 인접한 노드값을 복사하는 방식

    • bias : CNN도 DMLP처럼 bias가 있다. Convolution 결과에 bias값만큼 더하는 효과.

  1. 2차원 입력 Convolution
    • bias
  1. 3차원 입력 Convolution

weight sharing & feature map 추출

  • 다음은 1차원 Convolution 연산을 신경망 형태로 바꿔 그린 것이다.

    • 모든 node는 (0.3, 0.4, 0.3)이라는 같은 kernel을 사용하므로
      weight를 공유한다고 볼 수 있다.
      이 기법을 weight sharing == tied weight라고 한다.
    • DMLP의 경우 fully-connected 구조이기 때문에 88=648*8=64개의 weight를 갖는 반면,
      CNN은 382=223 * 8 - 2 = 22개의 weight만 갖는다.
      모델의 복잡도가 크게 낮아진 셈이다.
  • Kernel이 어떤 값을 가지느냐에 따라 추출하는 feature가 달라진다.

    • 예를 들어, (0.3, 0.4, 0.3)인 kernel은 0.3, 0.4, 0.3을 weight로 사용하여
      node 3개의 값을 평균하는 셈이므로 단지 smoothing하는 효과를 준다.
    • 예를 들어, (-0.5, 0, 0.5)인 kernel은 -0.5, 0, 0.5을 weight로 사용하여
      node 3개 중 변화가 발생하는 지점에서는 큰 반응이 있고 변화가 없는 곳에서는 반응이 0이다.
      따라서 edge feature를 추출하는 효과가 있다.
  • 따라서 CNN이 하나의 kernel만 사용하여 하나의 feature map을 생성한다면
    feature가 너무 빈약하여 좋은 feature를 추출하지 못할 것이다.

  • 따라서 학습을 통해 최적의 kernel값을 찾아내야 한다.

    • 예를 들어, 141*4크기의 kernel(bias 포함)을 3개 사용한다면,
      기계 학습 알고리즘은 매개변수 12개에 대해 최적값을 찾아내야 한다.

      2차원 영상이 777*7크기의 커널을 64개 사용한다면
      기계 학습 알고리즘은 매개변수 (77+1)64=3,200(7*7 + 1)*64 = 3,200개의 매개변수를 찾아야 한다. (+1은 bias를 포함시키기 위해)

hand-crafted feature 방식을 벗어나,
CNN은 기계 학습으로 Train Set에 최적인 kernel을 자동으로 찾아주기 때문에
CNN에 성공을 안겨 준 가장 중요한 요인이다.

kernel은 어떤 feature map을 추출할지 규정하므로
이러한 학습 과정을 feature learning == representation learning이라고 부를 수 있다.
CNN도 DMLP과 마찬가지로 Error Back Porpagation 알고리즘을 이용하여 kernel을 학습한다.

Convolution 연산에 따른 CNN의 특성

  1. Translation Equivariant(동변) :
  • CNN은 convolution 성질에 직접적인 영향을 받는다.
  • 즉, 신호가 이동하면 이동 정보가 feature map에 그대로 반영된다.
  • c(t(x))==t(c(x))c(t(x)) == t(c(x)), (t:이동 연산, c : convolution 연산)

    즉,
    이동 후 convolution한 결과 = convolution 후 이동 결과
    ➡️ 영상 인식에서 물체 이동이나 음성 인식에서 발음 지연에 효과적으로 대처할 수 있는 성질.

  1. 병렬 분산 구조
  • convolution은 sparsely connected 구조이므로
    입력층의 한 node가 미치는 영향력의 범위가 좁게 제한된다고 생각할 수 있지만,
    층을 거듭할수록 점점 커져 뒤로 가면서 map 전체에 영향을 준다.

stride에 의한 downsmapling

  • stride : Convolution연산의 kernel이 입력 데이터를 sliding할 때 이동하는 간격.
    stride의 크기를 늘리면 kernel이 sliding할 때
    입력 데이터에서 더 많은 픽셀을 건너뛰므로 출력 데이터의 공간 해상도가 줄어들게 된다.
  • 2차원에서는 다음과 같이 입력 데이터 mnm*n이 출력 데이터m2n2\frac{m}{2} * \frac{n}{2}로 축소된다.

Tensor에 적용

  • RGB Color 영상은 3mn3 * m * n 의 3차원 Tensor이다.

Pooling Layer

  • CNN에서는 보통 Convolution Layer 바로 다음에 Pooling Layer가 따른다.
    (실제로는 Convolution 연산 결과에 Activation Function을 적용하여 그 결과에 Pooling 연산을 수행한다.)

  • Pooling은 상세한 정보를 포함한 Feature Map에서 Summary Statistics(요약통계)를 추출함으로써 성능 향상에 기여.

  • Pooling최대 풀링, 평균 풀링, 가중치 평균 풀링, L2 norm 풀링 등이 있다.

  • 다음은 최대 풀링(max pooling)의 예시다.

    • 그리고 stride(보폭)을 2 이상으로 하면 Feature Map의 크기를 줄이는 효과가 있다.
      다음은 stride를 2로하여 Feature Map의 크기가 1/2로 줄어든다.
    1. Convolution Layer에는 ujku_j^k와 같이 가중치들의 값을 학습으로 알아내야 하지만,
      Pooling Layer에서는 단지 최대 or 평균을 구하는 연산을 하기 때문에
      학습이 알아내야 할 매개변수가 없다.
    2. 또한 Feature Map마다 독립적으로 Pooling 연산을 적용하므로
      Feature Map의 개수가 그대로 유지된다.
  • Pooling은 작은 이동에 둔감해지게 하는 특성이 있다.
    kernel size를 키우면 더 둔감해진다.
    이 특성은 Computer Vision이 풀어야 하는 물체 인식이나 영상 검색 등의
    응용문제에 매우 효과적이다.
    (다음은 기존 입력 데이터를 아래로 한 칸씩 이동하여 모든 노드값을 바꿨지만,
    Max Pooling을 적용한 결과 node값은 5개가 변경되었지만 나머지 3개는 그대로 유지되었다.
    이를 통해 Pooling은 작은 이동에 둔감하다는 것을 확인할 수 있다.)

전체 구조

  • Convolution LayerPooling Layer를 살펴봤는데,
    이들을 확장하고 이어붙여 CNN의 전체 구조를 완성해야 한다.

빌딩블록

  • CNN도 DMLP와 마찬가지로 여러 층을 이어 붙여 깊은 구조를 만든다.
    ➡️ 먼저 kernel을 kk'개를 사용하도록 확장.
    ➡️ 결국 kmnk' * m * n size의 Feature Map을 출력한다.
    ➡️ 그런 다음 Feature Map의 요소마다 Activation Function을 적용한다.
    ➡️ CNN은 주로 Activation Function으로 ReLU를 사용한다.
    ➡️ 그리고 Pooling 연산을 적용한다. (stride setting)
    ➡️ stride에 따라 Feature Map size가 줄기 때문에
    Feature Map size를 kmnk' * m'' * n''로 표기한다.

초창기 CNN : LeNet-5

  • 1990년대에 LeCun1998이 제안한 LeNet-5초창기 CNN이다.
  • LeNet5은 C - P - C - P - C 의 다섯 층을 가진다.
    (C : Convolution Layer, P : Pooling Layer)
  • 다음은 LeNet5의 구조이다.
    (s : stride, h : kernel size, k : number of kernels, p : padding)
    • 처음 C-P-C-P-C 부부은 Feature 추출만 할 뿐 분류하는 기능이 없다.
      (282828 * 28명암 Map을 120120차원의 Feature Vector로 변환)
      따라서 끝부분에는 분류 기능이 있는 Layer를 덧붙어어야 한다.
    • MLP, DMLP, SVM 등 어떤 것이라도 선택해 사용하면 된다.
    • LeNet-5는 은닉층이 하나인 MLP(Fully-Connected)를 사용한다.
    • softmax는 Chap 5.1.3 참고
  • LeNet-5는 미국의 은행에서 발행하는 수표의 금액을 읽는
    자동화 시스템을 만드는 데 사용되었다. 이는 CNN의 첫 번째 성공 사례로 꼽을 수 있다.

가변 크기의 데이터 다루기

  • CNN은 가변 크기의 input을 다룰 수 있다는 장점이 있다.
    • 위의 그림을 보면, mnm * n이 입력에 따라 달라지더라도 Convolution 연산이 가능하다.
      단지 연산 결과로 얻는 Feature Map의 크기인 mm'nn'가 달라질 뿐이다.
    • 단, 첫 번째 FC층(MLP) 또는 DMLP는 고정 크기의 Feature Vector가 필요하므로
      바로 직전에 원하는 크기로 조정하면 된다.
    • Pooling을 사용하면 쉽게 원하는 크기로 조정할 수 있다.
      Pooling 연산은 학습해야 할 매개변수를 포함하지 않으므로,
      kernel 크기와 stride를 적절히 바꾸면서 필요한 수만큼 sampling하면 된다.

CNN 사례연구

  • 앞에서 소개한 LeNet-5 이후에 나온 CNN은
    자연영상을 분류하는 더 도전적인 문제에 사용한다.
  • 자연영상 분류 문제는 ImageNet이라는 DB가 만들어진 이후에 주목받기 시작.

ILSVRC

  • ILSVRC는 ImageNet에서 1,000 부류를 뽑아
    Classification, Detection, Localization문제를 푸는 대회이다.
  • ILSVRC 대회에서
    • 2012년은 토론토 대학팀이 기존의 오류율에 경이로운 성능 향상을 보였다.
      이 혁신적인 CNN은 논문의 첫 번째 저자 알렉스 크리제브스키의 이름을 따서
      AlexNet이라고 불린다.
    • 2014년에는 Google팀이 인셉션이라는 혁신적인 아이디어를 구현한
      GoogleNet으로 1위.
      옥스퍼드 대학팀은 333*3의 작은 kernel을 사용하여 층을 깊게 하는 아이디어를 구현한
      VGGNet으로 2위.
    • 2015년에는 지름길 연결이라는 아이디어를 구현한 Microsoft팀의 ResNet이 1위.

Alexnet, VGGNet, GoogleNet, ResNet은 혁신적인 구조를 제안하였고
프로그램과 가중치를 모두 공개하여 딥러닝 연구자들이 널리 활용하고 있으므로
구체적으로 살펴볼 필요가 있다.

AlexNet

  • AlexNet은 Convolution Layer 5개, Fully-Connected Layer 3개로 구성.
  • 입력 data : [3224224][3 * 224 * 224] Tensor
  • 첫번째 Convolution Layer에서는 96개의 [31111][3 * 11 * 11] kernel을 적용한다.
    따라서 (9631111)(96 * 3 * 11 * 11)개의 parameter가 있다.
  • 1~5번째 Convolution Layer의 paramter들을 모두 더하면 약 200만 개이다.
    그런데 Fully-Connected Layer의 paramter들은 약 6,500만 개 이다.
    따라서 Fully-Connected Layer의 paramter가 약 30배 정도 많다.
  • 앞으로 CNN은 Fully-Connected Layer의 parameter 수를 줄이는 방향으로 발전한다.
  • AlexNet이 성공한 외부적 요인 :
    ImageNet이라는 대용량 DB와 학습 시간을 획기적으로 단축해 준 GPU.
    GTX 580이라는 GPU 모델 2대를 사용하였다.
    GPU 2대가 독립적으로 데이터를 처리하다가
    두 번째 convolution layer와 세 번째 convolution layer 사이에서
    정보 교환이 일어난다.
    현재는 GPU의 memory가 커져 이러한 복잡한 구조가 필요 없어졌다.

  • AlexNet이 성공한 내부적 요인 : 알고리즘 개선이다.

    • Activation Function으로 ReLU 사용
    • Local Response Normalization : kernel의 convolution result를 이웃 kernel의 값을 고려하여 조정하는 기법
    • Overfitting을 방지하기 위해 데이터 확대, dropout 같은 규제 기법
    • cropping(영상 잘라내기), flipping(반전) 기법 적용
    • PCA를 이용하여 영상 컬러값을 변환해 영상의 개수를 추가로 늘림
    • 영상 전처리로 화소별로 평균을 빼는 연산만 적용

VGGNet

  • VGGNet의 핵심 아이디어는 작은 kernel을 사용하여 신경망을 깊게 만드는 것
  • 논문은 큰 kernel을 한 번 적용하는 연산과
    333*3의 작은 kernel을 여러 번 적용하는 연산의 효과를 비교한다.
    중간에 있는 Pooling이나 비선형 Activation Function을 빼면
    777 * 7을 한 번 적용하는 연산과 333 * 3을 세 번 적용하는 연산은 효과가 같다.
    하지만 333 * 3을 세 번 적용하는 연산은 2가지 장점이 있다.
    1. 비선형 Activation Function을 두면 333 * 3을 세 번 적용하는 편이 비선형 연산을 더 많이 수행하여 분별력 측면에서 우월하다.
    2. c개 Feature Map에 Convolution을 적용하여 c개 Feature Map을 출력한다고 할 때,
      777 * 7을 한 번 적용하면 총 49c249*c^2개의 parameter가 필요한데,
      333 * 3을 세 번 적용하면 총 27c227*c^2개의 parameter만 필요하다.
      따라서 parameter 수가 55%로 줄어 계산이 약 2배 빨라진다.
  • VGGNet은 실험에 쓰인 여러 모델 중 하나만 111*1 kernel을 사용하였는데,
    최종 선택된 VGG-16과 VGG-19는 사용하지 않는다.
    하지만 111*1 kernel을 사용했다는 점에 주목해야 한다.

111 * 1 kernel

  • 111*1 kernel은 차원 축소의 효과가 있다.
  • Feature Map이 하나뿐이라면 111*1 kernel은 모든 화소의 값을 일률적으로
    변화시키는 효과만 있어서 무의미하겠지만
  • Feature Map이 여러 개인 경우에는 차원 축소의 효과가 있다.
    • [8mn][8 * m * n] Tensor에 [811][8 * 1 * 1]kernel 4개를 적용하여
      [4mn][4 * m * n] Tensor를 출력한다고 할 수 있다.

GoogleNet

  • GoogleNet은 3가지 중요한 idea를 사용한다.

1. 111 * 1 Kernel

  • [120 x 5 x 5] kernel을 사용하여 Feature Extraction 수행한다면?

    • 원하는 Feature Map [20 x 11 x 11]을 만들기 위해
      input tensor [120 x 11 x 11]에 padding=4 수행.
      (앞으로는 원하는 Feature Map을 만들기 위해 Padding은 setting했다고 가정)
    • 그리고 convolution 연산 시작.
      [120 x 5 x 5] x [20 x 11 x 11] = 7260k 번 연산 필요
  • [120 x 1 x 1] kernel을 사용하여 Feature Extraction 수행.

    • [120 x 1 x 1] x [6 x 11 x 11] + [20 x 11 x 11] x [6 x 11 x 11] = 450k 번 연산만 필요

[1 * 1] kernel을 사용하여 연산횟수를 많이 줄일 수 있다.

2. Global Average Pooling

  • NIN은 Global Average Pooling이라는 idea를 제공한다.

  • 우선 앞서 VGGNet에서 network의 뒷부분에 분류 목적을 위한
    FC Layer 3개를 두었고,
    완전연결 구조이므로 weight parameter가 매우 많아진다.
    모두 더하면 1억2천2백만 개이다. ➡️ 이는 Overfitting의 원인이 된다.

  • MLPcov는 위의 FC의 한계를 극복하기 위해서 Global Average Pooling을 사용한다.
    부류 수만큼의 feature map을 생성한다.
    이 예에서 부류 수가 1000이어서 1000장의 Feature map을 생성.
    Global Average Pooling은
    단순히 ii번째 feature map의 평균을 구하여 ii번째 출력 노드에 입력한다.

    [1024 x 7 x 7] Tensor 각각을 Global Average Pooling해서 1024개의 node로 만든다.
    그리고나서 [1024 * 1000] FC로 분류하고 softmax를 통해서 decision하게 된다.
    parameter 개수는 1024 * 1000 = 약 100만 개.
    ➡️ VGGNet의 parameter는 약 1억 2천만 개이고,
    GoogleNet의 parameter는 약 100만 개이다.
    GoogleNet에 필요한 parameter 개수는 VGGNet에 비해 1%도 안된다.

3. Inception module

  • NIN의 구조는 다음과 같다.

  • MLPconv을 사용하는 NIN과 달리,
    GoogleNet의 micro network는 Convolution 연산만으로 구성된다.
    이를 inception module이라고 한다.

    • 네 종류의 Convolution 연산을 수행하고,
      결과를 결합하는 방식으로 연산을 수행.

      예를 들어, 다음과 같이 원하는 feature map을 만들어서 합쳐준다.
      ➡️ 즉, 다양한 feature map을 concat함으로써 더 다양한 feature를 가지게 된다.
  • GoogleNet은 이러한 Inception module 9개를 결합한 구조이다.

ResNet

  • ResNet도 VGGNet처럼 깊은 구조를 추구한다.
    층이 깊어지면 특징이 더 많은 단계를 거치면서 더 좋은 표현으로 발전하기 때문이다.
    하지만 무턱대고 층을 더 쌓는다고 성능이 향상되는 것은 아니다.
    층수와 성능 사이의 관계를 분석한 실험에 따르면,
    층수가 늘어나면 처음에는 성능이 향상하다가 포화 상태에 이르고,
    어느 지점을 지나면 급격히 저하하는 현상
    이 나타난다.

  • ResNetresidual learning(잔류 학습)이라는 아이디어를 활용하여
    성능 저하를 피하면서 층수를 최대 1,202까지 늘렸다.

  • ResNet은 왜 shortcut connection(지름길 연결)을 사용할까?
    xlΣi=lL1F(xi)\frac{\partial}{\partial x_l}\Sigma_{i=l}^{L-1}F(x_i)가 -1이 될 가능성이 없어 gradient가 0이 되지 않는다.
    즉, Gradient Vanishing 문제가 발생하지 않는다.

    입력값을 그대로 출력값에 더해줌으로써 기본적인 identity mapping을 수행한다.
    이를 통해 학습 난이도를 낮추고, 기울기 소멸을 막는다.

    이렇게 identity mapping을 이용해서
    residual function이 잔여한 정보를 학습하게 만드는 것이 더 좋은 성능을 나오게 한다.

    따라서 shortcut connection을 통해
    Layer를 깊게 만들 때의 gradient vanishing 문제를 해결할 수 있고,
    성능을 높일 수 있다.
    이를 Residual Learning(잔차학습) 이라고 한다.

  • 다음은 34 Layer ResNet 예시이다.

  • ResNetVGGNet다른점 :

    • Residual Learning 사용.
    • Global average pooling 사용 (FC층 제거)
    • 모든 층의 convolution 연산 결과에 batch normalization 적용 후 ReLU 적용
  • ResNetVGGNet같은점 :

    • [33][3 * 3] kernel을 사용.

2010년부커 개최한 ILSVRC의 1000부류 Classification 문제의 성능은 이제 포화 상태에 도달했다고 판단하여 Classification 문제는 더 제시하지 않는다.
이제 Classification보다 어려운 Object Detection 문제에 도전한다.


생성 모델 (Generative Model)

  • 만약 기계학습이 Train Set을 이용하여 비슷한 Generative Model을 구축할 수 있다면
    strong AI에 한발 다가설 수 있다.
    왜냐하면 Generative Model은 Discriminative model(분별 모델)에 비해
    데이터 생성 과정에 대한 보다 깊은 이해를 필요로 하기 때문이다.

Generative Model이란?

  • DMLP와 CNN은 Discriminative model이다.
    • Discriminative model :
      Train Set에 feature vector xx와 label yy가 주어져야 학습이 가능한
      supervised learning에 해당한다.
      조건부 확률 P(yx)P(y|x)를 정확히 추정한다면 classification and regression 문제를 높은 성능으로 풀 수 있다.
    • Generative model :
      feature vector xx에 대한 확률 분포를 추정한다.
      label 정보가 필요 없는 unsupervised learning에 해당하며,
      label 정보가 있다면 활용해도 되고 무시해도 된다.

Generative Model은 P(x)P(x), P(xy)P(x|y), P(x,y)P(x, y)을 추정하도록 학습할 수 있다.
지금까지는 P(x)P(x)를 학습하였는데, P(x,y)P(x, y)를 학습하도록 확장하면
label이 있는 sample을 얻을 수 있다.
이러한 이유로 Generative model은 Semi-Supervised Learning에 활용하기도 한다.
(Chap 7.3.2)

Generative model과 Discriminative model의 차이

  • Generative modelP(x)P(x), P(xy)P(x|y), P(x,y)P(x, y) 중에서 상황에 따라 하나를 사용한다.
    Generative model이 추정하는 P(x)P(x), P(xy)P(x|y), P(x,y)P(x, y)는 다음과 같다.

    • 만약 Generative model이 P(x)P(x)를 사용하고,
      네 가지 xx값의 확률에 따라 다음과 같이 구간을 부여할 수 있다.

      만약 난수로 0.340.34가 나오면 (0.2,0.5](0.2, 0.5]에 속하므로 [0,1]T[0, 1]^T를 생성한다.
  • Discriminative modelP(x)P(x), P(xy)P(x|y), P(x,y)P(x, y)를 통해
    P(yx)P(y|x)학습을 마치고 다음과 같이 추정할 수 있다.

    • 만약 test sample로 [0,1]T[0, 1]^T가 주어지면,
      P(y=0x=[0,1]T)=0.33P(y=0 | x=[0,1]^T) = 0.33이고, P(y=1x=[0,1]T)=0.67P(y=1 | x=[0,1]^T) = 0.67이기 때문에
      y=1y=1이라고 Classification할 수 있다.

GAN의 등장

  • 위의 예제는 매우 단순한 경우이므로, 명시적으로 확률분포를 추정할 수 있고
    확률분포를 이용해 예측까지 할 수 있지만, Real world에서는 훨씬 복잡하다.
    ➡️ Real World에서는 이웃 화소는 비슷한 값을 가질 가능성이 높고,
    수평 또는 수직 edge가 나타나고, 배경은 texture를 구성하는 등
    일정한 규칙이 존재한다.

  • 이러한 규칙을 확률분포 Pdata(x)P_{data}(x)로 표기.

  • Pdata(x)P_{data}(x)는 real world에 내재한 data generating distribution(data 발생 분포)이다.

  • 아래의 사진에서는
    확률이 높은 곳에서 발생한 자연 영상 3개와
    확률이 아주 낮은 곳에서 발생한 잡은 영상 1개를 보여준다.

    • Pdata(x)P_{data}(x)를 모방하는 model이 있고,
      이 model의 확률분포를 Pmodel(x;θ)P_{model}(x;\theta)로 표기할 수 있다.
    • 이 model의 확률분포는 MLE(Maximum Likelihood Estimation)
      즉, argmaxθP(Xθ)argmax_\theta P(X|\theta)를 풀어 찾아내면 된다.
      예측 단계에서는 Pmodel(x;θ^)P_{model}(x;\hat\theta)를 sampling하여 새로운 sample을 생성하면 된다.
    • 하지만 Real world에서 Pmodel(x;θ^)P_{model}(x;\hat\theta)을 명시적으로
      추정하는 일은 불가능 하기 때문에
      대부분의 Generative Model은 확률분포를 암시적으로 표현하는 우회 방법을 사용한다.

예전 기계학습은 주로 Chap 10의 probabilistic graphical model에 속하는
HMM(Hidden Markov Model)을 Generative Model로 사용했었는데,
현대 기계학습은 주로 딥러닝을 사용한다.
최근 두각을 나타내는 Generative Model로는

  • GAN(Generative Adversarial Model),
  • VAE(Variational AutoEncoder),
  • RNN(Chap 8)
  • RBM(Chap 10)
    등이 있다.

GAN

  • 다음은 GAN(Generative Adversarial Network)이 생성한 가짜 Sample을 보여준다.
    • 왼쪽은 MNIST, 오른쪽은 CIFAR-10 data로 학습한 후 생성한 자연 영상이다.
    • 진짜와 가짜를 구별하는 실험을 수행한 결과, MNIST는 52.4%, CIFAR-10은 78.7%의
      정확률을 보였다.
      (가짜가 완벽하여 구별할 수 없을 때 50% 정확률)

그렇다면 GAN은 label 정보 없이 XX만 사용하는 Unsupervised Learning인데
어떻게 영상을 생성할 수 있을까?
➡️ Goodfellow는 Generator G와 Discriminator D를 서로 대립시켜 학습시키는 아이디어를 고안해냈다.

GAN의 원리

  • GAN의 원리는 다음과 같다.
    • Generator G는 가짜 Sample을 생성한다.
    • G의 목적은 D가 진위 구별을 못하게 하는 것이다.
    • Discriminator D는 Train Set의 진짜 Sample과 G가 만든 가짜 Sample을 구별한다.
      ➡️ GAN 학습은 G가 만들어내는 Sample을 D가 구별할 수 없는 수준까지 도달하는 것이다.

GAN의 구조

  • GAN의 구조는 다음과 같다.
    (최초의 GAN은 DMLP로 구현되었다.)
    • fGf_G는 난수 생성기로 만든 vector zz를 입력으로 받아 영상을 출력한다.
    • G에 해당하는 DMLP : fG(z;θG)f_G(z ; \theta_G)
    • D에 해당하는 DMLP : fD(x;θD)f_D(x ; \theta_D)
      fD(x;θD)f_D(x ; \theta_D)는 생성된 fake 영상을 입력받아 1 or 0을 출력한다.

GAN의 Loss Function

  • GAN은 Loss Function으로 MSE 대신 log likelihood를 사용한다.
    (Chap 5)

  • log likelihood는 다음과 같다.
    JD=e=log2(oy)J_D = e = -log_2(o_y)

  • Discriminator의 Loss Function :

    • 만약 fDf_Dxrealx^{real}에 대해 0.999를 출력하고 xfakex^{fake}에 대해 0.001을 출력한다면,
      0에 가까운 최대값에 가깝다.
      만약 fDf_Dxrealx^{real}에 대해 0.001를 출력하고 xfakex^{fake}에 대해 0.999을 출력한다면,
      -6으로 작은 낮은 된다.
  • Generator의 Loss Function :

GAN의 학습 알고리즘

  • GAN의 학습 알고리즘은 다음과 같다.
    • Line 3 ~ 7 : Discriminator 학습. Loss의 최대값을 찾아야 하므로 SGA 적용
      (Stochastic Gradient Ascent)
    • Line 8 ~ 10 : Generator 학습. Loss의 최소값을 찾아야 하므로 SGD 적용.

DCGAN

  • 최초로 GAN이 발표된 이후 여러 개선 방법이 등장하였다.

  • [Salimans2016]은 특징 매칭, 가상 배치 정규화, 미니배치 분별과 같은
    여러 기법을 적용하여 진짜에 보다 가까운 sample을 생성하였다.
    아래에 있는 그림이 그 sample이다.

  • [Radford2016]은 DMLP 대신 CNN을 사용한 DCGAN(Deep Convolutional GAN)을 제안하였다.

  • 다음은 DCGAN의 구조이다.

    • VGGNet과 방향이 반대임을 알 수 있다.

딥러닝의 힘

전체 과정을 동시에 최적화

  • 나뭇잎 인식에 고전적인 접근방식은
    전처리, 분할, 특징 추출, 분류의 과정을 따로따로 설계 구현한 다음 단순히 이어 붙이는 방식.
    분류 과정 전에는 사람의 의사결정에 의존하고, 기계학습을 단지 분류 단계에 적용.

    하지만 딥러닝은 전체 과정을 동시에 최적화.
    예를 들어, 왼쪽 층에서는 edge, corner, texture와 같은 저급 feature를 추출하고
    오른쪽으로 갈수록 저급 feature를 조합하여 나뭇잎 모양에 가까운 고급 feature를 추출하며
    분류 단계는 이렇게 추출된 feature에 맞게 동시에 최적화한다.

깊이의 중요성

  • Hidden Layer가 1개인 MLP에 비해 Hidden Layer가 2개인 DMLP가 되었을 때,
    공간을 훨씬 정교하게 분할함을 확인할 수 있다.
    • 실선 : node 20개, hidden layer 1개인 MLP
    • 점선 : node 10개, hidden layer 2개의 DMLP

계층적 특징

  • 다음은 ImageNet으로 학습을 마친 Feature Map을 보여준다.
    • 1번 Layer에서는 비교적 단순한 edge feature를 추출하는 반면,
    • 2번 Layer는 edge가 결합한 형태의 feature를 추출하여 texture나 물체 일부를 표현.
    • CNN은 이러한 방식으로 계층적 Feature를 추출한다.
profile
model compression

0개의 댓글