본문 바로가기
딥러닝

밑바닥부터 시작하는 딥러닝 Chapter7 - CNN 합성곱신경망

by 오렌지마끼야또 2022. 6. 28.
728x90
반응형

 

 

 

 

 

CNN은 이미지 인식과 음성 인식 등 다양한 곳에서 사용되는데 특히 이미지 인식 분야에서 대부분 CNN을 기초로 한다.

 

지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있다.

이것을 FCL(Fully Connected Layer) 완전 연결 계층이라고 한다.

완전연결 신경망은 Affine 계층 뒤에 활성화 함수를 갖는 ReLU/Sigmoid 계층이 이어져 있다. 위 그림에서는 'Affine-ReLU' 계층 조합이 4개 연달아 있고, 마지막 5번째 층은 'Affine-Softmax' 계층 조합으로 최종 결과인 확률을 출력한다. 

 

CNN에서는 새로운 층인 합성곱 계층 Convolutional layer 와 풀링 계층 Pooling layer 가 추가된다. 위 그림에서 볼 수 있듯이 CNN의 계층은 'Conv-ReLU-(Pooling)'조합으로 연결된다.
그리고 출력에 가까운 층에서는 이전 신경망과 같이 'Affine-Softmax' 조합을 그대로 사용한다. 

 

 

 

완전연결 계층의 문제점
완전연결 계층을 사용하면 데이터의 형상이 무시된다. 
입력 데이터가 이미지인 경우를 예로 들어보자.
이미지는 3차원 형상으로 통상 세로,가로,채널(색상)로 공간적 정보를 담고 있다. 완전연결 계층에 입력할 때 3차원 데이터를 평평한 1치원 데이터로 평탄화해주고 각 계층을 지나게 한다. 3차원 속에서 의미를 갖는 본질적인 패턴이 숨어있을 건데, 완전연결 계층을 사용하면 형상을 무시하고 모든 입력 데이터를 같은 차원의 뉴런으로 취급하여 형상에 담긴 정보를 살릴 수 없게 한다. (예를 들면, 공간적으로 가까운 픽셀의 값이 비슷하거나..)

이런 문제 때문에 입력 데이터의 형상 유지를 위해 합성곱 계층을 사용한다.
합성곱 계층에서는 입력데이터로 받은 3차원 데이터를 다음 계층에서도 3차원 데이터로 전달하기때문이다.
이로써 CNN에서는 이미지와 같이 형상을 가진 데이터를 제대로 이해할 가능성이 높다.

 

 

 

CNN에서는 input을 feature 라고 부른다.

합성곱 계층의 입출력 데이터를 feature map 특징 맵 이라고 한다. 

 

 

 

Convolution(합성곱) 연산

필터(커널)와 필터윈도우의 각 원소를 곱하고 모두 더한다.

이 계산을 FMA(fused multiply-add, 단일 곱셈-누산) 이라고 한다.

사실 이것은 정확히 말하면 Convolution이 아니라 Cross-correlation(교차상관) 이다.

실제 Convolution은 필터를 상하,좌우로 뒤집은 다음 계산을 하는 것이다.(행렬의 Flipping)

때문에 신호처리 관련 전문가들로부터 말이 많이 나왔었다고 한다.

 

 

X * W + b 를 했듯이 Convolution을 하고 b를 더한다.

편향 b 는 1 X 1 로 표현하고 그 값을 모든 원소에 더한다.

 

 

 

 

Padding 패딩

Convolution 전 입력 데이터 주변을 특정 값 (예를 들어 0)으로 채우는 것을 패딩이라 한다.

패딩은 주로 출력 크기를 조정할 목적으로 사용한다. 합성곱 연산을 거칠 때마다 출력 크기가 줄어들어서 어느 순간 1이 될 수 있게 되면 더 이상 합성곱 연산을 적용할 수 없기 때문에, 이런 상황을 방지하기 위해 패딩을 사용한다.

 

 

 

Stride 스트라이드

필터를 적용하는 간격을 스트라이드라고 한다. 위에서 살펴본 모든 예에선 스트라이드가 1이었다.

아래는 스트라이드가 2인 합성곱 연산의 예이다.

스트라이드는 학습해서 결정하는게 아니고 파라미터로 고정된 값을 사용한다.

출력 데이터의 양을 줄일 순 있지만 정보의 손실이 있을 수 있어서 신중하게 결정을 해야한다.

 

 

 

출력의 크기를 조정하는 패딩, 스트라이드 사이의 관계식을 정의할 수 있다.

출력크기 OH와 OW는 항상 정수로 나눠떨어지도록 변수를 조정해야 한다.
딥러닝 프레임워크 중에는 정수가 안될 경우 반올림을 하거나 에러를 내지 않고 진행하도록 구현하기도 한다.

 

 

 

3차원 데이터의 합성곱 연산

각각 Convolution 하고 나온 값을 각 원소별로 더한다.

3차원 합성곱 연산에서는 입력 데이터의 채널 수와 필터의 채널 수가 반드시 같아야 한다. 그리고 필터의 모든 채널 크기가 같아야 한다. 필터 크기는 임의로 설정 가능하다.

 

 

 

블록으로 생각하기

필터의 역할은 Edge(경계선)을 Detection 탐지하는 것이다.

예를 들면

첫번째 필터는 그림에서 가로 엣지를 Detection 하는 역할이고

두번째 필터는 세로 엣지 Detection

세번째 필터는 대각선 엣지 Detection

네번째 필터는 Edge(경계선) 가 아닌 영역 Detection

등등

위와 같이 여러개의 필터가 필요하다.

 

필터의 가중치 데이터는 4차원 데이터로 (출력 채널의 수, 입력 채널의 수, 높이, 너비) 순으로 쓴다.

예를 들어 채널 수 3, 크기 5 x 5 인 필터가 20개 있다면 (20, 3, 5, 5) 로 쓴다.

여기에 편항 b를 더한 모양은 다음과 같다.

 

 

 

 

배치 처리

 

 

 

풀링 계층

풀링은 세로, 가로 방향의 공간을 줄이는 연산이다.
아래의 예는 2 x 2 최대 풀링을 스트라이드 2로 처리하는 순서를 도식화한 것이다.

 

풀링은 

Max pooling 최대 풀링 : 풀링 영역내의 최댓값을 구하는 연산

Average pooling 평균 풀링 : 풀링 영역의 평균을 계산하는 연산

두가지가 있는데 대부분 Max pooling 을 사용한다.

풀링의 윈도우 크기와 스트라이드는 같은 값으로 설정하는 것이 보통이다. 
예를 들어서 윈도우가 3 x 3이면 스트라이드는 3으로 설정한다.

 

풀링 계층의 특징

 - 학습해야 할 매개변수가 없다

 - 채널 수가 변하지 않는다

 - 입력의 변화에 영향을 적게 받는다 (강건)

    -> 입력 데이터가 가로로 1원소만큼 어긋나도 출력이 같은 경우 (물론 데이터에 따라 다른 결과)

 

 

 

CNN 시각화하기

필터 계수들이 학습을 마치고 나면 어떤식으로 변화되어 있는지를 알아보자

 

MNIST 데이터셋으로 CNN 학습을 할 때

필터 30개, 흑백이기때문에 채널 1개, 사진 크기 5 x 5 여서 가중치 형상이 (30, 1, 5, 5) 이다.

학습 전후 1번째 층 합성곱 계층 필터

학습 전에는 규칙없이 그냥 검은색(0) 흰색(255) 회색으로 이뤄진 이미지였는데

학습을 해서 필터 계수와 바이어스를 최적화 한 후에는 흰색과 검은색이 구분되어 보이고, 덩어리(Blob)가 진 필터가 생겼으며 규칙을 가지는 필터가 몇 개 보인다.

ex. 왼쪽은 흰색, 오른쪽은 검은색 : 세로방향 엣지 디텍션하기에 적합한 필터

왼쪽이 밝고 오른쪽이 어두운 어떤 이미지의 한 부분에 대해서 더 큰 값을 출력한다. == 더 활발하게 반응한다. == 255(흰색)을 출력한다.

각각의 필터들이 역할이 다 다르다.

엣지 필터는 색의 경계를 검출할 때 반응값이 크고

엣지와 반대 개념인 덩어리(Blob) 진 필터는 단색을 검출할 때 반응값이 크다.

 

 

위 필터는 학습시킨 모델의 첫번째 레이어의 필터값(0~255)을 시각화 한 것이다.

이 첫번째 레이어에서는 간단한 엣지나 블롭 등의 저수준 정보가 추출된다. 이후 계층이 깊어질수록 더 추상화된다.

 아래 그림은 일반 사물 인식(자동차나 개 등)을 수행한 8층의 CNN이다.
 이 네트워크 구조는 AlexNet이라 하는데, 합성곱 계층과 풀링 계층을 여러 겹 쌓고, 마지막으로 완전연결 계층을 거쳐 결과를 출력하는 구조이다.

위 그림과 같이 합성곱 계층을 여러 겹 쌓으면, 층이 깊어지면서 더 복잡하고 추상화된 정보가 추출된다.

계층이 깊어질수록 추출되는 정보(정확히는 강하게 반응하는 뉴런)는 더 추상화된다는 것을 알 수 있다.

1번째 층은 엣지와 블롭, 3번째 층은 텍스쳐, 5번째 층은 사물의 일부, 마지막 완전연결 계층은 사물의 클래스(개, 자동차 등)에 뉴런이 반응한다. 즉, 층이 깊어지면서 뉴런이 반응하는 대상이 단순한 모양에서 '고급' 정보로 변화해간다. 다시 말하면 사물의 '의미'를 이해하도록 변화하는 것이다.

 

대표적인 CNN

https://deep-learning-study.tistory.com/193

 

[딥러닝] CNN의 원조 LeNet, 딥러닝을 주목 받도록 이끈 AlexNet

사이토고키의 <밑바닥부터 시작하는 딥러닝>을 공부하고 정리해보았습니다. 을 공부하고 정리해보았습니다. 을 공부하고 정리해보았습니다. 을 공부하고 정리해보았습니다. 을 공부하고 정리

deep-learning-study.tistory.com

 

 

 

 

 

 

 

 

사진 및 참고

 

https://huangdi.tistory.com/12?category=827382 

 

https://huangdi.tistory.com/36?category=827382 

 

https://deep-learning-study.tistory.com/192

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글