CNN

2025. 3. 11. 23:43·개발 공부

CNN(Convolutional Neural Network)이란?

CNN(Convolutional Neural Network)은 딥러닝에서 주로 이미지나 영상 데이터를 처리하는 데 사용되는 신경망입니다. 핵심 특징은 이미지의 공간적 정보(Spatial Information)를 유지하면서 특징(Feature)을 학습하는 것입니다.


1. 왜 CNN을 사용할까?

기존의 DNN(Deep Neural Network)은 입력 데이터를 1차원 벡터로 변환해야 했습니다. 하지만 이미지 데이터를 1차원으로 변환하면 **공간적/지역적 정보(Spatial Information)**가 손실되는 문제가 발생합니다.

예를 들어, 1028×1028 크기의 이미지를 1차원으로 변환하면 픽셀 간의 위치 정보가 사라져서 이미지의 중요한 특징을 학습하기 어려워집니다.

이러한 문제를 해결하기 위해 등장한 것이 CNN입니다. CNN은 이미지를 그대로 입력받아 특징을 계층적으로 학습하며, 중요한 부분을 집중적으로 분석할 수 있도록 설계되었습니다.


2. CNN의 핵심 개념

CNN은 크게 Convolution 연산, Pooling, Activation Function 등의 개념으로 구성됩니다.

2.1 Convolution 연산

Convolution(합성곱)은 이미지의 일부 영역(커널 또는 필터라고 부름)을 스캔하면서 특정 패턴을 추출하는 과정입니다.

🔹 Convolution 연산 과정

  1. 입력 이미지는 보통 행렬(Matrix) 형태로 표현됩니다.
  2. CNN에서는 **필터(커널, Kernel)**을 사용하여 이미지를 작은 영역 단위로 나눠 연산을 수행합니다.
  3. 필터를 이미지 위에서 이동시키면서 각 영역과 연산을 수행하여 새로운 출력값을 얻습니다.

🔹 예제 (5×5 이미지, 3×3 필터)

  • 5×5 크기의 이미지가 있고, 3×3 크기의 필터를 사용한다고 가정합니다.
  • 필터를 이미지의 왼쪽 상단부터 오른쪽 하단까지 이동하며 **Inner Product(내적 연산)**을 수행합니다.
  • 결과적으로 (5-3+1)×(5-3+1) = 3×3 크기의 출력 이미지가 생성됩니다.

2.2 Zero Padding (제로 패딩)

필터를 적용하면 이미지 크기가 줄어드는 문제가 발생합니다. 이를 방지하기 위해 **Zero Padding(0을 추가하는 기법)**을 사용하여 출력 이미지의 크기를 유지할 수 있습니다.

  • 예를 들어, 5×5 이미지에 1픽셀 두께의 패딩을 추가하면, 7×7 크기가 됩니다.
  • 이후 3×3 필터를 적용해도 원래 크기를 유지할 수 있습니다.

2.3 Stride (스트라이드)

필터가 이미지를 이동하는 거리(픽셀 수)를 의미합니다.

  • Stride=1: 필터를 한 칸씩 이동 → 출력 크기가 큼
  • Stride=2 이상: 필터를 두 칸 이상 이동 → 출력 크기가 작아짐

2.4 텐서(Tensor)와 컬러 이미지 처리

컬러 이미지는 **RGB 채널(3개)**을 가지고 있습니다. 따라서 CNN에서는 2D 행렬이 아니라 **3D 텐서(Tensor)**를 다룹니다.

  • 예를 들어, 28×28 흑백 이미지는 (28,28) 행렬로 표현되지만,
  • RGB 컬러 이미지는 (28,28,3) 텐서로 표현됩니다.

3. CNN의 전체 구조

CNN은 일반적으로 다음과 같은 구조를 가집니다.

  1. 입력 레이어 (Input Layer)
    • 이미지 데이터를 입력 (예: 28×28×3)
  2. 합성곱 층 (Convolutional Layer) + 활성화 함수 (Activation Function)
    • 필터(커널)를 사용해 특징을 추출
    • 보통 ReLU(Rectified Linear Unit) 활성화 함수를 적용하여 비선형성 추가
  3. 풀링 층 (Pooling Layer)
    • 특징을 유지하면서 크기를 줄여 연산량 감소 (예: Max Pooling)
  4. 완전 연결 층 (Fully Connected Layer, FC Layer)
    • Flatten(1차원 변환) 후 Dense Layer에 전달하여 최종 분류 수행
  5. 출력 층 (Output Layer)
    • Softmax(다중 클래스 분류) 또는 Sigmoid(이진 분류)를 적용하여 결과 예측

4. CNN의 주요 레이어

4.1 Convolutional Layer (합성곱 레이어)

  • 주요 역할: 필터를 사용하여 이미지에서 특징을 추출
  • 활성화 함수 적용: 일반적으로 ReLU를 사용하여 비선형성을 추가

4.2 Pooling Layer (풀링 레이어)

Pooling은 데이터의 크기를 줄이면서 중요한 정보를 유지하는 과정입니다.

  • Max Pooling: 일정 영역 내에서 최대값을 선택
  • Average Pooling: 일정 영역 내에서 평균값을 선택
  • 보통 2×2 크기의 풀링을 사용하며, stride=2를 적용하여 차원을 절반으로 줄임

4.3 Fully Connected Layer (완전 연결 레이어)

  • Convolution과 Pooling을 거친 데이터를 1차원 벡터(Vector)로 변환한 후 분류 진행
  • Softmax(다중 클래스 분류) 또는 Sigmoid(이진 분류)를 사용하여 최종 예측

5. CNN의 학습 매개변수와 하이퍼파라미터

CNN 모델에는 **매개변수(Parameter)와 하이퍼파라미터(Hyperparameter)**가 존재합니다.

5.1 학습 가능한 매개변수 (Trainable Parameters)

CNN에서 학습되는 주요 매개변수는 **필터의 가중치(Weights)와 바이어스(Bias)**입니다.

  • 예를 들어, 5×5 필터 10개를 사용하면 5×5×10 = 250개의 학습 가능한 파라미터가 생성됩니다.
  • CNN이 깊어질수록 파라미터 수는 기하급수적으로 증가합니다.

5.2 하이퍼파라미터 (Hyperparameters)

하이퍼파라미터는 학습 전에 사용자가 직접 설정해야 하는 값입니다.

  • 필터 크기: 3×3, 5×5 등
  • 필터 개수: 16, 32, 64 등
  • Stride 값: 1, 2 등
  • Padding 여부: Same Padding, Valid Padding 등
  • Pooling 방식: Max Pooling 또는 Average Pooling
  • Fully Connected Layer의 크기: 128, 256 등
  • 활성화 함수: ReLU, Sigmoid, Softmax 등
  • 학습률(Learning Rate): 0.01, 0.001 등
  • 최적화 알고리즘: SGD, Adam, RMSprop 등

6. CNN을 요약하면?

  1. CNN은 이미지의 공간적 정보(Spatial Information)를 보존하면서 특징을 추출하는 모델입니다.
  2. Convolution 연산을 통해 이미지에서 주요 패턴을 감지하고, Pooling 연산을 통해 연산량을 줄이면서 핵심 특징을 유지합니다.
  3. 마지막으로 Fully Connected Layer에서 최종적인 분류를 수행합니다.
  4. CNN 모델의 성능을 최적화하려면 필터 크기, 스트라이드, 패딩, 활성화 함수 등 다양한 하이퍼파라미터를 조정해야 합니다.

이제 CNN의 핵심 개념을 이해했으니, 직접 코드로 실습해보면서 익히는 것이 가장 중요합니다! 🚀

'개발 공부' 카테고리의 다른 글

CNN for LNP  (0) 2025.03.14
자연어 처리 용어 정리 1  (1) 2025.03.14
Azure_project  (0) 2025.03.11
VSCODE 단축키  (0) 2025.02.19
프로젝트 [원단 색상 유사도 검출 시스템]  (0) 2025.02.16
'개발 공부' 카테고리의 다른 글
  • CNN for LNP
  • 자연어 처리 용어 정리 1
  • Azure_project
  • VSCODE 단축키
swk5276
swk5276
흔적을 기록하자
  • swk5276
    개발 공부 기록
    swk5276
  • 전체
    오늘
    어제
    • 분류 전체보기 (219)
      • Agent (5)
      • LangChain (7)
      • DAYCONE (2)
      • 백엔드 (3)
      • 인공지능 (13)
      • 개발 공부 (18)
      • MICROSOFT SAY (14)
      • IT 기술 (3)
      • 프레임워크 (2)
      • IT 개념 (15)
      • 알고리즘 (14)
      • 파이썬 (15)
      • 자바 (26)
      • 정보처리 (27)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터베이스
    flask 프레임워크
    Ajax
    -
    python 예제
    API란?
    인스턴스
    객체
    DFS
    db
    git 명령어
    fetchAPI
    시뮬레이션 알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
swk5276
CNN
상단으로

티스토리툴바