합성곱 신경망 Convolutional neural network, CNN은 이미지 인식과 음성 인식 등 다양한 곳에서 사용된다. 특히 이미지 인식 분야에서 딥러닝을 활용한 기법은 거의 다 CNN을 기초로 한다.
7.1 전체 구조
CNN도 앞서 봤던 신경망들과 동일하게, 레고마냥 계층들을 조합해서 만들 수 있다. 다만 합성곱 계층 Convolutional layer와 풀링 계층 Pooling layer가 새롭게 등장한다.
지금까지의 신경망은 인접하는 모든 계층의 모든 뉴런과 결합되어 있었다. 이를 완전연결(fully-connected)라 하며, 완전히 연결된 계층을 Affine 계층이라는 이름으로 구현했다.
Affine 계층을 사용하면, 5개층 완전연결 신경망은 다음과 같이 구현 할 수 있다.
완전연결 신경망은 Affine 계층 뒤에 활성화 함수를 갖는 ReLU 계층 or Sigmoid 계층이 이어진다. 위 예시에서는 Affine-ReLU가 4개 쌓이고, 5번째 층에서 Softmax에 최종 확률을 출력한다.
CNN의 경우는 다음과 같이 구현한다.
CNN에서는 새롭게 합성곱 계층 (conv)과 풀링 계층(pooling)이 추가된다.
주목할 점은 출력에 가까운 층에서는 Affine-ReLU구성을 사용할 수 있고, 마지막 출력 계층에서는 Affine-Softmax 조합을 그대로 사용한다는 것이다.
7.2 합성곱 계층
CNN에서는 패딩(padding), 스트라이드(stride) 등 CNN 고유의 용어가 등장한다. 또, 각 계층 사이에 3차원 데이터같이 입체적인 데이터가 흐른다.
7.2.1 완전연결 계층의 문제점
'데이터의 형상이 무시'
ex) 이미지는 가로, 세로, 색상으로 구성된 3차원 데이터, MNIST에서는 (1, 28, 28)의 데이터를 평탄화해서 사용했음.
하지만 공간적으로 가까운 픽셀의 값이 비슷, RGB의 각 채널이 밀접하게 관련, 거리가 먼 픽셀끼리는 연관 없음 등의 3차원 속의 본질적인 패턴을 무시할 수 있음
합성곱 계층은 형상을 유지하기 때문에 3차원으로 받아서, 3차원 데이터로 전달한다. 그렇기에 CNN은 이미지처럼 형상을 가진 데이터를 제대로 이해할 가능성이 있다.
특징맵(feature map): 합성곱 계층의 입출력 데이터
입력 특징 맵(input feature map): 입력 데이터
출력 특징 맵(output feature map): 출력 데이터
7.2.2 합성곱 연산
합성곱 연산은 이미지 처리에서 말하는 필터 연산에 해당한다.
형상을 (height, width)로 표현하고, 필터를 커널이라고도 함
연산은 필터의 윈도우를 일정한 간격으로 이동해가며 입력 데이터에 적용하는데, 입력데이터와 필터에서 대응하는 원소끼리 곱한 후 총합을 구한다. (단일 곱셈-누산 fused multiply-add, FMA)
완전연결 신경망 | CNN |
가중치 매개변수 | 필터 매개변수 |
7.2.3 패딩
패딩: 합성곱 연산을 수행하기 전에 입력 데이터 주변을 특정 값(ex 0)으로 채우는 기법
패딩은 주로 출력 크기를 조정할 목적으로 사용한다. 합성곱 연산을 몇 번이나 되풀이하게 되는데, 연산을 거칠 때마다 크기가 작아지면 어느 시점에는 크기가 1이 된다. 즉 합성곱 연산을 적용할 수가 없어지는 것이다. 이러한 사태를 막기 위해 패딩을 사용한다. 결론적으로 패딩은 입력 데이터의 공간적 크기를 고정한 채로 다음 계층에 전달하고자 사용한다.
7.2.4 스트라이드
스트라이드: 필터를 적용하는 위치의 간격
앞선 예시들은 스트라이드가 1이었다. 밑 그림은 스트라이드가 2인 예시이다.
스트라이드를 키우면 출력 크기가 작아진다. 한편, 패딩을 크게 하면 출력 크기가 커졌다. 이를 수식으로 옮기면 다음과 같다.
먼저 입력 크기를 (H,W), 필터 크기를 (FH, FW), 출력 크기를 (OH, OW), 패딩을 P, 스트라이드를 S 라고 한다.
7.2.5 3차원 데이터의 합성곱 연산
입력 데이터와 필터의 합성곱 연산을 '채널마다' 수행하고, 모두 합산한다.
**단 입력 데이터의 채널 수와 필터의 채널 수가 같아야 한다!
7.2.6 블록으로 생각하기
(channel, height, width) 순으로 쓰며, 약자로 C, H, W를 쓴다. 필터의 경우 F를 붙여, FH, FW로 사용한다(채널은 입력데이터와 동일해야 하므로 그냥 C).
자 그럼 하나의 데이터에 여러개의 필터를 적용한다면 어떤 출력을 얻게 될까? 다음과 같다.
이렇게 완성된 블록을 다음 계층으로 넘기겠다는 것이 CNN의 처리의 흐름이다.
##편향은 블록의 형상이 다른데, 이는 브로드캐스트 기능으로 쉽게 구현할 수 있다.
7.2.7 배치 처리
합성곱 연산에서도 입력 데이터를 한 덩어리로 묶어 배치로 처리할 수 있다. 그래서 각 계층을 흐르는 데이터의 차원을 하나 늘려 4차원 데이터로 저장한다. (데이터 수, 채널 수, 높이, 너비) 순
신경망에 4차원 데이터가 하나 흐를 때마다 데이터 N개에 대한 합성곱 연산이 이뤄진다. 즉 N회 분의 처리를 한 번에 수행한다.
'머신 러닝 및 파이썬 > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
Ch.7 합성곱 신경망(CNN)/ 7.4 풀링 계층 구현하기 (0) | 2020.03.15 |
---|---|
Ch.7 합성곱 신경망(CNN)/ 7.4 합성곱 계층 구현하기 (0) | 2020.03.14 |
Ch.6 학습 관련 기술들/ 6.5 적절한 하이퍼파라미터 값 찾기 (0) | 2020.03.12 |
Ch.6 학습 관련 기술들/ 6.4.3 드롭아웃 (0) | 2020.03.11 |
Ch.6 학습 관련 기술들/ 6.4.1 오버피팅 (0) | 2020.03.11 |