[책 요약] 밑바닥부터 시작하는 딥러닝1-Chapter 8. 딥러닝

더 깊게

더 깊은 신경망으로

  • 이전 챕터와 달리 아래와 같이 더 깊은 신경망을 사용하면 어떻게 될까?

  • 합성곱 계층의 채널 수는 앞 계층에서부터 16, 16, 32, 64 ,64로 늘려간다
    • 3x3의 작은 필터를 사용한 합성곱 계층
    • ReLU
    • 드랍아웃
    • Adam
    • He 초기화
  • 이 모델의 Mnist 결과는 99.38%이다

정확도를 더 높이려면?

  • 데이터 확장(Data augmentation)
    • 데이터를 회전하거나 이동
    • 일부를 잘라내는 crop
    • 좌우를 뒤집는 flip

깊게 하는 이유

  1. 신경망의 매개변수 수가 줄어든다.
    • 층을 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같은 혹은 그 이상의 수준의 표현력을 달성할 수 있다.

  • 위와 같은 그림에서, 5X5 = 25개의 매개변수가 필요했던 것이 층을 깊게 하면 3X3 + 3X3 = 18개만 있으면 5X5 크기의 영역에 대한 연산을 할 수 있다.
  • 이처럼 작은 필터를 겹쳐 신경망을 깊게 할 때의 장점은 매개변수 수를 줄여 넓은 수용영역(receptive filed)를 소화할 수 있다는데 있다.
  • 게다가 층을 거듭하면서 ReLU 등의 활성화 함수를 합성곱 계층 사이에 끼움으로써 신경망의 표현력이 개선된다. 이는 활성화 함수가 신경망에 비선형 힘을 가하고 비선형 함수가 겹치면서 더 복잡한 것도 표현할 수 있게 되기 때문이다.

2. 층을 깊게 함으로써 학습 데이터의 양을 줄여 학습을 고속으로 수행할 수 있다(같은 데이터로도 더 좋은 성능을 낼 수 있다의 의미로 받아들이자)

  • 층을 깊게 하면 풀어야 할 문제를 계층적으로 분해하여 더 효율적으로 풀 수 있다. 예를 들어 처음층은 에지 학습에 전념하여 적은 학습 데이터로 효율적으로 학습이 되고, 더 깊은 층은 더 고차원 문제를 해결하는데 집중할 수 있다.

3. 층을 깊게 하면 정보를 계층적으로 전달할 수 있다.

  • 예를 들어 에지를 추출한 층의 다음 층은 에지 정보를 쓸 수 있고, 더 고도의 패턴을 효과적으로 학습하리라 기대할 수 있다.

딥러닝의 초기 역사

  • 딥러닝이 큰 주목을 받게 된 것은 ILSVRC(ImageNet Large Scale Visual Recognition Challenge) 2012 대회이다.
  • 그 해의 대회에서 딥러닝에 기초한 기법, 일명 AlexNet이 압도적인 성적으로 우승하며 이미지 인식에 대한 인식을 뒤흔들었다.

이미지넷

  • 이미지넷은 100만장이 넘는 이미지를 담고 있는 데이터셋이다.
  • 여러 시험 항목이 있는데 그중 하나가 분류이다.

  • AlexNet 이후 딥러닝 모델이 꾸준히 등장하였고 사람의 수준을 넘어섰다.

VGG

  • VGG는 합성곱 계층과 풀링 계층으로 구성되는 기본적인 CNN 구조이다. 모두 16층으로 심화한게 특징이다.
  • 주목할 점은 3x3의 작은 필터를 사용한 합성곱 계층을 연속적으로 거친다는 것이다.
  • 그림에서 보듯 합성곱 계층을 2~4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 처리를 반복한다.

GoogLeNet

  • GoogLeNet에는 가로 방향에 ‘폭’이 있다. 이를 인셉션 구조라 한다.

  • 인셉션 구조는 크기가 다른 필터(와 풀링)을 여러 개 적용하여 그 결과를 결합한다. 이 인셉션 구조를 하나의 빌딩 블록으로 사용하는 것이 특징이다.
  • 또한 1X1 크기의 필터를 사용한 합성곱 계층을 많은 곳에서 사용한다. 1X1 필터는 채널 쪽으로 크기를 줄이는 것으로, 매개변수 제거와 고속 처리에 기여한다.

ResNet

  • ResNet(residual network)는 MS에서 개발한 네트워크로 지금까지보다 층을 더 깊게 할 수 있는 특별한 장치를 가지고 있다.
  • 딥러닝에서는 층이 지나치게 깊으면 학습이 잘 되지 않고 오히려 성능이 떨어지는 문제가 있었는데 이를 해결하기 위해 스킵 연결(Skip Connection)을 도입했다.

  • 입력 신호를 그대로 흘려주기 때문에 역전파 시에 기울기가 작아지거나 지나치게 커질 걱정 없이 앞 층에 ‘의미 있는 기울기’가 전해지리라 기대할 수 있다.

  • 위 그림과 같이 ResNet은 합성곱 계층을 2개 층마다 건너뛰면서 층을 깊게 한다. 실험에서는 150층 이상으로 해도 정확도가 오르는 모습이 확인되었다.

더 빠르게(딥러닝 고속화)

  • 딥러닝 프레임워크 대부분은 GPU(Graphics Processing Unit)을 활용한다.
  • GPU는 병렬 수치 연산을 고속으로 처리할 수 있으니 CNN에서 필요한 단일 곱셈-누산 연산등을 효과적으로 계산할 수 있다.
  • GPU는 주로 엔비디아와 AMD 두 회사가 제공한다. 엔비디아는 CUDA, cuDNN 등의 라이브러리를 제공하여 딥러닝에 최적화된 함수를 사요 가능하다.

분산학습

  • 딥러닝 계산을 더욱 고속화하고자 다수의 GPU와 기기로 계산을 분산하기도 한다.
  • 이 부분에 관해선 책 내용은 너무 옛날 얘기라 딱히 적을 게 없다…

연산 정밀도와 비트 줄이기

  • 계산 능력 외에도 메모리 용량과 버스 대역폭 등이 딥러닝 고속화에 병목이 될 수 있다.
  • 딥러닝에서는 높은 수치 정밀도(수치를 몇 비트로 표현하느냐)를 요구하지 않는다. 이는 신경망의 견고성에 따른 특징이다.
  • 딥러닝은 half-precision(16비트)로도 학습에 문제가 없다는 것이 알려졌다.

딥러닝의 활용

  • 이미지 속에 담긴 사물의 위치와 종류(클래스)를 알아내는 ‘사물 검출’
    • Faster R-CNN이 대표적

  • 분할(Segmentation)
    • 분할이란 이미지를 픽셀 수준에서 분류하는 문제이다.
    • 아래 그림과 같이 픽셀 단위로 객체마다 채색된 지도 데이터를 사용해서 학습한다. 추론할 때 입력 이미지의 모든 픽셀을 분류한다.

이미지 세그멘테이션 예시

  • 이 방법을 구현하는 것의 가장 단순한 방법은 모든 픽셀 각각을 추론하는 것이다.
  • 예를 들어 어떤 직사각형 영역의 중심 픽셀의 클래스를 분류하는 신경망을 만들어서, 모든 픽셀을 대상으로 하나씩 추론 작업을 진행한다. 이런 식으로 하면 픽셀의 수만큼 forward 해야하므로 시간이 많이 소요된다.
  • 이런 낭비를 줄여주는 기법으로 FCN(Full Convolutional network)가 고안되었다.
  • 이는 단 한번의 forward 처리로 모든 픽셀의 클래스를 분류해주는 기법이다.

FCN 예시

  • 위 그림에서 보듯 FCN에서는 마지막에 공간 크기를 확대하는 처리를 도입했다.
  • 이 확대처리로 인해 줄어든 중간 데이터를 입력 이미지와 같은 크기까지 단번에 확대 할 수 있다.
  • 이 처리는 이중 선형 보간에 의한 선형확대이다. FCN에서는 이 선형 확대를 역합성곱 연산으로 구현해낸다.

딥러닝의 미래

  • 이 책은 너무 옛날에 나온 책이라... 이 책에서 말하는 미래는 도달한지 오래..
  • 이미지 스타일 화풍 변환

  • 이미지 생성
    • 책에서는 DCGAN 등을 소개한다.
    • 2024년인 지금은 Diffusion 모델이 대세이다..

자율주행

  • SegNet 등으로 주변 환경 인식

Deep Q-Network(강화학습)

  • DQN이 적용된 알파고 등..
  • 이 책이 나오고 8년이 지난 지금, 밑딥 시리즈 4가 나왔고 메인 주제가 강화학습이다 ㄷㄷ

정리

  • 수많은 문제에서 신경망을 더 깊게 하여 성능을 개선할 수 있다.
  • 이미지 인식 기술 대회인 ILSVRC에서 최근 딥러닝 기반 기법이 상위권을 독점하고 있다(었다)
  • 유명한 신경망으로는 VGG, GoogLeNet, ResNet 등
  • GPU와 분산학습, 비트 정밀도 감소 등으로 딥러닝 고속화 가능
  • 딥러닝은 사물 인식 뿐 아니라 사물 검출과 분할에도 이용 가능
  • 딥러닝의 응용 분야로는 사진의 캡션 생성, 이미지 생성, 강화학습 등이 있다(NLP는 아예 언급도 안하네;; Transformer 나오기 전이라 그런가)