AI바라기의 인공지능

개념 정리 : CNN 본문

인공지능

개념 정리 : CNN

AI바라기 2026. 3. 15. 12:32

CNN이란 convolution neural network이다.

주어진 데이터와 정답을 통해, 가진 데이터를 잘 설명하는 모델을 만들고 싶다.
하지만 데이터의 전체를 한번에 활용하기엔 차원이 높아서 쉽지않을때 사용하는 방법이다.

데이터의 차원에서 모든 부분에 중요한 정보가 있는 것은 아니다. 이에 데이터를 부분부분 마다 보면서 중요한 정보를 더 잘 뽑아내자는 것이 핵심이다.

부분 부분을 보면서 중요한 정보를 뽑아내는 그 도구가 필터이고, 그 필터에 W가 담기게 된다.
또한 도구로 정보를 뽑아내어, 필요한 예측 차원으로 맞출때 필요한 MLP layer에도 W가 담기게 된다.

즉 필터와 후반부 MLP layer를 학습하는 것이 CNN이라고 봐도 무방하다.

동작 방식은 다음과 같다. 
데이터의 지역 부분을 순차적으로 필터로 훑어 정보를 압축하며 차원을 줄여나간다.

하지만 필터만으로는 차원이 축소되는 속도가 너무 느리다. 차원을 더 빠르게 줄여야 하는 핵심 이유는 후반부 필터가 이미지의 넓은 영역을 한눈에 파악하게 만들기 위함이다.
초반의 필터는 이미지의 극히 일부만 보지만, 이 정보들이 층층이 압축될수록 깊은 층의 필터 하나가 감당하는 원본 이미지의 시야(수용 영역)는 기하급수적으로 넓어지기 때문이다.

여기서 필요한 아이디어가 풀링이다.
풀링은 특정 영역을 대표하는 핵심적인 값 하나로 대체하는 방식이다.
즉 2x2를 1개의 값으로 바꾼다면 크기는 그 순간 반으로 줄어든다.

이렇게 해서 빠르게 차원을 줄여나가 몇개 안되는 cnn layer로도 후반부의 필터가 이미지의 큰 영역을 볼 수 있게 된다.

필터를 적용하기 위해선 입력 채널의 수와 필터의 채널 수가 기본적으로 맞아야 한다.
입력 채널별 정보를 한번에 활용하기 위함. 필터의 수는 아웃풋 채널 수가 된다. 자세한 공식은 다음과 같다.

인풋 사이즈 : $W_{in}$ (가로) $\times$ $H_{in}$ (세로) $\times$ $C_{in}$ (채널)

필터 사이즈 : $F$ (가로) $\times$ $F$ (세로) $\times$ $C_{in}$ (채널) (입력 채널 수와 동일)

필터의 수 : $K$ 개

스트라이드 : $S$ (몇 칸씩 건너뛸 것인가)

패딩 : $P$ (가장자리에 0을 몇 겹 두를 것인가)

풀링 : $P_f \times P_f$ (보통 $2 \times 2$를 쓰며, 이때 풀링의 스트라이드도 기본적으로 2로 동일하게 적용)

아웃풋 사이즈 (Convolution 직후) :

가로: $\lfloor \frac{W_{in} - F + 2P}{S} \rfloor + 1$

세로: $\lfloor \frac{H_{in} - F + 2P}{S} \rfloor + 1$

채널: $K$

최종 크기: $W_{out} \times H_{out} \times K$

아웃풋 사이즈 (Pooling 직후) :

가로: $\lfloor \frac{W_{out}}{P_f} \rfloor$

세로: $\lfloor \frac{H_{out}}{P_f} \rfloor$

채널: $K$ (풀링은 채널 수를 건드리지 않음)

최종 크기: $\frac{W_{out}}{P_f} \times \frac{H_{out}}{P_f} \times K$

여기서 스트라이드란 필터의 보폭이다. 
패딩이란 데이터 테두리에 특정한 값을 채워넣는 방식이다. 이게 필요한 이유는 아웃풋 차원을 맞추기 위함도 있고, 필터가 지나가면서 중간부분은 여러번 보지만 테두리는 한번밖에 못보기에 테두리 바깥으로도 어떠한 정보를 채워주어 실제 테두리 부분도 여러번 보게 하기 위함이다.

 

 


그 후 Flatten작업을 통해 1차원 배열로 만든다.

 

이제 mlp를 통해 차원을 맞추고 정답과의 비교를 통해 loss를 흘려 W를 업데이트 하게 된다.