합성곱 신경망(convolutional neural network, CNN)
다양한 곳에서 사용되고, 이미지 인식 분야에서 기초로 사용된다.
1. 전체 구조
기본 신경망 + 두개의 계층[합성곱 계층(convolutional layer), 풀링 계층(pooling layer)]
완전 연결(fully-connected, 전결합) : 인접하는 계층의 모든 뉴런과 결합 되는 연결
ex) Affine 계층 : 완전연결 신경망
기본 구조 : data - Affine - ReLU - Affine - ReLU - ... - Affine - Softmax ->
합성곱 구조 : data - Conv - ReLU - Pooling - ... - Conv - ReLU - Affine - ReLU - Affine - Softmax
마지막 출력 계층에선 Affine - Softmax 그대로, Affine -ReLU 연결이 Conv - ReLU - Pooling 연결로
2. 합성곱 계층
패딩(padding), 스트라이드(stride) :: 각 계층사이 입체적인 데이터가 흐른다는 점에서 완전연결과 다름.
완전연결(Affine)의 문제점 : 입력 데이터의 형상이 무시됨. 1차원으로 평탄화가 필요.
특징 맵(feature map), 입력 특징 맵(input feature map), 출력 특징 맵(output feature map) : 입출력 데이터
합성곱 연산 : 4 x 4 * 3 x 3 의 연산에서 3 x 3 의 필터의 윈도우를 일정 간격으로 움직이면서, 각 원소의 곱의 합을 행렬로 만들어 출력한다. 결과 : 2 x 2 (단일 곱샘-누산 fused multiply-add, FMA)
필터는 가중치의 역할, 편향을 추가할 수도 있음 : 4 x 4 * 3 x 3(필터) -> 2 x 2 + 1x1(편향) -> 2 x 2 출력 데이터
패딩 : 데이터 주변을 특정 값으로 체우는 기법. 4 x 4 데이터에 폭이 1인 패딩을 적용 -> 6 x 6 의 형상으로, 데이터는 1~4,1~4 인덱스에 존재함.
4 x 4 데이터에 1 패딩을 적용하여 3 x 3 필터를 걸면, 4 x 4 출력 데이터가 만들어짐.
이유 : 주로 출력 크기를 조정할 목적. 여러번의 합성곱 연산을 거칠 때마다, 형상의 크기가 줄어들지 않도록 하기위해서.
스트라이드 : 필터의 윈도우가 움직이는 보폭을 의미함.
스트라이드가 2 인 연산은. 7 x 7 * 3 x 3 -> 3 x 3 의 출력 데이터가 형성됨.
결론 : 입력크기 (H,W) | 필터크기 (FH, FW) | 출력 크기(OH, OW) | 패딩 P | 스트라이드 S
OH = (H + 2P - FH) / S + 1 | OW = (W + 2P - FW) / S + 1
OH, OW 가 정수가 아니라면 오류를 발생해야 함.
3차원 입력데이터 , 블록으로 생각하기 : 3차원 직육면체의 데이터 => (채널, 높이, 너비) (C, H ,W) , 필터 => (C, FH, FW
(C, H, W) 입력데이터 * (FN, C, FH, FW) -> (FN, OH, OW) :: 출력의 채널을 지정하기 위해 필터를 여러개 사용함.
편향 : (FN, OH, OW) + (FN, 1, 1) => (FN, OH, OW)
배치 처리 : N개의 입력데이터가 주어졌을 때,
(N, C, H , W) * (FN, C, FH, FW) -> (N, FH, OH, OW) + (FN ,1 ,1) -> (N, FN, OH, OW)
의 흐름으로 처리 된다.
3. 풀링 계층
세로 가로 방향의 공간을 줄이는 연산.
최대 풀링(max pooling) : 2 x 2 (ex) 의 영역에서 가장 큰 원소 하나를 꺼내, 영역의 대표로 지정함.
입력데이터 4 x 4 ( 2 x 2 풀링 영역 ) , 스트라이드 : 2 -> 2 x 2 출력데이터
보통 스트라이드는 풀링의 윈도우로 설정한다. ex) 풀링 윈도우 : 2 x 2 스트라이드 = 2, 3 x 3 스트라이드 = 3 ...
특징 : 학습해야할 매개변수가 없음 | 채널수가 변화 하지않음.(채널별로 독립적 연산) | 입력의 변화에 영향을 적게 받음.(영역을 대표하는 원소가 변하지 않는이상 변하지 않음.)
4. 합성곱 / 풀링 계층 구현
im2col(image to column) 데이터 전개 : 입력 데이터를 필터링(가중치 계산) 하기 좋게 전개하는(펼치는) 함수.
3차원 데이터 + im2col -> 2차원 행렬로 변환 (배치 안의 데이터 수까지 포함한 4차원 데이터를 2차원으로 변환)
1개의 3차원 데이터 => 1개의 1차원 데이터로 쫙 펼쳐주고, n 개의 3차원데이터(4차원데이터)를 2차원 데이터로 만듬.
(N, C, H, W) -> (N, C * H * W) 데이터를 가로로 변환
(FN, C, FH, FW) -> (C * FH * FW , N) 필터를 세로로 변환
데이터와 필터의 곱 -> reshape -> 출력 데이터
6. 층 깊이에 따른 추출 정보 변화
계층이 깊어질 수록 추출되는 정보는(강하게 반응하는 뉴런) 더 추상화 된다.
7. 대표적인 CNN
LeNet : 합성곱 풀링 계층읠 반복하고,(원소를 줄이기만함) 마지막으로 완전 연결 계층을 거치면서 결과를 출력한다.
CNN과의 차이 : 활성화 함수를 sigmod 에서 Relu 로 변화함, 서브 샘플링으로 중간 데이터를 줄이지만, 현재는 max 풀링이 주류이다.
AlexNet : 합성곱 , 풀링 계층을 거듭하여 마지막으로 완전 연결 계층을 거쳐 결과를 출력함. 큰 구조는 동일.
변화된점 : 활성화 함수로 ReLU를 이용한다, LRN(local response nomalization)이라는 국소적 정규화 계층을 이용한다 드롭아웃을 사용한다.
'독서 리마인더 > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
[밑바닥부터 시작하는 딥러닝] 8장 (0) | 2021.05.13 |
---|---|
[밑바닥부터 시작하는 딥러닝] 5장, 6장 (0) | 2021.05.10 |
[밑바닥부터 시작하는 딥러닝] 4장 (0) | 2021.05.04 |
[밑바닥부터 시작하는 딥러닝] 1~3장 (0) | 2021.05.03 |