본문 바로가기
AI

CNN 기초

by 코낄2 2024. 1. 10.

1. CNN(Convolutional Neural Networks)

합성곱 인공 신경망(CNN)은 전통적인 뉴럴 네트워크에 컨볼루션(Convolutional) 레이어를 추가한 형태로, 주로 이미지 처리 작업에 사용됩니다.

딥 뉴럴 네트워크(DNN)가 이미지를 분류할 때의 주요 문제는 1차원 형태의 데이터를 다루어야 한다는 점입니다. 일반적인 DNN 구조에서는 2차원 이상의 이미지 데이터를 입력으로 사용할 경우, 데이터를 flatten하여 1차원으로 변환해야 합니다. 이로 인해 이미지의 공간적 및 지역적 정보가 손실되는 문제가 발생합니다.

이러한 문제를 극복하기 위해 컨볼루셔널 레이어가 도입되었습니다. 컨볼루셔널 레이어는 이미지를 그대로(raw input) 받아들이므로, 데이터를 1차원으로 펼치지 않고도 이미지의 공간적 및 지역적 정보를 보존할 수 있습니다. 이 레이어는 행렬을 사용하여 이미지 연산을 수행하므로, 2차원 위치값을 그대로 계산할 수 있습니다. 이를 통해 DNN의 문제점을 해결하고, 이미지 처리 작업에서 공간적인 특징을 효과적으로 추출할 수 있게 되었습니다.

# 이미지 데이터

  • 컬러 이미지는 3개의 채널로 이루어진 텐서
  • 컴퓨터는 이미지를 숫자로 인식하여 연산을 함
  • 이미지의 정보는 0 ~ 255까지 256개의 숫자로 표현
  • 예) 빨강 255, 파랑 255, 초록 255은 흰색
  • 예) 빨강 0, 파랑 0, 초록 0은 검정
  • 예) 빨강 255, 파랑 0, 초록 0은 빨강

2. Convolution 연산

Filter를 찾아가는 과정/ Filter는 가중치 행렬

  • Convolution은 입력 데이터와 학습된 필터(또는 커널)를 사용하여 새로운 특징 맵(feature map)을 생성하는 과정입니다. 입력 데이터의 각 위치에서 필터와의 원소별(element-wise) 곱셈을 수행하고 그 결과를 더하여 특징 맵의 한 값을 얻습니다. 이런 과정을 필터가 입력 데이터를 스캔하며 전체 입력 영역에 대해 반복합니다. 따라서 일반적으로는 컨볼루션 연산을 진행하면 출력 텐서의 크기가 작아집니다.

2-1. 2D 컨볼루션 연산(Conv2D)

  • 2D 컨볼루션은 이미지 처리와 같은 2차원 데이터에 대한 컨볼루션 연산을 의미합니다.
  • 2D 컨볼루션의 입력은 주로 이미지나 다른 2차원 데이터입니다. 이미지의 경우 각 픽셀은 그 위치의 밝기 또는 색상 정보를 나타냅니다.
  • 2D 컨볼루션 연산은 딥러닝에서 주로 합성곱 층(Convolutional Layer)에서 사용되며, 이미지 분류, 객체 감지, 얼굴 인식 등 다양한 컴퓨터 비전 작업에 적용됩니다.

2-2. 패딩

  • 패딩은 입력 데이터 주변에 추가적인 픽셀을 넣어주는 것입니다. 이것은 주로 출력 크기를 조절하거나(결과값이 작아지는 것을 방지) 경계 픽셀에 대한 정보 손실을 방지하기 위해 사용됩니다.

2-3. 스트라이드( Stride)

  • Stride는 필터가 입력 데이터를 얼마나 이동할지를(적용 간격을) 결정하는 매개변수입니다. 더 큰 stride는 출력 크기를 줄일 수 있습니다.
  • 필터를 적용해서 얻어낸 결과를 Feature map 또는 Activation map이라고 부릅니다.

3. 풀링(Pooling)

  • 일반적으로 합성곱 층(합성곱 연산 + 활성화 함수) 다음에는 풀링 층을 추가하는 것이 일반적입니다. 풀링 층에서는 특성 맵을 다운샘플링하여 특성을 추출하고 맵의 차원을 축소하는 연산이 이루어집니다. 풀링 연산에는 일반적으로 최대 풀링(max pooling/ MaxPool2D )과 평균 풀링(average pooling/ AvgPool2D )이 사용됩니다.

4. 드롭아웃(Dropout) 레이어

드롭아웃(Dropout) 레이어는 신경망에서 오버피팅(overfitting)을 방지하기 위한 효과적인 방법 중 하나로 사용됩니다. 드롭아웃 레이어는 학습 중에 랜덤하게 일부 뉴런을 제거하여 모델이 특정 뉴런에 지나치게 의존하지 않도록 만듭니다.

드롭아웃은 훈련 데이터를 사용하여 모델을 학습할 때 매번 새로운 에포크(epoch)마다 무작위로 선택된 뉴런의 일부를 '드롭아웃'시킵니다. 이는 마치 네트워크의 일부가 '비활성화'되는 것처럼 작용하며, 모든 뉴런이 동시에 학습되지 않고 다양한 부분집합에 대해 학습이 이루어집니다.

드롭아웃은 주로 신경망의 복잡성이 증가하면서 오버피팅이 발생할 가능성이 높은 경우에 적용됩니다. 이를 통해 학습 데이터에 대한 과도한 적합을 줄이고, 모델이 새로운 데이터에 대해 더 강건하게 일반화될 수 있도록 도와줍니다.

5. 완전 연결 계층(Fully Connected Layer)

완전 연결 (Fully Connected, FC) 레이어 또는 밀집 레이어(Dense Layer)는 인공 신경망에서 사용되는 레이어 유형으로, 이전 레이어의 각 뉴런이 현재 레이어의 각 뉴런에 연결되어 있는 구조를 가지고 있습니다. 이 완전한 연결성 때문에 "완전 연결"이라고 불립니다. FC 레이어는 일반적으로 신경망 아키텍처의 끝 부분에 위치하며 최종 출력 예측을 생성하는 역할을 합니다.

CNNs에서 FC 레이어는 일반적으로 합성곱 및 풀링 레이어 뒤에 나타납니다. 이들은 2D 공간 구조의 데이터를 1D 벡터로 평평하게 만들고 이 데이터를 분류와 같은 작업을 위해 처리하는 데 사용됩니다.

6. CNN 체험

https://adamharley.com/nn_vis/

 

An Interactive Node-Link Visualization of Convolutional Neural Networks

An Interactive Node-Link Visualization of Convolutional Neural Networks Adam W. Harley Abstract Convolutional neural networks are at the core of state-of-the-art approaches to a variety of computer vision tasks. Visualizations of neural networks typically

adamharley.com

7. CNN을 구성하는 레이어(예시)

  • Conv2D: 특징 추출
  • ReLU: 활성화 함수
  • MaxPool2D: 차원 축소
  • Conv2D: 특징 추출
  • ReLU: 활성화 함수
  • MaxPool2D: 차원 축소
  • ...
  • Flatten: 다차원에서 1차원으로 변경
  • Linear: 선형 회귀
  • ReLU: 활성화 함수
  • ...
  • Sigmoid / Softmax 출력

'AI' 카테고리의 다른 글

전이 학습  (0) 2024.01.12
간단한 CNN모델 만들기 실습  (1) 2024.01.11
비선형 활성화 함수  (0) 2024.01.10
딥러닝  (0) 2024.01.09
데이터 로더  (0) 2024.01.09