본문 바로가기

AI_학습노트/CS231n

_10.[CS231n]Lecture7.

CS231 보기전 머신러닝 인스톨하기

DL-CNN을 이용한 이미지 인식의 개념정리

Lecture1. Introduction to Deep Learning for Computer Vision.

Lecture2. Image Classification

Lecture3. Linear Classifiers

Lecture4. Optimization

Lecture5. Neural Networks

Lecture6.Backpropagation

Lecture7.CNN(Convolutional neural network)

숙명여대 강의 [링크][49분부터]

 

7.1 Convolutional Network

ConvNet 또는 CNN이라고도 부르는 합성곱 신경망(Convolutional neural network)은 하나 이상의 합성곱 층(Convolutional Layer)를 가진 인공 신경망입니다. 이 층을 사용하면 딥러닝 모델이 공간 패턴을 효과적으로 처리할 수 있습니다.  LeNet에서 처음 사용되었고 2012년 AlexNet에 사용되면서 이렇게 강의에서 배우게 된것 같습니다. 

Convolutional Network(ConvNet)에는 배운 FC(Fully connected network)에 추가적으로 Convolution Layers(conv 레이어), Pooling Layers, Normalization 필요합니다. 

지난 강의에서 우리는 2D (28*28) 이미지를 1D 784flattern 배열로 펼쳐서 히든레이어에 전달하는 방법으로 FC neural network을 배웠습니다. 그런데 2D를 1D로 줄이면 의미있는 이미지의 시각적 정보(구조)가 유실됩니다. 또한 이미지를 줄여서 2D구조가 손실되는 것 외에도 FC neural network구조는 계산의 복잡도를 고려해야 합니다. 지난 시간 FC를 설명하기위해 링크걸어두었던 블로그에서 예로든 28*28 이미지는 MNIST손글씨 데이터로 흑백이미지 이기때문에 1개의 채널을 갖습니다. 

하지만 많은 이미지 데이터들이 RGB 3개의 채널로 되어있고 200*200의 컬러이미지 하나를 flattern하게 펼칠경우 40000개의 픽셀에 3개의 채널을 가진12만 1개의 파라미터가 필요합니다. FC의 은닉층을 64개의 뉴런으로 구성할 경우 800만개의 가중치 연산을 해야하는 데, 이렇게 낮은 해상도의 작은 이미지 한 장에연산만 두고 봐도 FC구조는 컴퓨팅 연산이 폭주할 것같습니다.

 

정리하자면, 이미지 사이즈가 커지면서 parameter인 weight의 갯수 또한 증가하게 되고, fully connected network에서 forward/backpropagation의 계산량이 어마어마하게 커질 수 있습니다. 하지만 ConvNet을 이용하면, 하나의 filter가 parameter가 되고 이것이 이미지에 공통적으로 적용되면서 parameter수를 줄이고, 계산량도 줄이는 장점이 있습니다.

 

ConvNet(합성곱층)은 위의 슬라이드에서 보는 것과 같이 필터 (또는 커널)를 적용하여 2차원의 이미지를 1차원으로 줄여도 이미지의 정보가 손실되는 것을 방지합니다. 어떤 원리인지 아래이미지에서 확인하겠습니다. 

[그림1] https://cs231n.github.io/convolutional-networks/

 

 

싸이트로 이동해서 움직이는 화면으로 확인하면 보다 직관적으로 이해할 수 있습니다. 필터는 가중치입니다. 위의 이미지에서는 5X5의 이미지에 패딩을 1로 하여 7X7로 만들고 3X3의 필터로 적용합니다. 필터의 크기는 다양하게 구성할 수 있습니다. 보터 3x3, 5x5, 7x7 로 구성합니다. 
다시 슬라이드로 돌아가서 32*32의 CIFAR10이미지로 이해해 보겠습니다. 

앞의 숫자 3은 필터의 채널수이며, 필터의 채널은 이미지의 컬러 채널에 대응됩니다. (흑백은 1, 컬러는 3)

합성곱 필터는 가중치 입력과 절편을 가집니다. FC에서 입력마다 모든 가중치가 연산된것과 달리 합성곱층은 3*3의 가중치 필터가 입력에 적용된다는 점입니다. 아래의 그림과 같이 이미지의 일부와 필터의 내적을 해서 나온 결과는  scala값이고. 그렇게 필터를  칸씩(stride값에 따라 다름) 움직이면서, 내적곱을 진행하면 FC보다 훨씬 적은 수의 가중치가 적용되는것이고, 또 다른 중요한 점은 이렇게 나온 이미지도  2차원 배열을 구성한든 것입니다.

 

이 필터의 가중치라는 것은 어떤 역할을 할까요?

CS231n을 공부하면서 참고하고 있는 딥러닝일러스트레이티드에서는 다음과 같이 설명합니다. 

 

*일반적으로 합성곱 층 하나에 여러 개의 필터를 사용합니다. 신경망은 각각의 필터를 사용해 독자적인 방식으로 층에서 데이터의 표현을 학습할 수 있습니다. 예를 들어 생물학적 시각 시스템에 있는 허블과 비셀의 단순한 세포에 비유해보죠. 신경망의 첫번째 은닉층이 합성곱 층이라면 수직선에 최적화되어 반응하는 커널(필터)이 있을 수 있습니다. 이 경우 입력 이미지에 있는 수직선을 합성곱(스켄) 할 때 마다 큰 활성화 값(a)을 출력합니다. 이 층에 있는 또 다른 커널은 수평선과 색 변화와 같은 간단한 공간 특성을 표현하도록 학습할 수 있습니다. 그래서 이런 커널을 필터라고 부르게 되었습니다. 이미지를 스캔하여 어떤 특성의 위치를 감지하도록 튜닝되었기 때문에 이런 패턴, 모양, 색을 만날 때마다 큰 활성화를 출력합니다. 이런 이유로 출력층을 활성화 맵이라고 부릅니다. 

신경망이 깊어질수록 층에 있는 필터가 단순한 특성이 복잡하게 조합된 패턴에 점점 더 반응합니다. 이를 통해 점점더 추상적인 공단 패턴의 표현을 학습하고 결국 간단한 선과 색에서 계층적으로 복잡한 패턴과 모양을 구축합니다. 

(딥러닝일러스트레이티드 P.191)

합성곱층의 결과물은 이전의 머신러닝 알고리즘으로 학습했던 결과물과 다음과 같은 차이를 보입니다.

[그림2]

 

[그림1]에서 보는 것처럼 1개의 이미지에 3개의 채널을 가진 필터가 1개의 출력층을 만듭니다. 여기서 슬라이드에서는 보이지 않는 숫자'0'으로 채워진 패딩을 볼 수있습니다. 이 패딩은 입력데이터와 출력데이터가 같은 크기를 갖도록 해주며, 이미지의 정보 유실을 방지합니다. 

패딩을 주지 않는다면, 위의 슬라이드와 같이 활성화맵의 크기가 줄어들게 됩니다. 이 부분에서는 슬라이드에 제시된 그림이 노베이스인 저에게는 정확히 이해되지 않아서 외부 자료를 사용하겠습니다. 

 

 

필터가 한 개일 경우

필턱가 세개라면, 같은 방법으로 세 장의 1차 활성화맵을 구한 후 행렬 덧셈의 방법으로 한 장으로 합쳐서 최족 활성화 맵이 만들어 진다. 다시 [그림1]로 가면, 모든 입력값은 하나의 필터로 모두 대응되어 채널수 만큼 더해져서 하나의 활성화 맵이 나옵니다. 

필터의 갯수만큼 활성화 맵이 나올것이고, 이 활성화 맵 하나는 전체 입력값의 정보를 (필터의 특성값으로 내적되어) 가지고 있게 되는 것입니다.  여기까지는 이해가 되었습니다. 파라미터의 갯수를 구하거나 계산량을 구해보는 식은 마지막에 한꺼번에 보겠습니다.

 

 여기까지는 이해가 되었습니다. 이제 활성화 맵을 해석하는 방법중 차원depth가 잘 이해가 되지 않습니다.

 

 

위의 슬라이드에서 output을 해석할 때, 1. 6개의 활성화맵이 나온다. 라고 하기도 하고, 2. 6차원으로 이루어진 28 x 28 사이즈의 grid , input 이미지의 5 x 5(필터와 같은 크기)영역에서 추출된 6차원의 feature들의 모음이다. ( 그리드에 feature 6 대응) 라고도 한다고 한다. 강의에선 중요한 의미는 아니라고 하지만, 그래도 개운치가 않으니 찾아보겠습니다.

 

이런 좋은 자료는 대통령상이라도 받아야 하는거 아닌지 모르겠습니다. '수용영역과 필터의 차이를 개운하게 다르다!!'라고 단호하게 알려주는 은혜로운 슬라이드 입니다. 

 

그럼에도 활성화맵에서 차원네 대해서 혼란스럽던 부분이 정리되었습니다. 아래 그림이 이해가 되지 않아서 정말 찜찜 했는데, 

[그림1]을 가지고 아래 사진을 설명해하자면,  3차원(rgb)필터 3개가 1셋트로 총 16개의 필터가 적용된 이미지 입니다. 

따라서 어떤 깊이 (depth), 어떤 가로, 어떤 세로 폭을 가지더라도 3차원 텐서의 형상을 유지한채 활성화 시켜주기 때문에 공간적 구조는 변하지 않고 보존된다는 것으로 이해가 됩니다.

 

 

**참고로~ 조금만더 알아보자면**

3차원의 합성곱 연산은 데이터와 필터를 직육면체 블록이라고 생각하면 쉽습니다. 블록은 아래 그림과 같은 3차원 직육면체 입니다.

또, 3차원 데이터를 다차원 배열로 나타낼 때는 (채널, 높이, 너비) 순서로 쓰겠습니다. 예를 들어 채널 수 C, 높이 H, 너비 W인 데이터의 형상은 (C, H, W)로 씁니다. 필터도 같은 순서로 씁니다.

이 그림에서 출력 데이터는 한 장의 특징 맵입니다. 한 장의 특징 맵을 다른 말로 하면 채널이 1개인 특징 맵입니다.

 그럼 합성곱 연산의 출력으로 다수의 채널을 내보내려면 필터(가중치)를 다수 사용하는 것입니다. 

 

이 그림과 같이 필터를 FN개 적용하면 출력 맵도 FN개가 생성됩니다. 그리고 그 FN개의 맵을 모으면 형상이 (FN, OH, OW)인 블록이 완성됩니다. 이 완성된 블록을 다음 계층으로 넘기겠다는 것이 CNN의 처리 흐름입니다.

왜 인지는 모르겠지만 이 공간적 구조의 의미가 잘 와닿지 않아서, 여러 방법으로 이해해보기위해 자료가 길어졌습니다. 그래도 내 소중한 시간이 녹아있으니 모두 「저장」해 두겠습니다.

차원에 대한 공부는 이 정도로 이해하고, 수식으로 넘어가겠습니다.

 

슬라이드는 기호화 되어 있어서, 넘어가면 잊어버리고, 또 다음장으로 가면 잊어버립니다. 

우리나라 한글로 한번 익혀봅니다. 

 

자 그럼, 아래 문제를 풀어볼까요?

답은 32 가 나오네요. 

아웃풋은 필터의 갯수만큼 나오니까 10*32*32 가 맞겠어요. 

 

컨볼루션 네트웍의 아키텍쳐 (구조)를 한번 더 확인하겠습니다.

classical CNN Architecture

  • Relu를 지나왔기 때문에 활성화 맵이라고 하였습니다,
  • 이제 Pooling만 설명하면 뒷부분은 우리가 이미 잘 알고있는 완전 연결계층이네요. 

7.2 필터 하이퍼파라미터

의식의 흐름대로 정리를 하다보니, 패딩과 스트라이드는 어떻게 넘어간것 같습니다. 중요한것은 패딩과 스트라이드가 하이퍼파라미터라는 것입니다. 합성곱층의 필터의 하이퍼파리미터의 의미만 다시한번 짚고 넘어가겠습니다.

  • 필터의 차원: 2차원일 때와 비교하면, 길이 방향(채널 방향)으로 특징 맵이 늘어났습니다. 채널쪽으로 특징 맵이 여러 개 있다면 입력 데이터와 필터의 합성곱 연산을 채널마다 수행하고, 그 결과를 더해서 하나의 출력을 얻습니다. 3차원의 합성곱 연산에서 주의할 점은 입력 데이터의 채널 수와 필터의 채널 수가 같아야 한다는 것입니다. 
  • 스트라이드(stride): 합성곱(convolution)이나 풀링(pooling) 작업의 경우, 스트라이드(stride) S는 각 작업 후에 윈도우(window)가 이동하는 픽셀 수를 나타냅니다.
  • 제로-패딩(zero-padding): 제로패딩은 입력(input)의 각 경계면에 P개의 제로(zero)를 더하는 과정을 말합니다. 자세한 설명은 아래의 치트키 링크를 통해 확인하겠습니다.
  • [참고자료]합성곱 신경망 시트치트 [링크]

참고로 아래 도표는 다음 강의에서 모델을 살펴보는 데활용되므로 살짝 느낌만 알고 가겠습니다.

7.3 Pooling

Pooling Layer는 신경망 전체의 파라미터 개수와 복잡도를 줄이는 역할을 합니다. Convolution Layer의 출력 데이터를 입력으로 받아서 출력 데이터(Activation Map)의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용됩니다. Pooling Layer를 처리하는 방법으로는 Max Pooling, Average Pooling, Min Pooling이 있습니다. 정사각 행렬의 특정 영역 안에 값의 최대값을 모으거나, 특정 영역의 평균을 구하는 방식으로 동작합니다.

: 풀링 층은 활성화 맵의 공간 차원을 출소시키고 깊은 차원은 그대로 둡니다.

: 네트워크의 parameter의 개수나 연산량을 줄이기 위해 representation(feature map)의 spatial한 사이즈를 줄이는 것입니다. 

: 간단히 말해 convolution결과로 나온 feature map의 크기를 줄이는데, 일부 영역을 하나의 값으로 만듭니다.

: 이는 오버피팅을 조절하는 효과도 가지고 있습니다.

 

 

7.4 LeNet-5

 

  • 1998년 얀 르쿤과 동료들이 만든 고전적인 CNN 구조와 약간 다르지만, 일반적인 구조입니다.
  • MINST손글씨 분류 데이터셋을 사용합니다.
  • 당시에는 없던 Relu활성화 함수를 사용했습니다. 예전에는 시그모이드를 사용함. 

레이어를 쌓으면 쌓을 수록 학습이 어려워지는 문제를 해결해야 했습니다.

(training 단계에서 loss function 충분히 낮아지지않는다. , optimization  되지않는다.) 

 

7.5 Batch Normalization

각 레이어를 지날때마다 나온 출력값을 노멀라이즈 한 후 다음층으로 전달하는 방식으로 데이터의 분포를 정규화 시켜 전달하는 방법입니다. 여기서 잠깐 혼동스러운 딥러닝 용어를 또 정리하고 오도록 하죠. 

 

'AI_학습노트 > CS231n' 카테고리의 다른 글

_09.[CS231n]Lecture6.  (0) 2021.02.14
_08.[CS231N]Lecture5.  (0) 2021.02.14
_07.[CS231N] Lecture4.  (0) 2021.02.13
_06.[CS231N] Lecture3.  (0) 2021.02.13
_05.[CS231N] Lecture2.  (0) 2021.02.12