start with an image(width * hight * depth)
: 이미지 입력받기
Let's focus on a small area only
: 하나의 이미지를 전체 입력으로 받지 않고, 이미지의 일부분만 우선 처리
=> "filter"
Get one number using the filter
: by [Wx + b] or [ReLU(Wx + b)]
Let's look at other area with the same filter
How many numbers can we get ?
이 과정에서 구할 수 있는 출력값의 크기(Output size)는 [( N - F ) / Stride + 1 ]
이때 N: input 수, F: filter 수, Stride: 이동할 칸의 수를 의미함
ex)
N = 7, F = 3, Stride = 1일 때 -> 5 x 5 output을 얻음
N = 7, F = 3, Stride = 2일 때 -> 3 x 3 output을 얻음
위 과정을 거치면서 하나의 큰 Input이 점점 크기가 작아지고 이때 정보를 잃는 문제가 발생할 수 있음
=> "padding"을 통해 보완할 수 있음
padding을 사용하는 이유
1. 입력의 크기가 작아지는 것 방지
2. 입력 이미지의 모서리를 NN에게 알려주기 위해
2. Pooling
= sampling
input image를 filter 과정을 통해 conv layer들을 구한 후, 한 layer씩만 추출하여 resize 하는 과정
3. Fully Connected layer (FC layer)
여러 번의 [convolution layer -> ReLU -> Pooling] 과정을 한 전체 값을 이용하여 Neural Network를 구성하는 과정
- CNN 사례 연구
전체적인 깊이는 굉장히 깊지만 하나로 layer가 합쳐진다고 간주할 수 있음
=> layer 개수는 많지만 실제 학습하는 입장에서는 layer가 그렇게 깊지 않은 느낌으로 학습 가능함