[CNN] Convolution 연산

조치연·2025년 4월 20일
1

CNN

목록 보기
8/11
post-thumbnail

저도 그저 공부하는 학생이니 틀린 개념이 있다면 알려주시면 감사하겠습니다.
기본적으로 전통적인 머신러닝에 대한 이해가 있으며 classification은 안다는 가정하에 설명해 보겠습니다.
즉, 피처 추출(feature extraction)에 대해 자세히 공부해볼 생각입니다
현재 제가 사용하는 툴은 tensorflow 입니다.

오늘은 CNN과 CNN을 이용한다면 알아야 할 Convolution(합성곱)연산에 대해 공부해보려고 한다.


📚 합성곱(Convolution) 연산

합성곱(Convolution) 연산이라고 들어봤는가?

합성곱은 두 함수를 곱하여 더한다는 의미를 가지고 있다.
즉, f라는 함수와 g라는 함수를 곱한 후 더하는 것이다.
여기서는 간단하게 CNN에서 어떤식으로 연산을 하는지만 알고 가도록 해보자.

보통 CNN에서 f는 이미지(행렬)가 주어지고 g는 filter다.
g라는 함수는 f를 상하좌우로 왔다갔다 하면서 Convolution 연산을 적용한다.

예를 들어 아래와 같은 함수 f와 g가 있다고 하자.


두 함수를 합성곱하면 각 g함수가 f함수 내에서 상하좌우로 이동하며 곱하고 최종적으로 값을 더한다.

이 과정을 f함수 내에서 크기에 따라 상하좌우로 움직이며 시행해 주면 된다.
앞서도 언급했지만 CNN 한정으로 본다면 f는 Input 데이터가 되고, g는 filter가 된다.




📚 CNN 개요

CNN은 Convolutional neural network의 약자로 딥러닝 신경망의 아키텍처다.
CNN은 입력 계층, 은닉 계층, 출력 계층으로 이루어져있다.

이런 CNN은 이미지 분석 및 영상에서 객체를 탐지하는데 특히 유용하다.
CNN이 '인간의 시신경 구조를 모방한 기술'이라고 한다.(사실 난 잘 모르겠음)
또한 모델 스스로 이미지의 패턴을 학습하고 Weight값을 스스로 바꿔가며 최적화한다.



📚 CNN 작동 방식

CNN의 작동 방식을 전통적인 머신러닝 비유를 들어 간단히 이해해보자.
흔히 전통적인 머신러닝 모델을 학습시킬 때 Input 데이터가 주어지면 그 데이터를 정제된Input으로 변형 시킨 후 모델에 fit한다. 그러면 모델의 로직에 따라 predict를 해주는 것이 전통적인 머신러닝 모델이다.

조금 더 구체적으로 예를 들어보자면 우리가 회귀 모델을 이용하여 예측해야 한다고 가정하자.
여기서 모델은 Xgboost를 이용한다고 가정한다.
우리는 데이터를 가져와 전처리 과정을 수행한 후 그 전처리된 Input 데이터를 모델에 넣고 파라미터를 조정하여 최적화된 모델을 추출하게 된다.

내 개인적인 생각이지만 CNN도 이 과정과 거의 비슷한 것 같다.
CNN은 앞서 말한 전처리 과정도 모델 스스로 학습한다.

이제 CNN이 어떻게 작동하는 지 살펴보자.
CNN은 이미지를 처리하는데 유용하기 때문에 Input으로 이미지가 들어온다. 이때 Input은 인간이 보는 이미지를 컴퓨터가 연산할 수 있도록 숫자로 변경된다.
흔히 matplotlib.pyplot.imshow()에서 숫자로 그림을 표현할 수 있다.

아래는 간단하게 그려본 예시다.


위 사진에서 인간이 보는 이미지는 [0, 50, 100, 0, 0]으로 컴퓨터에 입력이 된다. 이렇듯 인간이 보기에는 그냥 색이 칠해져있는 이미지를 컴퓨터에서는 숫자로 입력을 받게 된다.

CNN에서는 이런 이미지의 각 부분을 Weight값에 맞게 함축적으로 바꾼 후 분류 알고리즘을 실행한다. 여기서 말하는 분류 알고리즘은 'Dense Layer 여러개가 합쳐진 신경망' 정도라고 생각해도 좋을 것 같다.
함축적으로 바꾼다는 게 어떤 의미인지 이해가 안 갈 수 있지만 여기서는 그냥 '이미지가 더 많은 정보를 포함하도록 바꾸는 것' 정도로 이해해도 괜찮지 않을까 싶다.

개인적인 내 생각이지만 이미지를 Weight값에 의해 Convolution 연산을 적용하는 것이 전통적인 머신러닝에서 데이터 전처리 과정이며, 이 전처리 과정을 통해 나오는 데이터를 Dense Layer같은 모델에 넣어 학습시키는 과정을 통틀어 CNN이라고 생각한다.


왼쪽 그림처럼 Input데이터가 들어오고 이를 filter를 거쳐 Convolution 연산을 하게된다.
여기서filter는 파란색으로 된 부분이다.
참고로 Convolution 연산을 거쳐서 나오는 Output을 'feature map'이라고 한다.
저 필터 하나하나에 저장된 값이 Weight라고 생각하면 된다. 즉 현재 Layer에서 Params는 9개인 것이다.
이런 과정은 여러번 진행될 수 있다.
위 예시에서 Convolution 결과는 다음과 같다.


이제 이렇게 만들어진 정제된(?)데이터를 모델에 넣어주면 된다.
여기서 모델은 사용자의 커스텀 방식에 따라 달라진다. Convolution 연산은 텐서플로우 케라스에서 Conv2D()를 이용하면 된다.

이제 Convolution 연산이 진행된 Input 데이터를 classification시켜주면 된다.



📚 CNN 구조

CNN 작동방식을 마지막으로 정리해보면 다음과 같다.

  • Input 데이터(이미지)가 들어온다.
  • Input 데이터를 Feature extraction한다.
  • Feature extraction한 데이터를 classification한다.
  • Model에 compile되어있는 optimizer, loss function을 이용하여 Weight값을 변형하며 학습한다.

MathWorks에서 CNN 과정을 이해하기 쉽게 정리한 사진이 있어 첨부해 봤다.



📚 결론

일단 CNN이라는 개념 자체는 엄청 어려운 것 같지는 않다.
실제로 처음 CNN을 배울 때 CNN의 개요보다는 데이터의 차원에서 애를 먹었다. 이번 장에서는 차원같은 Deep한 얘기를 하지 않았지만 CNN을 공부하면 넘어야할 산중에 하나가 차원이라고 생각한다.

CNN을 마지막으로 '내가 느낀 차원에서' 정리하자면 feature extraction이 자동으로 진행되는 network라고 생각이 든다.



감성팔이

현재는 알고리즘 공부는 잠시 접어두고 머신러닝, 그중에서도 딥러닝을 집중적으로 공부하고 있다. 공부하면 할수록 느끼는 점은 '막막하다'라는 것이다.
최근에 대회도 나가봤는데 결과는 처참했다.
열심히 해왔다고 생각했는데 그게 누구한테는 미천한 노력이었고,
나름 재능이 있다고 생각했는데 그저 평범했다.
한마디로 노력충도, 재능충도 되지 못했다.
어쩌면 나중에 완전히 다른 일을 하고 있을지도 모르겠다는 생각을 자주 한다.
그래도 지금은 주변에 좋은 사람들도 많고 재미있는 하루하루를 즐기는 것 같다.

아무튼 오늘 공부는 여기서 끗!


📜 Reference

딥러닝 CNN 완벽 가이드 - TFKeras 버전
Deep Learning Basic

profile
세종대학교 지능기전공학과 23

0개의 댓글