학습일지/AI

머신러닝야학 2기 - Tensorflow 102. CNN

inspirit941 2021. 1. 12. 08:37
반응형

opentutorials.org/module/5268

 

Tensorflow 102 - 이미지 분류(CNN)

이 수업은 머신러닝 야학 진도에 맞춰서 공개됩니다. 공개일정은 진도표를 참고해주세요. 머신러닝 야학은 온라인으로 머신러닝을 학습하는 무료학교입니다. 머신러닝을 시작하고 싶다면 1월

opentutorials.org

데이터와 차원.

차원 (Dim)을 정의하는 두 가지 관점

  • '표'에서의 열
  • 데이터의 포함 관계
  1. 데이터 공간 ('표 형태')
    • 표에서 Column의 개수가 2개 = 2차원 평면의 한 점.
    • 3개 = 3차원 공간의 한 점
    • n개 = n차원 공간의 한 점.

즉 관측치 = "N차원 공간의 한 점". 그러면 변수의 개수 (column의 개수) = 공간의 차원 수와 동일함.

스크린샷 2021-01-11 오전 10 53 37

데이터를 (관측치를) 차원의 한 점으로 표현한다는 건,

  • 데이터 간 거리를 잴 수 있게 되고
  • 가까운 정도를 숫자로 정밀하게 비교할 수 있게 된다.
  1. 데이터 형태 (데이터 포함관계)

스크린샷 2021-01-11 오전 11 18 32

표의 데이터는

  • 4차원 공간의 점 (관측치) 라고도 볼 수 있고
  • 1차원 배열 세 개를 품고 있는 하나의 배열 = 2차원 배열

으로도 볼 수 있다. 이 경우 배열의 깊이 = "차원 수"가 된다.

스크린샷 2021-01-11 오전 11 25 16

이미지 데이터는 최소 단위가 2차원 배열이다. 가로 / 세로, 흑백일 경우 최소 2 * 2 크기의 배열이 됨.

  • 관측치 관점에서 보면 데이터 x1과 img1의 데이터 개수는 둘 다 4개다. 즉 데이터 공간 맥락에서는 둘 다 4차원 공간의 데이터라고 볼 수 있다.
  • 데이터 표현 형태의 관점에서는 x1은 1차원, img1은 2차원 데이터다.

"배열의 깊이"를 "차원"으로 볼 때, 여러 차원의 형태로 구성된 데이터 구조를 Tensor라고 한다.

스크린샷 2021-01-11 오전 11 34 07

이미지 데이터?

스크린샷 2021-01-11 오전 11 38 13

흑백 이미지

  • 28 * 28로 구성된, 2차원 형태의 데이터
  • 28 * 28 = 784차원 공간의 한 점

칼라 이미지의 경우, 흑백이미지에는 숫자 하나만 들어가있는 저 공간에 3개 데이터가 들어간 array가 있다고 보면 된다.

스크린샷 2021-01-11 오전 11 42 27

  • 따라서 3개 array가 가로, 세로로 각각 32개씩 쌓인 모양이므로 (32, 32, 3)인 3차원 형태의 데이터가 되고, 데이터 개수가 50000개라면 (50000, 32, 32, 3) 구조가 된다.
  • 하나의 사진을 구성하는 데이터 개수는 3072 (32 * 32 * 3) 이므로, 3072차원 공간의 한 점이라고도 볼 수 있다.

Flatten

MNIST의 데이터 28 * 28을 flattern

  • 784개의 column을 가진 표 형태의 데이터로 변환하는 것.
  • 데이터 개수만큼의 row를 가진 표 형태가 됨.

이 features들을 그대로 사용해서 0 ~ 9까지의 숫자를 분류하려고 하면,

  • '분류를 잘 예측할 수 있는' feature일 수록 가중치가 높을 것이다.

스크린샷 2021-01-11 오후 12 16 05

Neural Net을 사용한다는 건, 원래의 784개 feature 중 '예측에 사용하기 적합한 feature를 찾아달라'는 것과 같다.

Conv2D

스크린샷 2021-01-11 오후 12 34 56

Convolution의 결과는 이차원 형태의 숫자 집합으로 리턴됨. 따라서 2차원으로 표시 가능.

스크린샷 2021-01-11 오후 3 12 40

대상 이미지로부터 Filter를 사용해 특징을 잡아낸 Convolution의 결과

= feature의 위치정보가 표현된 Feature Map 이라고 부른다.

  • 하나의 필터당 하나의 feature Map을 만들어낸다.

스크린샷 2021-01-11 오후 4 12 28

Conv2D 메소드에서 설정할 것은 두 가지.

  • 몇 개의 filter를 사용할 것인가 -> 3개일 경우 "3채널의 feature map을 생성한다" 는 용어를 쓴다.
  • filter의 크기는 몇 * 몇인가.

이렇게 추출한 feature Map을 학습에 사용. (flatten -> Dense)

Conv2D를 사용하기 위해서는 데이터를 3차원으로 변경해야 함.

  • = Input에 Shape=[28, 28, 1]로 변경한 이유.
  • reshape으로 데이터 차원을 맞춰 줌

Filter

스크린샷 2021-01-11 오후 5 23 15

필터셋 == filter.

"feature map 전체를 본다"의 예시

  • 흑백사진일 경우 (가로, 세로, 1) dim 이미지. 따라서 featureMap의 크기는 (size, size, 1) -> 채널 1개이므로 featureMap도 채널 1개
  • 컬러사진일 경우 (가로, 세로, 1) dim이므로 featureMap의 크기는 (size, size, 3)이 된다. -> 채널 3개이므로 featureMap도 채널 3개.

Conv2D(3)... 의 경우 featureMap이 3개이므로, Conv2D를 통과한 데이터의 차원은 (5,5,3)가 세 개이므로 (3,5,5,?)이 된다.

스크린샷 2021-01-11 오후 5 34 17

  1. 28 * 28 * 1 이미지를 5 by 5 filter 세 개를 활용하면
    • 필터 개수가 3개이므로 리턴되는 featureMap은 세 개 = 3
    • 필터 크기가 5이므로 사이즈는 28 - 5 + 1 = 24.
    • 따라서 24 * 24 * 3이 된다.
  2. 24 * 24 * 3 형태의 데이터를 5 by 5 filter 6개를 활용한다면
    • 필터 개수가 6개이므로 리턴되는 featureMap은 6개
    • 필터 크기가 5이므로 24 - 5 + 1 = 20
    • 여기서 filter는 앞의 featureMap

Conv2D 연산의 과정: https://www.youtube.com/watch?v=VHQbRI2Xvl0

MaxPool2D

스크린샷 2021-01-11 오후 7 49 26

Flatten 이후, feature들의 가중치를 조절해 원하는 결과를 얻어내기 위한 연산에는 비용이 든다. (파라미터 개수 측정 과정에서 +1은 bias값이다.)

특히 Conv2D 연산 결과로 나온 feature 크기가 클수록, Dense 레이어에서 연산해야 하는 feature의 가중치 개수는 점점 커진다. 즉 연산속도를 느리게 만든다.

이 때문에 등장한 개념이 Pooling. 입력으로 사용할 column (feature) 개수를 줄이는 것이 목적임.

스크린샷 2021-01-11 오후 7 52 51

Pooling : 이미지 크기를 절반으로 줄이는 것.

스크린샷 2021-01-11 오후 7 54 41

  • featureMap의 값이 크다 = 원하는 feature 특징이 가장 두드러지는 부분.
  • 따라서, 특징을 최대한 해치지 않는 선에서 feature 개수를 줄이는 것.

cf. 개인적으로 정리가 필요해서 기록한 내용

Batch Normalization이 필요한 이유

https://www.youtube.com/watch?v=nUUqwaxLnWs

  • Hidden Layer의 input으로 들어오는 이전 hidden layer값의 변동을 줄여준다. (데이터가 신경망을 지날수록, 뒤쪽 신경망의 input으로 들어오는 값의 변동성이 커지기 마련이다. 이 변동성을, 최소한 평균은 0 / 분산은 1인 데이터 분포를 갖도록 줄여주는 역할.)
  • 앞쪽 layer / 뒤쪽 layer 매개변수 간 relation을 약화시킨다. 즉, 각 층의 학습이 보다 독립적으로 전개될 수 있다. = 전체 신경망의 학습속도를 늘려준다. = 원래의 의도.
  • 약간의 regularization 효과.
    • mini-batch 형태로 데이터 학습. 배치는 어쨌든 전체 데이터의 샘플이므로, 배치 데이터의 평균과 분산은 모집단 전체의 평균과 분산값에 약간의 잡음이 낀 상태가 된다. (noisy - bcuz the data size is relatively small)
    • 데이터에 'noisy 평균'값을 빼고, 'noisy 분산'값을 나누는 과정... 학습과정과 결과에 약간의 Noise가 추가된다.
    • dropOut은 학습된 layer값에 0 / 1을 곱해 진행한다는 점에서 regularization을 추가한다면, batch normalization도 평균 / 분산값을 연산에 추가해 진행한다는 점에서 regularization 역할도 일부 담당한다. 다만, batch norm만 가지고 regularization을 논할 만큼 유의미하다고 보긴 힘듬.
    • batch의 사이즈가 커지면, 보다 모집단에 가까운 평균과 분산을 사용하므로 노이즈가 줄어든다. 따라서 regularization 효과가 약해진다.

noise가 추가된다 = 각 layer간 지나친 의존성을 낮추는 효과.

반응형