합성곱 신경망(CNN; Convolutional Neural Network)
이미지 인식, 음성 인식에서 자주 사용
- 합성곱 계층(Convolution Layer), 풀링 계층(Pooling Layer) 존재
- 완전 연결 계층(Fully-Connected Layer): 인접하는 계층의 모든 뉴런과 결합되어 있는 계층
- 출력과 가까운 층에는 'Fully_Connected-ReLU' 계층 사용 가능
- 마지막 출력 계층에서는 'Affine-Softmax' 조합 사용
- 완전연결계층(FC Layer)에서는 데이터의 형상(shape)이 무시됨.
- input이 3차원 이라고 하더라도 완전연결계층에 입력할 때는 1차원 데이터로 평탄화해줘야 함.
- 형상(shape)을 유지하기 위해 합성곱 계층 사용!
합성곱 계층
합성곱 계층은 입력데이터의 형상(shape)을 유지하여 전달
-
특징 맵(feature map): 합성곱 계층의 입출력 데이터
- 입력데이터: 입력특징맵(input feature map)
- 출력데이터: 출력특징맵(output feature map)
-
합성곱 연산(필터 연산)
합성곱 연산은 입력 데이터에 필터를 적용하는 것
1) 필터(커널)의 윈도우를 일정한 간격으로 이동해가며 적용
2) 입력과 필터에서 대응하는 원소끼리 곱한 후 총합 구함
3) 결과를 출력의 해당 장소에 저장
- 윈도우: Input Feature Map에서 색이 있는(초록색, 하늘색, 주황색, 회색) 3*3 네모칸
- 필터의 매개변수가 가중치에 해당
- 위 예시에서 편향은 존재하지 않지만 존재할 수도 있다.
- 편향은 항상 하나만 존재하며 필터 적용한 후 데이터에 더해짐
- 패딩(Padding)
입력 데이터 주변을 특정 값으로 채우는 것
- 일반적으로 0으로 많이 채움
- Output Feature Map의 크기가 증가
- 스트라이드(Stride)
필터를 적용하는 위치 간격
- 윈도우가 몇 칸씩 이동하며 합성곱연산 적용하는지 의미
- Output Feature Map의 크기가 감소
출력 크기(OH, OW) 계산
- 입력크기 (H,W), 필터크기(FH,FW), 패딩 P, 스트라이드 S
OH=SH+2P−FH+1OW=SW+2P−FW+1
- 3차원 데이터 입력 시, 필터와 채널 크기가 같아야 함
- 데이터 형상(shape): (채널 수, 높이, 너비)
- 필터를 N개 적용하면 출력맵도 FN개 생성
- 필터의 가중치 데이터는 4차원
- (출력 채널 수, 입력 채널 수, 높이, 너비)
- 채널 수 3, 크기 5*5 필터 20개가 있다면 (20,3,5,5)
- 배치 처리 -> 4차원으로 처리(데이터 수, 채널 수, 높이, 너비)
풀링 계층
풀링은 가로, 세로 방향의 공간을 줄이는 연산이다.
- 일정 영역을 하나의 원소로 집약
- 일반적으로 풀링의 윈도우 크기 = 스트라이드 값으로 설정
- 위의 예시는 2*2의 영역을 stride 2로 최대풀링을 시행
- 최대 풀링(Max Pooling): 일정 영역에서 가장 큰 원소 하나를 꺼냄
- 평균 풀링(Average Pooling)도 존재
- 특징
- 학습해야 할 매개변수가 없다.
- 채널 수가 변하지 않는다. (채널마다 독립적으로 계산하기 때문)
- 입력의 변화에 영향을 적게 받는다. (강건하다)
CNN 시각화
- 학습 전의 필터는 무작위로 초기화되어 흑백 정도에 규칙성이 없음
- 하지만 학습 후에는 규칙의 띄는 필터로 변화
- 에지(색상이 바뀐 경계선), 블롭(국소적으로 덩어리진 영역) 등 원시적 정보 추출
- 이러한 원시적 정보가 뒷단 계층에 전달된다는 것이 CNN에서 일어나는 일
- 계층이 깊어질수록 더 복잡하고 추상화된 정보 추출
딥러닝
층을 깊게 한 심층 신경망
정확도를 높이기 위한 노력
층을 깊게 쌓기
- 층이 깊지 않은 경우보다 적은 매개변수로 이상의 표현력 달성 가능
- 5*5 영역을 합성곱 연산은 1회 진행하면 매개변수 25(5*5)개
- 합성곱 연산을 2회 진행 시, 3*3 영역을 2번 계산하여 매개변수 18(3*3*2)개
- 학습 데이터 양을 줄여 고속으로 수행
- 신경망의 깊이가 얕을 수록 target의 특징을 한 번에 이해해야 함
- 그렇기 위해서는 변화가 풍부하고 많은 학습 데이터 필요
- 신경망을 깊게 하면 학습해야 할 문제를 계층적을 분해
- 더 단순한 문제로 대체
ex) 처음 층은 에지의 패턴 탐색(개의 특징 탐색보다 단순한 문제임)
- 정보를 계층적으로 전달
- 에지를 추출한 층의 다음 층은 에지 정보 사용 가능하고 더 고도의 패턴을 효과적으로 학습
데이터 확장(Data Augmentation)
입력 데이터를 인위적으로 확장
- crop: 데이터의 이미지 일부를 잘라 냄(indexing과 비슷)
- flip: 이미지를 임의로 좌우 혹은 상하로 반전
- rotation: 이미지 회전
- scaling: 이미지 확대 또는 축소
- cutout: 이미지 일부를 사각형 모양으로 검은색을 칠해버리는 기법
- 해당 영역을 0으로 채워 넣음
- 이미지의 덜 중요한 부분까지 집중하게 유도
- cutmix: 두 이미지를 합쳐 놓고, 이미지의 Label을 학습시킬 때 각 이미지가 차지하는 비율만큼 학습
딥러닝의 역사
이미지 인식 기술을 겨루는 ILSVRC의 대회로 인해 딥러닝이 큰 주목을 받게 되었다.
이미지넷(ImageNet)
- 100만 장이 넘는 이미지를 담고 있는 데이터셋
- 다양한 종류의 이미지를 포함하며 라벨이 붙어 있음
LeNet
- 손글씨 숫자를 인식하는 네트워크
- CNN의 원조
- 합성곱 계층과 풀링 계층을 반복하고 마지막으로 완전연결 계층을 거치면서 결과 출력
- 여기서 풀링은 단순히 원소를 줄이기만 하는 서브샘플링
- 활성화 함수로 시그모이드 사용
AlexNet
- 딥러닝 열풍을 일으키는 데 큰 역할 수행
- 기본적인 네트워크 구성은 LeNet과 동일
- LeNet과 차이점
- 활성화 함수로 Sigmoid → ReLU 사용
- 서브샘플링 → 최대풀링 사용
- 국소적 정규화(LRN; Local Response Normalization) 사용
- 드롭아웃 사용
VGG
- 합성곱 계층과 풀링 계층으로 구성되는 기본적인 CNN
- 비중 있는 층(합성곱 계층, 완전연결계층)을 모두 16층(혹은 19층)으로 심화
- 3*3의 작은 필터를 사용한 합성곱 계층을 연속으로 사용
- 합성곱 계층을 2~4회 연속으로 한 후, 풀링 계층을 두어 크기를 절반으로 줄이는 처리 반복
GoogLeNet
- 인셉션 구조: 크기가 다른 필터와 풀링을 여러 개 적용하여 그 결과 결합하는 구조
- 세로 방향 깊이 뿐 아니라 가로 방향도 깊음.
- 1*1 크기의 필터를 사용한 합성곱 계층 많은 곳에서 사용
- 채널 쪽으로 크기를 줄이는 것.
- 매개변수 제거와 고속 처리에 기여
ResNet
- 스킵 연결(skip connection): 층이 지나치게 깊으면 학습이 잘 되지 않고 성능이 떨어지는 경우 해결
- 신호 감쇠 방지
- 역전파 때도 상류의 기울기를 그대로 하류에 보냄
- 합성곱 계층을 2개마다 건너뛰면서 층을 깊게 함
전이학습(Transfer Learning)
위의 신경망들의 모델 구조와 가중치를 초기값으로 하여 재학습(fine tuning) 수행
참고
밑바닥부터 시작하는 딥러닝 (사이토 고키)