CNN ( convolutional neural network)은 이미지 인식과 음성 인식 등 다양한 곳에서 사용된다.
convolutional = 나선형이라는 뜻이 먼저 나오지만, 딥러닝에서 CNN은 합성곱이라는 의미로 쓰인다.
CNN의 핵심 키워드는 다음과 같다.
- Convolution(합성곱)
- 채널(Channel)
- 필터(Filter)
- 커널(Kernel)
- 스트라이드(Strid)
- 패딩(Padding)
- 피처 맵(Feature Map)
- 액티베이션 맵(Activation Map)
- 풀링(Pooling) 레이어
7.1 전체 구조
CNN의 네트워크 구조를 살펴보면 크게 합성곱 계층과 풀링 계층으로 되어 있다. 지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있다. 이를 완전연결이라고 하며,
완전 연결된 계층을 Affine 계층이라 했었다.
Affine계층을 사용한 5층 완전연결 신경망은 아래 그림과 같다.

Affine-ReLu 조합의 층이 4개, 마지막 출력층에서는 Softmax 활성화함수를 이용되는 것을 볼 수 있다.
다음은 CNN의 예시이다. (일반적인 CNN구조라고한다.)

Affine-ReLu연결이 Conv-ReLu-Pooling 연결로 바뀌었다고 생각하면 편하다.
또 주의할 점은 출력에 가까운 층에는 Affine-ReLu 구성의 연결을 사용할 수 있다는 점이다!!
7.2 합성곱 계층
CNN에서는 또한 합성곱 계층, 풀링 계층 의외 패딩 / 스트라이드의 개념이 새로 등장한다.
7.2.1 완전연결 (Affine) 계층의 문제점
7장 이전에 배웠던 Affine 계층에서는 인접하는 계층의 뉴런이 모두 연결되고 출력 수를 임의로 정할 수 있었다.
위 문장을 토대로 완전연결계층의 문제점은 무엇일까?
바로 데이터의 형상 (차원)이 무시된다는 점이다.
입력 데이터가 이미지라고 한다면, 3차원 데이터일 것이다. (세로, 가로 ,채널(색))
하지만 이 데이터를 완전 계층에 입력하려면 1차원으로 평탄하게 해주어야 한다.
하지만 3차원 데이터는 그 자체로 중요한 정보를 갖고 있다.
예를 들면 공간적으로 가까운 픽셀은 값이 비슷하거나, RGB 각 채널은 서로 밀접하게 관련되어 있는 등 패턴이 숨겨져 있을 수 있다. 하지만 이를 1차원 데이터로 변환 시키는 순간 이 정보들을 살릴 수 없게 된다.
CNN에서는 합성곱 계층의 입출력 데이터를 특징맵 ( feature map ) 이라고도 한다.
따라서 합성곱 계층의 입력 데이터를 입력 특징맵 , 출력 데이터를 출력 특징맵 이라고 한다.
이 책에서는 입출력 데이터와 특징맵 을 같은 의미로 사용할 것이기 때문에 주의해서 해석을 하도록 한다.!!!
7.2.2 합성곱 연산
합성곱 계층에서는 합성곱 연산을 처리하는데, 이는 이미지 처리에서 말하는 필터 연산에 해당한다.
필터 연산에 대해 구체적인 예시를 통해 알아보자.

위 그림을 보면 입력 데이터에 필터(=커널, 도장) 를 적용하는 것을 볼 수 있다.
입력 데이터는 4x4, 필터는 3x3이므로 도장을 총 네번 찍어서 2x2(네 번의 도장 값)의 출력 데이터를 출력한다.
자세한 곱 연산은 다음과 같다.

도장안의 각 값들은 가중치라고 볼 수 있고, 편향을 추가한다면 다음과 같은 수식을 얻을 수 있다.

7.2.3 패딩
합성곱 연산을 수행하기 전에 입력 데이터 주변 값을 특정 값 (or 0)으로 채우는 것을 패딩이라고 한다.

7.2.4 스트라이드
스트라이드 (stride)란 필터(=커널, 도장)을 적용하는 위치의 간격을 말한다.
간격이 2이면 도장이 2칸씩 이동하는 것을 말한다.
7.2.5 3차원 데이터의 합성곱 연산
위에서 알아본 합성곱 연산은 데이터가 2차원일 때의 경우이다.
3차원 데이터의 합성곱 연산에 대해 알아보자. 데이터는 이미지라고 가정한 후 (세로,가로,색상)을 다룬다고 하자.

주의사항: 입력 데이터의 채널 수와 필터의 채널 수가 같아야 한다.
필터 고정

7.2.6 블록으로 생각하기
3차원의 합성곱은 데이터와 필터를 직육면체 블록이라고 생각하면 쉽다.
블록은 아래 그림과 같이 3차원이다.

위 그림은 출력 데이터가 한 장의 특징 맵이다.
한 장의 특징 맵은 곧 채널이 1개인 특징 맵이라는 말과 같다.
만약 합성곱 연산의 출력으로 다수의 채널을 출력하려면 어떻게 해야 할까?
->필터를 1개보다 더 사용하는 것이다.

FN은 필터의 개수를 의미하고 이에 따라서 출력 맵 또한 FN개가 생성된다.
여기에 편향까지 고려한다면 최종 흐름은 아래 그림과 같다.

7.2.3 배치 처리
7장 이전의 신경망 처리에서는 입력 데이터를 한 덩어리로 묶어서 배치로 처리했었다.\
CNN에서도 배치 처리를 적용시켜보자.
배치 처리를 하기 위해 n개의 데이터를 묶고자 한다면 데이터 차원 수가 하나 더 늘어나서 총 4차원으로 바뀐다.
( 데이터 수, 채널 수, 높이, 너비)

'밑바닥 딥러닝' 카테고리의 다른 글
Ch 07-2 합성곱 신경망 (CNN) (0) | 2023.06.04 |
---|---|
Ch 6-2 학습 관련 기술들 (0) | 2023.05.31 |
Ch 6-1 학습 관련 기술들 (0) | 2023.05.29 |
Ch 5-2 오차 역전파 (Error BackPropagation) (0) | 2023.05.27 |
Ch 5-1 오차 역전파 ( Error Backpropagation ) (0) | 2023.05.27 |