[밑바닥부터 시작하는 딥러닝1] 04. 합성곱 신경망(CNN)

권유진·2022년 1월 2일
0

합성곱 신경망(CNN; Convolutional Neural Network)

이미지 인식, 음성 인식에서 자주 사용

  • 합성곱 계층(Convolution Layer), 풀링 계층(Pooling Layer) 존재
    • 풀링 계층은 생략 가능
  • 완전 연결 계층(Fully-Connected Layer): 인접하는 계층의 모든 뉴런과 결합되어 있는 계층
    • 출력과 가까운 층에는 'Fully_Connected-ReLU' 계층 사용 가능
    • 마지막 출력 계층에서는 'Affine-Softmax' 조합 사용
    • 완전연결계층(FC Layer)에서는 데이터의 형상(shape)이 무시됨.
      • input이 3차원 이라고 하더라도 완전연결계층에 입력할 때는 1차원 데이터로 평탄화해줘야 함.
      • 형상(shape)을 유지하기 위해 합성곱 계층 사용!

합성곱 계층

합성곱 계층은 입력데이터의 형상(shape)을 유지하여 전달

  1. 특징 맵(feature map): 합성곱 계층의 입출력 데이터

    • 입력데이터: 입력특징맵(input feature map)
    • 출력데이터: 출력특징맵(output feature map)
  2. 합성곱 연산(필터 연산)
    합성곱 연산은 입력 데이터에 필터를 적용하는 것

    1) 필터(커널)의 윈도우를 일정한 간격으로 이동해가며 적용
    2) 입력과 필터에서 대응하는 원소끼리 곱한 후 총합 구함
    3) 결과를 출력의 해당 장소에 저장
  • 윈도우: Input Feature Map에서 색이 있는(초록색, 하늘색, 주황색, 회색) 3*3 네모칸
  • 필터의 매개변수가 가중치에 해당
  • 위 예시에서 편향은 존재하지 않지만 존재할 수도 있다.
    • 편향은 항상 하나만 존재하며 필터 적용한 후 데이터에 더해짐
  1. 패딩(Padding)
    입력 데이터 주변을 특정 값으로 채우는 것
    • 일반적으로 0으로 많이 채움
    • Output Feature Map의 크기가 증가
  2. 스트라이드(Stride)
    필터를 적용하는 위치 간격
    • 윈도우가 몇 칸씩 이동하며 합성곱연산 적용하는지 의미
    • Output Feature Map의 크기가 감소

출력 크기(OH, OW) 계산

  • 입력크기 (H,W), 필터크기(FH,FW), 패딩 P, 스트라이드 S
    OH=H+2PFHS+1OW=W+2PFWS+1OH = \cfrac{H+2P-FH}{S}+1\\ OW = \cfrac{W+2P-FW}{S}+1
  • 3차원 데이터 입력 시, 필터와 채널 크기가 같아야 함
    • 데이터 형상(shape): (채널 수, 높이, 너비)
  • 필터를 N개 적용하면 출력맵도 FN개 생성
  • 필터의 가중치 데이터는 4차원
    • (출력 채널 수, 입력 채널 수, 높이, 너비)
    • 채널 수 3, 크기 5*5 필터 20개가 있다면 (20,3,5,5)
  • 배치 처리 -> 4차원으로 처리(데이터 수, 채널 수, 높이, 너비)

풀링 계층

풀링은 가로, 세로 방향의 공간을 줄이는 연산이다.

  • 일정 영역을 하나의 원소로 집약
  • 일반적으로 풀링의 윈도우 크기 = 스트라이드 값으로 설정
  • 위의 예시는 2*2의 영역을 stride 2로 최대풀링을 시행
    • 최대 풀링(Max Pooling): 일정 영역에서 가장 큰 원소 하나를 꺼냄
    • 평균 풀링(Average Pooling)도 존재
  • 특징
    • 학습해야 할 매개변수가 없다.
    • 채널 수가 변하지 않는다. (채널마다 독립적으로 계산하기 때문)
    • 입력의 변화에 영향을 적게 받는다. (강건하다)

CNN 시각화

  • 학습 전의 필터는 무작위로 초기화되어 흑백 정도에 규칙성이 없음
  • 하지만 학습 후에는 규칙의 띄는 필터로 변화
    • 에지(색상이 바뀐 경계선), 블롭(국소적으로 덩어리진 영역) 등 원시적 정보 추출
    • 이러한 원시적 정보가 뒷단 계층에 전달된다는 것이 CNN에서 일어나는 일
  • 계층이 깊어질수록 더 복잡하고 추상화된 정보 추출

딥러닝

층을 깊게 한 심층 신경망

정확도를 높이기 위한 노력

층을 깊게 쌓기

  1. 층이 깊지 않은 경우보다 적은 매개변수로 이상의 표현력 달성 가능
  • 5*5 영역을 합성곱 연산은 1회 진행하면 매개변수 25(5*5)개
  • 합성곱 연산을 2회 진행 시, 3*3 영역을 2번 계산하여 매개변수 18(3*3*2)개
  1. 학습 데이터 양을 줄여 고속으로 수행
  • 신경망의 깊이가 얕을 수록 target의 특징을 한 번에 이해해야 함
    • 그렇기 위해서는 변화가 풍부하고 많은 학습 데이터 필요
  • 신경망을 깊게 하면 학습해야 할 문제를 계층적을 분해
    • 더 단순한 문제로 대체
      ex) 처음 층은 에지의 패턴 탐색(개의 특징 탐색보다 단순한 문제임)
  1. 정보를 계층적으로 전달
  • 에지를 추출한 층의 다음 층은 에지 정보 사용 가능하고 더 고도의 패턴을 효과적으로 학습

데이터 확장(Data Augmentation)

입력 데이터를 인위적으로 확장

  • crop: 데이터의 이미지 일부를 잘라 냄(indexing과 비슷)
  • flip: 이미지를 임의로 좌우 혹은 상하로 반전
  • rotation: 이미지 회전
  • scaling: 이미지 확대 또는 축소
  • cutout: 이미지 일부를 사각형 모양으로 검은색을 칠해버리는 기법
    • 해당 영역을 0으로 채워 넣음
    • 이미지의 덜 중요한 부분까지 집중하게 유도
  • cutmix: 두 이미지를 합쳐 놓고, 이미지의 Label을 학습시킬 때 각 이미지가 차지하는 비율만큼 학습

딥러닝의 역사

이미지 인식 기술을 겨루는 ILSVRC의 대회로 인해 딥러닝이 큰 주목을 받게 되었다.

이미지넷(ImageNet)

  • 100만 장이 넘는 이미지를 담고 있는 데이터셋
  • 다양한 종류의 이미지를 포함하며 라벨이 붙어 있음

LeNet

  • 손글씨 숫자를 인식하는 네트워크
  • CNN의 원조
  • 합성곱 계층과 풀링 계층을 반복하고 마지막으로 완전연결 계층을 거치면서 결과 출력
    • 여기서 풀링은 단순히 원소를 줄이기만 하는 서브샘플링
  • 활성화 함수로 시그모이드 사용

AlexNet

  • 딥러닝 열풍을 일으키는 데 큰 역할 수행
  • 기본적인 네트워크 구성은 LeNet과 동일
  • LeNet과 차이점
    • 활성화 함수로 Sigmoid \rarr ReLU 사용
    • 서브샘플링 \rarr 최대풀링 사용
    • 국소적 정규화(LRN; Local Response Normalization) 사용
    • 드롭아웃 사용

VGG

  • 합성곱 계층과 풀링 계층으로 구성되는 기본적인 CNN
  • 비중 있는 층(합성곱 계층, 완전연결계층)을 모두 16층(혹은 19층)으로 심화
  • 3*3의 작은 필터를 사용한 합성곱 계층을 연속으로 사용
  • 합성곱 계층을 2~4회 연속으로 한 후, 풀링 계층을 두어 크기를 절반으로 줄이는 처리 반복

GoogLeNet

  • 인셉션 구조: 크기가 다른 필터와 풀링을 여러 개 적용하여 그 결과 결합하는 구조
    • 세로 방향 깊이 뿐 아니라 가로 방향도 깊음.
  • 1*1 크기의 필터를 사용한 합성곱 계층 많은 곳에서 사용
    • 채널 쪽으로 크기를 줄이는 것.
    • 매개변수 제거와 고속 처리에 기여

ResNet

  • 스킵 연결(skip connection): 층이 지나치게 깊으면 학습이 잘 되지 않고 성능이 떨어지는 경우 해결
    • 신호 감쇠 방지
    • 역전파 때도 상류의 기울기를 그대로 하류에 보냄
  • 합성곱 계층을 2개마다 건너뛰면서 층을 깊게 함

전이학습(Transfer Learning)

위의 신경망들의 모델 구조와 가중치를 초기값으로 하여 재학습(fine tuning) 수행

참고
밑바닥부터 시작하는 딥러닝 (사이토 고키)

profile
데이터사이언스를 공부하는 권유진입니다.

0개의 댓글