[밑딥] 8장. 딥러닝

Speedwell🍀·2022년 7월 25일
0


딥러닝 : 층을 깊게 한 심층 신경망
➡ 심층 신경망은 지금까지 설명한 신경망을 바탕으로 뒷단에 층을 추가하기만 하면 만들 수 있지만, 커다란 문제들이 있다.


이번 장에서 배우는 것

  • 딥러닝의 특징, 과제, 가능성
  • 오늘날의 첨단 딥러닝




1. 더 깊게

그동안 신경망에 관해 다음과 같은 것들을 배웠다.

  • 신경망을 구성하는 다양한 계층
  • 학습에 효과적인 기술
  • 영상 분야에 특히 유효한 CNN
  • 매개변수 최적화 기법
  • 등등

➡ 모두 딥러닝에서 중요한 기술!

📍 그동안 배운 기술을 집약하고 심층 신경망을 만들어 MNIST 데이터셋의 손글씨 숫자 인식을 해보자!



1-1) 손글씨 숫자를 인식하는 심층 CNN

아래와 같이 구성된 CNN을 만들어보자! (VGG 신경망 참고)

위의 신경망의 특징

  • 3x3의 작은 필터를 사용한 합성곱 계층

    • 층이 깊어지면서 채널 수가 더 늘어남
      • 합성곱 계층의 채널 수는 앞 계층에서부터 순서대로 16, 16, 32, 32, 64, 64로 늘어감
  • 풀링 계층을 추가하여 중간 데이터의 공간 크기를 점차 줄임

  • 마지막 단의 완전연결 계층 뒤에 드롭아웃 계층 사용

  • 활성화 함수는 ReLU

  • Adam을 사용해 최적화 (가중치 매개변수 갱신)

  • 가중치 초깃값은 He의 초깃값


신경망을 구현한 소스 코드 - ch08/deep_convnet.py
훈련용 코드 - ch08/train_deepnet.py
학습된 가중치 매개변수 - ch08/deep_convnet_params.pkl





1-2) 정확도를 더 높이려면

앙상블 학습, 학습률 감소, 데이터 확장 등이 정확도 향상에 도움을 준다.
➡ 이 중 손쉬운 방법이면서도 정확도 개선에 아주 효과적인 데이터 확장에 대해 알아보자!

데이터 확장 (Data augmentation)

: 입력 이미지(훈련 이미지)를 알고리즘을 동원해 '인위적'으로 확장

📌 데이터가 적을 때 특히 효과적!
데이터 확장을 동원해 훈련 이미지의 개수를 늘릴 수 있다면 딥러닝의 인식 수준 개선 가능!

방법

  • 회전
  • 이동
  • crop
  • flip (이미지의 대칭성을 고려하지 않아도 되는 경우에만)
  • 밝기 등의 외형 변화
  • 확대/축소 등의 스케일 변화




1-3) '층을 깊게 하는것'의 중요성

ILSVRC로 대표되는 대규모 이미지 인식 대회의 결과를 보면 층의 깊이에 비례해 정확도가 좋아지는 것을 볼 수 있다.

층을 깊게 할 때의 이점

1. 신경망의 매개변수 수가 줄어든다.

📌 매개변수는 층을 반복할수록 적어진다. 그 개수의 차이는 층이 깊어질수록 커진다.

합성곱 연산에서의 필터 크기에 주목해 생각해보면 된다.
❗ 주목할 점은 출력 데이터의 각 노드가 입력 데이터의 어느 영역으로부터 계산되었느냐는 것


5x5의 합성곱 연산 1회는 3x3의 합성곱 연산을 2회 수행하여 대체할 수 있다.
전자의 매개변수 수는 25(5x5)개인 반면, 후자는 총 18(2x3x3)개

작은 필터를 겹쳐 신경망을 깊게 할 때의 장점은 매개변수 수를 줄여 넓은 수용 영역(receptive field)을 소화할 수 있다는 것
수용 영역: 뉴런에 변화를 일으키는 국소적인 공간 영역

게다가 층을 거듭하면서 ReLU 등의 활성화 함수를 합성곱 계층 사이에 끼움으로써 신경망의 표현력이 개선된다.
➡ 이는 활성화 함수가 신경망에 '비선형'힘을 가하고, 비선형 함수가 겹치면서 더 복잡한 것도 표현할 수 있게 되기 때문


2. 학습의 효율성

층을 깊게 함으로써 학습 데이터의 양을 줄여 학습을 고속으로 수행할 수 있다.

7장 6절 CNN 시각화하기에서 CNN의 합성곱 계층이 정보를 계층적으로 추출하고 있다고 했다. 앞단의 합성곱 계층에서는 에지 등의 단순한 패턴에 뉴런이 반응하고 층이 깊어지면서 텍스처와 사물의 일부와 같이 점차 더 복잡한 것에 반응한다.

ex) 얕은 신경망에서 '개'를 인식하려면 합성곱 계층은 개의 특징 대부분을 한 번에 '이해'해야 한다. 따라서 개의 특징을 이해하려면 변화가 풍부하고 많은 데이터가 필요하고, 결과적으로 학습 시간이 오래 걸린다.

그러나 신경망을 깊게 하면 학습해야 할 문제를 계층적으로 분해할 수 있다. 각 층이 학습해야 할 문제를 더 단순한 문제로 대체할 수 있다는 것.

ex) 처음 층은 에지 학습에 전념하여 적은 학습 데이터로 효율적으로 학습 가능. 개가 등장하는 이미지보다 에지를 포함한 이미지는 많고, 에지의 패턴은 개라는 패턴보다 구조가 훨씬 간단하기 때문.


3. 정보를 계층적으로 전달할 수 있다.

층을 깊이 함으로써 각 층이 학습해야 할 문제를 '풀기 쉬운 단순한 문제'로 분해할 수 있어 효율적으로 학습할 것!

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





2. 딥러닝의 초기 역사

2-1) VGG

VGG는 합성곱 계층과 풀링 계층으로 구성되는 '기본적'인 CNN이다.
다만, 비중 있는 층(합성곱 계층, 완전연결 계층)을 모두 16층/19층으로 심화한 게 특징 (층의 깊이에 따라 VGG16, VGG19로 구분)

📌VGG에서 주목할 점
: 3x3의 작은 필터를 사용한 합성곱 계층을 연속으로 거친다.

위의 그림에서 보듯 합성곱 계층을 2~4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 처리를 반복하고, 마지막에 완전연결 계층을 통과시켜 결과를 출력한다.


2-2) GoogLeNet

세로 방향 깊이뿐 아니라 가로 방향도 깊다는 점이 특징이다.
GoogLeNet은 가로 방향에 '폭'이 있는데, 이를 인셉션 구조라 한다.

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

0개의 댓글