Affine 계층은 fully-connected layer 라고도 한다.
Affine 계층의 네트워크는 다음과 같다. 마지막 5번째 층은 softmax 계층에서 최종결과를 출력한다.
CNN(합성곱 계층, convolutional layer)는 합성곱계층(convolutional layer)와 풀링계층이 추가되었다
affine(a.k.a fc layer)의 문제점 -> 공간, 색깔 (R G B), 거리 등 3차원속의 의미를 갖는 본질이 무시됨, 같은 차원의 뉴런으로 취급됨
CNN의 특징 -> 3차원적인 형상 유지(이미지 데이터의 특성)
합성곱 연산
입력은 (4*4), 필터는 (3*3) 출력은 (2*2) 이다. 필터를 kernel 이라고 지칭하기도함
1*2+0*2+3*1+0*0+1*1+2*2+3*1+0*0+1*2 = 15 이런식으로 필터 위치에 맞는 데이터를 곱해서 더해준다
CNN에도 편향을 적용할 수 있다. 합성곱 연산 후 필터를 적용한 모든 원소에 더해준다
패딩
폭이 1인 패딩을 추가하면 6*6이 된다. 만약 패딩을 2로 설정하면 8*8이 되고, 3으로 설정하면 10*10이 된다.
패딩을 하는 이유는 합성곱 연산을 계속하다보면 어느 시점에서 출력이 1이 되고, 더이상 합성곱 연산을 할 수 없게 된다.
이러한 현상을 방지하기 위해 패딩을 수행한다.
stride
스트라이드는 필터를 적용하는 위치의 간격을 의미한다. stride를 2로 하면 두칸씩 움직인다.
입력, 패딩, 스트라이드, 출력의 관계의 수식은 다음과 같다
입력 크기는(H,W), 필터 크기는 (FH, FW), 출력 크기는 (OH, OW), 패딩은 P , 스트라이드를 S라고 한다
ex) 입력이 (4,4), 패딩 1 ,스트라이드 1, 필터(3,3)
OH : (4+2*1-3)/1 +1 = 4
OW: (4+2*1-3)/1 +1 = 4
이 값들이 정수로 나눠떨어지게 해야함
3차원 데이터 합성곱 연산 시 input data 채널 수 필터의 채널 수가 같아야함
배치 처리
배치용 차원을 추가하여 데이터 N개에 대한 합성곱 연산을 수행한다.
필터의 가중치 데이터는 4차원, (출력 채널 수, 입력 채널 수, 높이, 너비) 순으로 쓴다.
만약 채널 수 3, 크기 5*5, 필터 20개라면 (20,3,5,5)로 쓴다. 합성곱 신경망에 편향을 더해서 출력데이터를 도출한다.
풀링 계층
2*2이면 stride 2로 처리되어 있고, 만약 윈도우가 3*3이면 stride는 3, 4*4는 stride를 4로 설정한다.
max pooling은 해당 영역에서 최대의 원소를 선정하고, average pooling은 대상영역의 평균을 계산한다
풀링 계층의 특징은 다음과 같다
- 학습해야 할 매개변수가 없음
- 채널 수가 변하지 않는다
- 데이터가 어느 방향으로 한칸 움직여도 풀링의 결과는 잘 변하지 않는다.
높이 28, 너비 28, 채널 1개 데이터가 10개
import numpy as np
x = np.random.rand(10,1,28,28)#무작위를 데이터 생성
x.shape
im2col
im2col(image to column) 은 입력 데이터를 필터링(가중치 계산) 하기 좋게 전개하는 함수다
3차원 입력을 2차원 행렬로 변환해준다.
입력 데이터에서 필터를 적용하는 영역를 한줄로 늘어놓음. 합성곱 계층의 필터를 1열로 전개하고, 두 행렬의 곱을 계산함. 계산 후 출력 데이터를 4차원으로 reshape 한다.
'Deep Learning > from scratch I' 카테고리의 다른 글
[밑바닥부터 시작하는 딥러닝 - 7장 합성곱 신경망(CNN) II] (1) | 2024.02.10 |
---|---|
[밑바닥부터 시작하는 딥러닝 - 6장 학습 관련 기술들 II] (1) | 2024.02.09 |
[밑바닥부터 시작하는 딥러닝 - 6장 학습 관련 기술들 I] (0) | 2024.02.08 |
[밑바닥부터 시작하는 딥러닝 - 5장 오차역전파법 II] (1) | 2024.02.08 |
[밑바닥부터 시작하는 딥러닝 - 5장 오차역전파법 I] (0) | 2024.02.08 |