Tensorflow 2.0 Tutorial ch6.1-2 - CNN 이론

Page content

공지

  • 본 Tutorial은 교재 시작하세요 텐서플로 2.0 프로그래밍의 강사에게 국비교육 강의를 듣는 사람들에게 자료 제공을 목적으로 제작하였습니다.

  • 강사의 주관적인 판단으로 압축해서 자료를 정리하였기 때문에, 자세하게 공부를 하고 싶은 반드시 교재를 구매하실 것을 권해드립니다.

  • 본 교재 외에 강사가 추가한 내용에 대한 Reference를 확인하셔서, 추가적으로 학습하시는 것을 권유드립니다.

Tutorial

이전 강의가 궁금하신 분들은 아래에서 선택하여 추가 학습 하시기를 바랍니다.

I. 개요

교재 Chapter 6.1Chapter 6.2CNN의 기본적인 이론 배경들이 있습니다. 교재를 구매해서 꼭 한번 읽어보시기를 바랍니다. 주요 키워드를 정리하면 다음과 같습니다.

  • 특징추출
  • 컨볼루션 연산 = 합성곱
  • 수작업 필터 (수직선/수평선 검출, 흐림(blur)효과, 날카로운 이미지(sharpen)효과
    • 수작업 필터를 적용하기에는 3가지 문제점 존재, 도메인 지식 + 시간과 비용 + 좁은 확장성
  • 컨볼루션의 역할은 네트워크가 특징을 추출하는 필터를 자동으로 생성해줌

어떻게 특징을 자동으로 추출하는 것일까요?

II. 주요 레이어 정리

지금까지 이 책에 나온 레이어는 Dense 레이어와 Flatten 레이어 두 종류입니다.

  • Dense레이어는 신경망에서 가장 기본이 되는 레이어이며 각 뉴런이 완전 연결(Fully-Connected) 레이어라고 불리웁니다.
  • Flatten레이어는 다차원의 이미지를 1차원으로 평평하게 바꿔주는 레이어입니다.

위 그림1에서 볼 수 있는 것처럼 CNN은 특징 추출기(Feature Extractor)와 분류기(Classifier)가 합쳐진 형태입니다. 이 때, 특징 추출기의 역할을 하는 것은 CNN 레이어Pooling 레이어이며, Dense 레이어는 분류기의 역할을 합니다.

이론적인 자세한 부분은 여기에서는 생략하기로 한다. (교재를 참고하라!) 대신, 각 레이어의 특징 및 역할만 짧게 요약합니다.

  • 컨볼루션 레이어
    • 네트워크의 학습을 통해 자동으로 특징을 추출함
    • 코드에서 지정해야 하는 값은 필터를 채우는 각 픽셀의 값이 아니라 필터의 개수 정도임
    • 2차원 이미지를 다루는 컨볼루션 레이어를 생성하는 코드는 다음과 같음
conv1 = tf.keras.layers.Conv2D(kernel_size=(3,3), strides=(2,2), padding='valid', filters=16)

각 인수에 대한 설명은 전체 코드 때 재 설명합니다.

  • 풀링 레이어
    • 인접한 픽셀의 경우 중요한 정보만 남기기 위해 서브샘플링(subsampling)이라는 기법을 사용합니다. 컴퓨터의 메모리 크기가 한정되어 있다는 걸 고려한 레이어이며, 과적합 방지에 도움을 줍니다.
    • 풀링 레이어에는 Max 풀링 레이어, Average 풀링 레이어 등이 있씁니다.
pool1 = tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2))

각 인수에 대한 설명은 전체 코드 때 재 설명합니다.

  • 드롭아웃 레이어
    • 뉴런의 부분집을 제거하여 뉴런들간의 공모(conspiracy)를 막고 과적합(overfitting)을 감소시키는 것입니다.
    • 뉴런들은 결과값에 의해 서로 같은 영향을 받기 때문에, 결과값은 한쪽으로 치우치게 됩니다. 이러한 방지책으로 드롭아웃 레이어를 사용합니다.
pool1 = tf.keras.Dropout(rate=0.3)

간단한 코드이지만 AlexNet, VGG, GoogleNet, DenseNet 등 거의 모든 주요 CNN에서 사용됩니다.

III. 결론 및 정리

컨볼루션 신경망은 크게 3가지 레이어로 구성됩니다. 컨볼루션 레이어, 풀링 레이어, 드롭아웃 레이어입니다. 각 레이어의 역할은 조금씩 다릅니다. 컨볼루션 레이어는 특징을 추출하는 역할, 풀링 레이어는 중요 정보만 남기로 불필요한 연산 줄여주는 역할, 드롭아웃 레이어는 과적합을 방지하는 역할로 구분됩니다.

이제 Fashion MNIST 데이터세트에 CNN을 적용하고, 88%대의 성능을 올려봅니다.

IV. Reference

김환희. (2020). 시작하세요! 텐서플로 2.0 프로그래밍: 기초 이론부터 실전 예제까지 한번에 끝내는 머신러닝, 딥러닝 핵심 가이드. 서울: 위키북스.

Ujjwal, Karn. “An Intuitive Explanation of Convolutional Neural Networks.” KDnuggets, 2016, www.kdnuggets.com/2016/11/intuitive-explanation-convolutional-neural-networks.html/3.

Hinton, G. E., Srivastava, N., Krizhevsky, A., Sutskever, I. & Salakhutdinov, R. R. (2012). Improving neural networks by preventing co-adaptation of feature detectors. CoRR, abs/1207.0580.


  1. Karn, U. (2016)이 작성한 원서 논문에는 비교적 상세하게 CNN의 원리에 대해 설명하고 있다. 그러나, 한가지 아쉬운 부분은 드롭아웃 레이어에 대한 설명이 누락 되었기 때문에 드롭아웃 레이어에 관한 자세한 설명은 제프리 힌튼 교수팀의 논문을 참조하거나, 교재를 참조하기를 바란다. ↩︎