본문 바로가기
AI/딥러닝

[AI 부트캠프] DAY 67 - 딥러닝 3

by HOHHOH 2023. 10. 26.

[오늘의 일지]

딥러닝 실시간 강의 - CNN

[상세 내용]

CNN

등장배경

- David Hubel과 Torsten Wiesel은 20세기 중반에 중요한 연구를 통해 시각 피질 내에서 뉴런의 작동과 시각 정보 처리를 이해하는 데 기여한 노벨 생리학과 의학상 수상자입니다. 그들의 연구는 신경 과학과 컴퓨터 비전 분야에서 컨볼루션 신경망(CNN)의 개발에 영향을 미쳤습니다. 영향을 미쳤던 부분은 아래와 같습니다.

  • 뉴런의 특징 감지: Hubel과 Wiesel은 고양이 시각 피질의 뉴런을 연구하면서, 이 뉴런들이 특정 방향, 모양 및 패턴의 시각적 자극에 반응하는 것을 발견했습니다. 이러한 뉴런을 "특징 감지 뉴런"이라고 불렀습니다.
  • 각각의 특징 감지 뉴런: Hubel과 Wiesel은 감각 정보를 처리하는 계층화된 뉴런의 구조를 발견하였습니다. 처음에는 간단한 특징(선, 모서리)을 감지하는 뉴런이 있고, 이러한 정보를 기반으로 더 복잡한 특징(무늬, 객체)을 감지하는 뉴런이 있었습니다.
  • 시각 피질 내의 계층 구조: 이러한 연구 결과는 시각 피질 내에서 계층 구조가 형성되어 시각 정보가 점차 추상적인 특징으로 표현된다는 아이디어를 제시했습니다. 이는 CNN의 계층화된 구조와 유사합니다.

CNN은 이러한 Hubel과 Wiesel의 연구 결과에서 영감을 받아 개발된 것 중 하나입니다. CNN은 이미지 인식 작업을 위한 계층화된 구조와 컨볼루션 레이어를 사용하여 이미지 내에서 특징을 감지하는 아이디어를 채택하였습니다. 또한, CNN의 합성곱 레이어는 이미지에서 각 픽셀과 그 주변의 정보를 사용하여 특징을 추출하는 것과 관련이 있습니다.

 

정의

- CNN은 Convolutional Neural Network로서 합성곱 뉴럴 네트워크라는 의미를 가지고 있는데 CNN은 주로 이미지 및 비디오와 같은 그래픽 데이터의 처리와 분석에 사용되는 딥러닝 신경망의 한 유형입니다. CNN은 특히 이미지 인식, 객체 감지, 얼굴 인식, 자율 주행 자동차 및 의료 이미상 분석과 같은 컴퓨터 비전 작업에 효과적으로 활용됩니다. 주요 특징은 아래와 같습니다.

  • 합성곱 계층(Convolutional Layer): CNN의 이름에서도 알 수 있듯이 합성곱 계층은 이미지에서 특징을 추출하는 역할을 합니다. 이 계층은 작은 필터(커널)를 이미지 상에서 이동시키면서 지역적 특징을 감지합니다.
  • 풀링 계층(Pooling Layer): 풀링은 이미지의 크기를 줄이고 계산량을 감소시키는 역할을 합니다. 주로 최대 풀링이나 평균 풀링이 사용됩니다.
  • 완전 연결 계층(Fully Connected Layer): CNN의 상위 계층에서는 전체 이미지를 고려하여 분류 및 예측 작업을 수행합니다. 이 계층은 일반적인 인공 신경망의 완전 연결 계층과 유사합니다.
  • 활성화 함수(Activation Function): 주로 ReLU(Rectified Linear Unit)와 같은 활성화 함수가 사용되어 모델의 비선형성을 도입합니다.
  • 파라미터 공유(Parameter Sharing): CNN은 합성곱 및 풀링 계층에서 파라미터 공유를 사용하여 모델의 학습 가능한 파라미터 수를 줄입니다. 이것은 가중치를 공유하여 특징의 위치에 상관없이 감지할 수 있게 돕습니다.

 

원리

Feature Extraction(= Embedding)

Convolutional Layers 

  • 컨볼루션 연산(Convolution Operation): 컨볼루션 레이어는 컨볼루션 연산을 사용하여 입력 데이터와 필터(커널) 간의 합성곱을 수행합니다. 이것은 필터가 입력 데이터를 슬라이딩하면서 서로 겹치는 부분에서 연산을 수행하여 특징 맵을 생성하는 것을 의미합니다.
  • 필터(커널): 필터는 입력 데이터에서 특정한 패턴이나 특징을 감지하는 역할을 합니다. 예를 들어, 가장 간단한 커널은 에지를 감지하는 데 사용됩니다. 필터의 크기와 가중치는 학습 중에 조정됩니다.
  • 스트라이드(Stride): 스트라이드는 필터가 입력 데이터를 얼마나 건너뛰며 슬라이딩할지 결정합니다. 스트라이드가 1이면 필터가 한 픽셀씩 이동하고, 스트라이드가 2이면 필터가 두 픽셀씩 이동합니다.
  • 패딩(Padding): 패딩은 입력 데이터 주변에 추가적인 픽셀을 더하는 것을 말하며, 주로 출력 특징 맵의 크기를 조정하고 정보 손실을 방지하기 위해 사용됩니다.

Convolutional Layers 공식

- 입력 데이터와 필터(커널)

  • 입력 데이터: 크기 H x W x D (높이, 너비, 채널 수)
  • 필터: 크기 F x F x D (필터의 높이, 너비, 입력 채널 수)
  • 스트라이드(Stride): S
  • 패딩(Padding): P

- 출력 특징 맵: 크기

  • OH x OW x K (출력 높이, 출력 너비, 필터 수)

- 출력 특징 맵의 높이(OH) 및 너비(OW) 계산

  • OH = [(H - F + 2P) / S] + 1 OW = [(W - F + 2P) / S] + 1

Pooling Layer

  • 풀링 연산: 풀링 레이어는 이미지를 다운샘플링하여 공간 차원을 줄이고 계산량을 감소시키는 역할을 합니다. 주로 최대 풀링(max-pooling) 또는 평균 풀링(average-pooling)을 사용합니다.
  • Max Pooling 연산
    • 출력 특징 맵의 각 위치에서의 값을 계산하는 방법은 다음과 같습니다:
    • 출력 값 = 각 풀링 윈도우 내에서의 최댓값
    • 풀링 윈도우는 입력 데이터 상에서 이동하며, 각 위치에서 풀링 연산을 수행합니다. 일반적으로 2x2 또는 3x3 크기의 풀링 윈도우를 사용합니다. 윈도우는 스트라이드(Stride)를 사용하여 입력 데이터 위를 이동하며, 일반적으로 스트라이드는 풀링 윈도우의 크기와 같습니다.
  • Average Pooling 연산
    • 출력 특징 맵의 각 위치에서의 값을 계산하는 방법은 다음과 같습니다:
    • 출력 값 = 각 풀링 윈도우 내에서의 값들의 평균
    • 풀링 윈도우는 입력 데이터 상에서 이동하며, 각 위치에서 풀링 연산을 수행합니다. 일반적으로 2x2 또는 3x3 크기의 풀링 윈도우를 사용하며, 윈도우는 스트라이드(Stride)를 사용하여 입력 데이터 위를 이동합니다. 스트라이드는 일반적으로 풀링 윈도우의 크기와 같습니다.

Fully Connected Layer

  • 완전 연결 레이어는 합성곱 레이어와 풀링 레이어를 통해 얻은 특징 맵을 기반으로 최종 예측을 수행합니다.
  • 이 레이어에서는 각 뉴런이 이전 레이어의 모든 뉴런과 연결되어 있으며, 가중치와 편향을 사용하여 예측을 수행합니다.
  • 주로 분류 작업에서 사용되며, 소프트맥스 함수를 통해 각 클래스에 대한 확률 분포를 출력합니다.

Training and Backpropagation

  • CNN은 임베딩 레이어에서부터 완전 연결 레이어까지의 모든 레이어의 가중치를 학습합니다. 이를 위해 손실 함수와 옵티마이저를 사용하여 역전파 알고리즘을 적용합니다.

 

CNN 예시

1D Convolution

- 1D Convolution(1차원 컨볼루션)은 주로 순차적인 데이터, 예를 들어 텍스트나 시계열 데이터, 음성 데이터와 같은 1차원 데이터에서 특징을 추출하는 데 사용되는 컨볼루션 연산의 형태입니다. 1D Convolution은 2D Convolution(이미지 데이터에 사용되는)과 유사한 방식으로 작동하지만 입력 및 커널(필터)이 1차원 배열로 구성되어 있습니다.

 

Vanilla CNN Architecture

- Vanilla CNN은 일반적인 Convolutional Neural Network(CNN) 아키텍처를 가리키는 용어로, 주로 이미지 분류 작업을 위한 기본 또는 표준적인 CNN 구조를 의미합니다. Vanilla CNN은 일반적으로 이미지 분류를 위한 여러 공통 레이어와 구성 요소로 구성됩니다.

 

Transfer Learning

- pretrained model의 정보를 가져와서 효율적으로 학습하는 방법

  • pretrained model에서 weight와 architecture를 가져와서 다른 task에 적용하는 방법 
  • 훨씬 성능도 높일 수 있고, fromscratch 대비 학습에 들어가는 리소스도 적음 
  • 적은 데이터로도 특정 task에 높은 성능을 이끌어낼 수 있음

 

[마무리]

 오늘은 컴퓨터 비젼 분야의 근본적인 딥러닝 모델이라고 할 수 있는 cnn에 대해서 배웠습니다. 이제는 딥러닝 분야에 대해서 조금씩 알아가게 되면서 흥미가 생기는 분야가 점점 생기는 거 같습니다. 여러 가지 모델들에 대해서 좀 더 공부하면서 어떤 분야를 선택해서 깊게 공부해야 할지 결정해야 될 거 같습니다.

반응형

댓글