
만약 fully connected layer을 이용해 MNIST 데이터셋을 분류하는 모델을 만들 때, 28 x 28 형태의 2차원 이미지를 784 크기의 1차원 벡터로 변환해서 모델에 입력 해야 한다

-> 이 때, 2차원 이미지를 1차원으로 펼치면 '6'이라는 형태가 사라지기 때문에 어떤 숫자인지 인식하기가 어렵고, 이말인 즉슨, 공간 데이터를 1차원으로 변환하는 순간 형상 정보가 분산되기 때문에 정확한 패턴을 인식하기 어렵다는 말이다
✅ **따라서 fully connected layer 문제점은 '데이터 형상이 무시' 된다는 것...!
📌 이미지와 같은 고차원 데이터는 차원별로 크기가 조금씩만 커져도 전체 데이터 크기가 기하급수적으로 증가하기 때문..!

보다 이미지처리를 더 '잘'하기 위해 입력 데이터에 대해 필터(커널)을 적용해 새로운 합성곱 결과물을 만들어내는 것이 CNN의 기본이다.
CNN은 시각 데이터 처리에 효과적으로, 합성곱 연산을 통해 입력 데이터의 중요한 특징을 자동으로 추출하고 그렇게 추출된 특징을 여러 층으로 전달하여 분류, 탐지, 세분화 등 작업에 활용한다!

위 그림처럼, 필터(커널)가 입력 이미지(map) 위를 움직이며 픽셀별로 원소를 곱하여 결과값들을 모두 더하는 과정을 합성곱 연산이라고 한다.
Convolutional layerdptj 추출된 feature map의 크기가 너무 커지게 되면 연산량이 급증하여 학습 자체가 불가능해질 수 있기 때문에, pooling layer (풀링층)에서 feature map의 크기를 줄이는 역할을 한다
CNN에는 두 개의 플링층이 있는데,

최대 풀링층은, 주어진 풀링 윈도우 내의 값 중 최대값을 리턴하고

평균 풀링층은, 주어진 풀링 윈도우 내의 값의 평균값을 리턴한다
📌 풀링층을 통해 공간적인 크기를 줄이고, 계산 비용을 줄이면서 중요한 특징을 보존할 수 있다!!
마지막으로 dense layer는 추출된 feature들을 기반으로 최종 출력을 생성하는 역할을 한다!