[Deep Learning] 컨볼루션 신경망(CNN, Convolution Neuron Network)

sunbun·2023년 8월 18일
1

Deep Learning

목록 보기
2/6

컨볼루션 신경망의 구조

최적의 필터를 학습으로 알아낸다!

영상에 필터를 씌워서, 학습시키는 방법이다. 이 CNN에 대한 이해를 다지고 프로젝트를 진행하는게 나을 것 같아서, CNN에 대해서 공부하고 정리해보는 시간을 가졌다.



컨볼루션층과 풀링층

컨볼루션층 convolution layer

  • 입력 특징 맵(feature map)에 컨볼루션을 적용해서 얻은 특징 맵 출력한다.

    • 입력 특징 맵kk개 채널로 구성되어 깊이가 kkm×nm\times n 크기의 맵!

      • 즉, m×n×km \times n \times k 모양의 3차원 텐서
    • 여러 개의 필터를 사용해서 풍부한 특징 추출

      • 필터의 깊이 = 입력 특징 맵의 깊이 (kk)
      • 필터의 크기 = h×hh\times h, (hh = 보통 3 or 5)
      • 하나의 바이어스 값을 추가로 가짐
        • 따라서, 필터는 kh2+1kh^2+1개의 가중치를 가짐
      • 좌우, 상하 방향으로 이동 (깊이 방향 이동 X)
      • 곱의 합, 즉 로짓을 구하는 컨볼루션 수행!
        convolution layer
    • 로짓에 활성 함수를 적용한 결과를 출력 특징 맵에 씀
      - 컨볼루션 층의 경우 보통 ReLU 또는 ReLU의 변종을 사용함

    • 필터 개수 k’로 표기했는데, 보통 16, 32, 64, 128, 256 사용한다.

    • 필터 하나가 특징 맵 하나를 생성한다고 본다!

      • 따라서, 출력 특징 맵은 필터의 개수에 해당하는 kk' 깊이의 m×nm'\times n' 맵이다.
      • 즉, m×n×km'\times n'\times k' 모양의 텐서가 된다!
  • 맵의 경계에서 필터를 대면 일부 화소가 밖으로 나가기 때문에 적용 불가능한 문제 발생한다.

    • 현상 방지를 위해, ‘0 덧대기’ or ‘복사 덧대기’ 적용! (padding)
      • 0 덧대기: 경계 바깥에 0을 덧대는 것
      • 복사 덧대기: 경계 화소의 값을 복사해서 덧댐
    • 보폭(stride)을 ss로 설정하면 ss 화소씩 건너 필터 적용
      • 출력 맵의 크기를 줄이는 효과가 있음!
      • 보폭이 ssm×nm \times n맵이 (m/s)×(n/s)(m/s)\times(n/s)로 줄어듦

[CS231n Convolutional Neural Networks for Visual Recognition](https://cs231n.github.io/convolutional-networks/#conv)

컨볼루션층의 특징

  • 가중치 공유 weight sharing

    • 필터의 값 = 가중치 (필터 속 숫자)
    • 입력 특징 맵의 모든 화소가 같은 필터를 사용함
      ⇒ 가중치를 공유한다! -> 가중치의 수가 줄어드는 효과 발생!
  • 부분 연결성 partial connection

    • 필터가 해당 화소 주위로 국한하여 연산하는 부분 연결성 만족
  • 이러한 특징들이 학습 알고리즘이 최적화해야 할 가중치 개수를 획기적으로 줄여줌

    • 컨볼루션 층에는 kk'개의 h×h×kh\times h\times k 필터가 있기 때문에, 학습 알고리즘이 추정해야할 가중치는 k(kh2+1)k'(kh^2+1)개가 됨!
      • 바이어스 노드로 인해 1을 더해주어야 함

풀링층 pooling layer

  • 컨볼루션층 뒤에 풀링층이 따르는 편!

  • 상세함을 줄이는 효과와 특징 맵의 크기를 줄여 신경망의 효율을 높이는 효과 제공

    • 특징 맵에는 인식에 불필요할 정도로 지나치게 상세한 내용이 많기 때문에 풀링층이 필요함
  • 예시

    • 2×22 \times2 필터로 최대 풀링(max pooling)을 수행!
      • 최대 풀링 = 필터 안의 화소 중에서 최댓값을 취하는 연산 <보통 많이 사용함>
      • 평균 풀링 = 필터 안에 있는 화솟값의 평균 취함
    • 보폭 = 2
      • 1개의 화소 건너 필터 적용, 특징 맵은 반으로 줄어들게 됨




빌딩블록을 쌓아 만드는 컨볼루션 신경망

빌딩블록 쌓기

  • 보통의 컨볼루션 신경망은 컨볼루션 층과 풀링층을 번갈아 쌓아 만듦
  • 특징 맵의 크기 m×nm\times n은 컨볼루션 층과 풀링층 보폭에 따라 바뀜
  • 깊이 kk는 컨볼루션층에서는 필터 개수에 따라 바뀜, 풀링층에서는 그대로 유지한다!

신경망의 앞 부분의 컨볼루션층과 풀링층은 특징 추출 역할 담당!
뒷부분은 완전연결층을 쌓아 분류 수행을 진행한다.

  • 앞부분과 뒷부분 사이 flatten 연산의 경우, 컨볼루션층의 다차원 구조를 1차원 구조로 변환해 완전연결층에 입력하는 것

  • 이후, 출력층에는 분류할 클래스 개수에 해당하는 만큼 노드 배치!

  • 컨볼루션 신경망의 구성요소

    • 컨볼루션층
    • 풀링층
    • 완전연결층

을 쌓아서 만들기 때문에 데이터에 따라 또는 풀어야 하는 문제에 따라 다양한 모양으로 조립할 수 있음!





컨볼루션 신경망의 학습

컨볼루션 신경망을 위한 역전파 알고리즘

1단계의 전방 계산에서 컨볼루션층 & 풀링층 → 완전연결층 거쳐 출력 벡터 oo를 출력

2단계에서 손실 함수를 통해 oo와 참값 벡터 yy의 오류를 계산함

3단계 역전파 단계에서 오류를 줄이는 방향으로 가중치 갱신

  • 이때 갱신되는 가중치는 컨볼루션층에 있는 필터 U1,U2,...,UL2U^1,U^2,...,U^{L-2}와 완전연결층에 있는 UL1,ULU^{L-1},U^L
  • 풀링층은 단순히 최대를 취해서 가중치 X

다층 퍼셉트론을 위한 역전파 알고리즘과 컨볼루션 신경망에 그대로 적용됨
but, 완전연결층과 계산이 다르기 때문에 계산식에 따라 미분만 다르게 수행하면 됨!





특징 학습과 통째 학습

  • 컨볼루션 신경망의 우수성
    • 특징 추출을 담당하는 필터를 학습한다!
      • 학습 알고리즘은 주어진 데이터셋을 인식하는데 최적인 필터를 찾아냄
    • 이를 특징 학습(feature learning)한다고 표현
    • 다른 관점에서 바라보면 통째 학습(end-to-end learning)으로 표현
      • 고전적 컴퓨터 비전에서는 특징을 사람이 설계한 방법으로 추출
        • LBP, SIFT, HOG 등..
      • 딥러닝 패러다임의 경우 통합된 신경망에서 특징 학습과 분류기 학습을 통째로 진행

고전적 패러다임 = 수작업 특징으로 분류 모델 학습 → 특징 추출 프로그램 + 분류기 프로그램 결합


컨볼루션 신경망이 우수한 이유

  1. 데이터의 원래 구조를 유지
    a. 다층 퍼셉트론의 경우, 영상을 모델에 맞춰 1차원 구조로 변환하여 입력
    b. but, 컨볼루션 신경망은 3차원 구조를 그대로 입력!

  2. 특징 학습을 통해 최적의 특징을 추출함
    a. 통째 학습이 가능해져 사람의 개입을 최소화하고, 특징과 분류를 동시에 최적화함

  3. 신경망의 깊이를 깊게할 수 있음
    a. 컨볼루션층은 가중치 공유와 부분 연결성이라는 특성으로 인해 가중치가 적음
    b. 따라서 층을 깊게 해도 무리 없이 학습이 이루어짐
    c. 층을 깊게하면, 더 세밀한 계층 구조의 특징을 추출할 수 있어서 인식 성능 향상

참고 자료
profile
나는 데단한 데싸인 ☠️

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

이렇게 유용한 정보를 공유해주셔서 감사합니다.

답글 달기