-
6. CNN(1)AI 모델(딥러닝 기초)/6. CNN 2023. 2. 14. 11:03728x90
※ CNN(합성곱 신경망)이란?
- convolutional neural network의 약자로 이미지 인식과 음성 인식등 다양한 딥러닝 분야에서 사용한다. 특히 이미지 인식 분야에서 딥러닝을 활용할 경우 CNN을 기초로 한다.
■ 전체구조
- 합성곱 계층(Conv)과 풀링 계층(Pooling)이 새롭게 추가된다.
Conv - ReLU - Pooling - Conv - ReLU - Pooling - ............. - Affine - ReLU - Affine - Softmax
이 구조를 기본으로 한다.
현재까지 신경망은 모든 뉴런과 연결된 Fully-connected-layer를 기본으로 하고 완전 연결 계층을 Affine 계층으로 구현했다. 하지만, 데이터의 형상이 무시된다는 완전연결 계층의 문제점 때문에 CNN은 합성곱 계층과 풀링 계층을 사용하고 출력에 가까운 층에서는 Affine-ReLU 구성을 사용하며, 마지막 출력 계층에서는 Affine-Softmax 조합을 그대로 사용한다.
■ 완전연결 계층의 문제점
- 데이터 형상의 무시
3차원 데이터도 평평한 1차원 데이터의 형태로 평탄화 해주어야 완전연결 계층에서 출력값을 볼 수 있다. 이미지는 3차원 형상이고 공간적 정보가 담겨 있다. 3차원 속에서 의미를 갖는 본질적인 패턴이 숨어 있는데, 완전연결 계층은 이러한 공간적 정보를 모두 무시하고 입력 데이터를 모두 동등한 뉴런으로 취급해버리기 때문에 형상에 담긴 정보를 살리기 힘들다.
※ 합성곱 계층
형상을 유지하며, 이지미를 3차원 데이터로 입력받고 다음 계층에도 3차원 데이터로 전달한다. 이미지처럼 형상을 가진 데이터를 제대로 이해할 가능성이 높은 CNN을 사용하는 가장 큰 이유이다.
■ 특징 맵(feature map)
- 합성곱 계층의 입력 데이터 : 입력 특징 맵
- 합성곱 계층의 출력 데이터 : 출력 특징 맵
■ 합성곱 연산
- 이미지 처리에서 말하는 필터 연산에 해당함
입력 데이터가 세로, 가로 방향의 형상, 필터가 세로, 가로 방향의 차원을 가진다. 필터의 형상을 (높이, 너비)라고 표기하며 필터 크기의 윈도우 3×3을 이동시키며 출력데이터를 만들어낸다.
맨처음의 3×3 윈도우를 필터에 적용시켜 왜 15가 나오는지 알아보자. 1*2+2*0+3*1+0*0+1*1+2*2+3*1+0*0+1*2 = 15 임을 알 수 있다. 자신의 자리에 해당하는 필터의 위치와 곱한 후 총 합을 구하면 출력 데이터를 만들 수 있다. CNN에서는 필터의 매개변수가 이전에 보았던 '가중치'에 해당하는 것이다. 이제 마지막 출력데이터에 1×1 형상의 편향을 더해줄 수 있는데 편향값이 만약 3이라면 출력 데이터는 18, 19, 9, 18의 형태로 하나의 값을 필터를 적용한 모든 원소에 더해 주는 방식으로 출력 시키는 것이다.
■ 패딩
- 입력 데이터 주변을 특정 값(0)으로 채우는 방식으로 (4,4) 형상에 폭이 1인 패딩을 적용하면 (6,6) 형상이 나오게 된다.
- 주로 출력 크기를 조정할 목적으로 사용한다.
기존의 (4,4) 형상 입력데이터에 (3,3) 필터를 적용하면 출력이 (2,2)가 나오게 되는 것을 볼 수 있었다. 이렇게 2만큼 줄어드는 것이 합성곱 연산을 계속 되풀이하는 신경망에서는 문제를 불러올 수 있기때문에 패딩을 실시한다. 만약 합성곱 연산을 거칠 때마다 크기가 작아져 출력 크기가 1이 되어버리게 되면 더 이상 합성곱 연산을 적용할 수 없기 때문에 (4,4)에 패딩 1을 더해 (6,6)을 만든 후 (3,3) 필터에 적용하면 (4,4) 출력 데이터를 만들어 형상의 크기를 보존하는 방식으로 사용된다.
■ 스트라이드
- 필터를 적용하는 위치의 간격
이처럼 스트라이드를 2로 처리하면 윈도우를 2칸씩 옮겨 필터에 적용시킨다.
입력 크기 : (H, W), 필터 크기 : (FH, FW), 출력 크기 : (OH, OW), 패딩 : P, 스트라이드 : S
위 식을 통해 출력 크기의 형상을 조금 더 쉽게 알아 낼 수 있다. 출력 크기가 정수가 아니면 오류를 내는 경우가 있는데 딥러닝 프레임워크에서는 값이 나누어 떨어지지 않을 때 가장 가까운 정수로 반올림하는 등의 오류 대응을 해 준다.
■ 3차원 데이터 연산
이처럼 2차원이 아닌 3차원으로 채널의 개수를 늘릴 수 있다. 입력 데이터의 채널 수와 필터의 채널수가 동일해야만 정상적인 출력 데이터 값을 얻을 수 있다.
3차원 데이터의 채널을 C라고 둔 위의 모습을 블록으로 나타내면 이와 같이 나타낼 수 있다.
이제 그럼 여러개의 필터를 통해서 다수의 채널을 출력시켜보자.
FN개의 채널을 통해서 출력 데이터 역시 1이 아닌 FN개의 출력 맵을 볼 수 있다. 이렇게 완성된 블록을 다음 계층으로 넘기는 것이 CNN 처리 흐름이다. 그러므로 합성곱 연산에서는 필터의 개수도 고려하여 4차원 데이터로 나타낸다. (출력 채널 수, 입력 채널 수, 높이, 너비)의 순으로 나열할 수 있다.
마지막으로 FN개의 편향을 더해 준 모습이다.
■ 배치 처리
- 합성곱 연산에서의 배치 처리는 각 계층을 흐르는 데이터의 차원을 하나 늘려 4차원으로 데이터를 저장한다.
(데이터 수, 채널 수, 높이, 너비)의 순서이다.
이처럼 N개의 데이터를 넣어 4차원 형상을 가진 채로 각 계층을 타고 흐른다. 신경망에 4차원 데이터가 하나 흐를 때마다 데이터 N개에 대한 합성곱 연산을 수행해 주는 방식이다. 이렇게 N회 분의 처리를 한 번에 수행할 수 있다.
728x90