파일명 | 파일 용도 | 관련 절 | 페이지 |
---|---|---|---|
apply_filter.py | cactus_gray.png 파일에 필터를 적용합니다. | ||
gradient_check.py | SimpleCovNet이 기울기를 올바로 계산하는지 확인합니다. | ||
params.pkl | 미리 학습된 가중치 값들입니다. | ||
simple_convnet.py | “Convolution-ReLU-Pooling-Affine-ReLU-Affine-Softmax” 순으로 흐르는 단순한 합성곱 신경망(CNN)입니다. | 7.5 CNN 구현하기 | 251 |
train_convnet.py | SimpleConvNet으로 MNIST 데이터셋을 학습합니다. | 7.5 CNN 구현하기 | 254 |
visualize_filter.py | 합성곱 1번째 층의 가중치를 학습 전과 후로 나눠 시각화해봅니다. 이미 학습된 가중치 값(params.pkl)을 읽어서 사용하므로 학습 과정은 생략됩니다. | 7.6.1 1번째 층의 가중치 시각화하기 | 254 |
이번 장의 주제는 합성곱 신경망(convolutional neural network, CNN)입니다. CNN은 이미지 인식과 음성 인식 등 다양한 곳에서 사용되는데, 특히 이미지 인식 분야에서 딥러닝을 활용한 기법은 거의 다 CNN을 기초로 하죠. 이번 장에서는 CNN의 메커니즘을 자세히 설명하고 이를 파이썬으로 구현해보겠습니다.
옮긴이_ 합성곱은 공학과 물리학에서 널리 쓰이는 수학적 개념으로, 간단히 정의해보면 다음과 같습니다. “두 함수 중 하나를 반전(reverse), 이동(shift)시켜가며 나머지 함수와의 곱을 연이어 적분한다.” 합성곱 신경망을 영어 발음 그대로 ‘컨벌루션 신경망’으로도 많이 씁니다만, 위 정의와 이번 장에서 설명할 동작 원리를 이해하고 나면 ‘합성곱 신경망’이란 용어가 더 직관적으로 다가올 수도 있을 겁니다.
7.1 전체 구조
7.2 합성곱 계층
__7.2.1 완전연결 계층의 문제점
__7.2.2 합성곱 연산
__7.2.3 패딩
__7.2.4 스트라이드
__7.2.5 3차원 데이터의 합성곱 연산
__7.2.6 블록으로 생각하기
__7.2.7 배치 처리
7.3 풀링 계층
__7.3.1 풀링 계층의 특징
7.4 합성곱/풀링 계층 구현하기
__7.4.1 4차원 배열
__7.4.2 im2col로 데이터 전개하기
__7.4.3 합성곱 계층 구현하기
__7.4.4 풀링 계층 구현하기
7.5 CNN 구현하기
7.6 CNN 시각화하기
__7.6.1 1번째 층의 가중치 시각화하기
__7.6.2 층 깊이에 따른 추출 정보 변화
7.7 대표적인 CNN
__7.7.1 LeNet
__7.7.2 AlexNet
- CNN은 지금까지의 완전연결 계층 네트워크에 합성곱 계층과 풀링 계층을 새로 추가한다.
- 합성곱 계층과 풀링 계층은 im2col (이미지를 행렬로 전개하는 함수)을 이용하면 간단하고 효율적으로 구현할 수 있다.
- CNN을 시각화해보면 계층이 깊어질수록 고급 정보가 추출되는 모습을 확인할 수 있다.
- 대표적인 CNN에는 LeNet과 AlexNet이 있다.
- 딥러닝의 발전에는 빅 데이터와 GPU가 크게 기여했다.