딥러닝
: 층을 깊게 한 심층 신경망
➡ 심층 신경망은 지금까지 설명한 신경망을 바탕으로 뒷단에 층을 추가하기만 하면 만들 수 있지만, 커다란 문제들이 있다.
이번 장에서 배우는 것
그동안 신경망에 관해 다음과 같은 것들을 배웠다.
➡ 모두 딥러닝에서 중요한 기술!
📍 그동안 배운 기술을 집약하고 심층 신경망을 만들어 MNIST 데이터셋의 손글씨 숫자 인식을 해보자!
아래와 같이 구성된 CNN을 만들어보자! (VGG 신경망 참고)
3x3의 작은 필터를 사용한 합성곱 계층
풀링 계층
을 추가하여 중간 데이터의 공간 크기를 점차 줄임
마지막 단의 완전연결 계층 뒤에 드롭아웃
계층 사용
활성화 함수는 ReLU
Adam
을 사용해 최적화 (가중치 매개변수 갱신)
가중치 초깃값은 He의 초깃값
신경망을 구현한 소스 코드 - ch08/deep_convnet.py
훈련용 코드 - ch08/train_deepnet.py
학습된 가중치 매개변수 - ch08/deep_convnet_params.pkl
앙상블 학습
, 학습률 감소
, 데이터 확장
등이 정확도 향상에 도움을 준다.
➡ 이 중 손쉬운 방법이면서도 정확도 개선에 아주 효과적인 데이터 확장
에 대해 알아보자!
: 입력 이미지(훈련 이미지)를 알고리즘을 동원해 '인위적'으로 확장
📌 데이터가 적을 때 특히 효과적!
데이터 확장을 동원해 훈련 이미지의 개수를 늘릴 수 있다면 딥러닝의 인식 수준 개선 가능!
방법
ILSVRC로 대표되는 대규모 이미지 인식 대회의 결과를 보면 층의 깊이에 비례해 정확도가 좋아지는 것을 볼 수 있다.
📌 매개변수는 층을 반복할수록 적어진다. 그 개수의 차이는 층이 깊어질수록 커진다.
합성곱 연산에서의 필터 크기
에 주목해 생각해보면 된다.
❗ 주목할 점은 출력 데이터의 각 노드가 입력 데이터의 어느 영역으로부터 계산되었느냐는 것
5x5의 합성곱 연산 1회는 3x3의 합성곱 연산을 2회 수행하여 대체할 수 있다.
전자의 매개변수 수는 25(5x5)개인 반면, 후자는 총 18(2x3x3)개
작은 필터를 겹쳐 신경망을 깊게 할 때의 장점은 매개변수 수를 줄여 넓은
수용 영역(receptive field)
을 소화할 수 있다는 것
수용 영역: 뉴런에 변화를 일으키는 국소적인 공간 영역게다가 층을 거듭하면서 ReLU 등의 활성화 함수를 합성곱 계층 사이에 끼움으로써 신경망의 표현력이 개선된다.
➡ 이는 활성화 함수가 신경망에 '비선형'힘을 가하고, 비선형 함수가 겹치면서 더 복잡한 것도 표현할 수 있게 되기 때문
층을 깊게 함으로써 학습 데이터의 양을 줄여 학습을 고속으로 수행할 수 있다.
7장 6절 CNN 시각화하기
에서 CNN의 합성곱 계층이 정보를 계층적으로 추출하고 있다고 했다. 앞단의 합성곱 계층에서는 에지 등의 단순한 패턴에 뉴런이 반응하고 층이 깊어지면서 텍스처와 사물의 일부와 같이 점차 더 복잡한 것에 반응한다.
ex) 얕은 신경망에서 '개'를 인식하려면 합성곱 계층은 개의 특징 대부분을 한 번에 '이해'해야 한다. 따라서 개의 특징을 이해하려면 변화가 풍부하고 많은 데이터가 필요하고, 결과적으로 학습 시간이 오래 걸린다.
그러나 신경망을 깊게 하면 학습해야 할 문제를 계층적으로 분해할 수 있다. 각 층이 학습해야 할 문제를 더 단순한 문제로 대체할 수 있다는 것.
ex) 처음 층은 에지 학습에 전념하여 적은 학습 데이터로 효율적으로 학습 가능. 개가 등장하는 이미지보다 에지를 포함한 이미지는 많고, 에지의 패턴은 개라는 패턴보다 구조가 훨씬 간단하기 때문.
층을 깊이 함으로써 각 층이 학습해야 할 문제를 '풀기 쉬운 단순한 문제'로 분해할 수 있어 효율적으로 학습할 것!
ex) 에지를 추출한 층의 다음 층은 에지 정보를 쓸 수 있고, 더 고도의 패턴을 효과적으로 학습하리라 기대.
VGG는 합성곱 계층과 풀링 계층으로 구성되는 '기본적'인 CNN이다.
다만, 비중 있는 층(합성곱 계층, 완전연결 계층)을 모두 16층/19층으로 심화한 게 특징 (층의 깊이에 따라 VGG16, VGG19로 구분)
📌VGG에서 주목할 점
: 3x3의 작은 필터를 사용한 합성곱 계층을 연속으로 거친다.
위의 그림에서 보듯 합성곱 계층을 2~4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 처리를 반복하고, 마지막에 완전연결 계층을 통과시켜 결과를 출력한다.
세로 방향 깊이뿐 아니라 가로 방향도 깊다는 점이 특징이다.
GoogLeNet은 가로 방향에 '폭'이 있는데, 이를 인셉션 구조라 한다.
인셉션 구조는 위의 그림과 같이 크기가 다른 필터(와 풀링)를 여러 개 적용하여 그 결과를 결합
이 인셉션 구조를 하나의 빌딩 블록(구성요소)으로 사용하는 것이 특징
1x1 크기의 필터를 사용한 합성곱 계층을 많은 곳에서 사용
➡ 이 1x1의 합성곱 연산은 채널 쪽으로 크기를 줄이는 것으로, 매개변수 제거와 고속 처리에 기여