본 글은 '밑바닥부터 시작하는 딥러닝' 책을 참조하여 정리한 요약본입니다.
혹여나 제가 잘못 이해하고 있다면 댓글로 알려주시면 감사하겠습니다.
- Deep Learning : 층을 깊게 한 심층 신경망 (Deep Neural Network)
- Deep Neural Network는 hidden layer (은닉층)을 많이 쌓아 parameter (매개변수)를 늘리는 방식으로 모델의 표현력을 높인다.
- 매개변수를 훈련할 충분한 학습 데이터를 확보하지 않으면 모델의 성능을 저해하는 overfitting (과적합) 문제가 상대적으로 더 쉽게 발생한다.
과적합 : 모델이 훈련 데이터에만 지나치게 적응해 테스트 데이터 또는 새로운 데이터에는 제대로 반응하지 못하는 현상
- 하지만 양질의 데이터를 대량 확보하는 데엔 많은 비용이 든다. 해결 방법은?
1. 정확도를 높이는 방법
- Data Augmentation (데이터 확장)
- 입력 이미지 (훈련 이미지)를 알고리즘을 동원해 ‘인위적’으로 확장
- 입력 이미지를 회전하거나 세로로 이동하는 등 미세한 변화를 주어 이미지의 개수를 늘림
- 이 외에도 crop, flip, 밝기 등의 외형 변화, 확대/축소 등의 스케일 변화 등훈련 이미지의 개수를 늘릴 수 있으면 딥러닝의 인식 수준을 개선 할 수 있음
https://www.kaggle.com/jdparsons/gpt-2-fake-real-disasters-data-augmentation
- 입력 이미지 (훈련 이미지)를 알고리즘을 동원해 ‘인위적’으로 확장
- 층을 깊게 하는 것
- 층을 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같은 (혹은 그 이상) 수준의 표현력을 달성할 수 있음
- 층을 깊게 함으로써 학습 데이터의 양을 줄여 학습을 고속으로 수행할 수 있음
- 층을 깊게 하면 정보를 계층적으로 분해할 수 있고, 전달할 수 있음
- 층을 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같은 (혹은 그 이상) 수준의 표현력을 달성할 수 있음
2. 딥러닝 모델
- VGG 16 (출처 : https://bskyvision.com/504)
- Conv 계층과 Pooling 계층으로 구성되는 기본적인 CNN
https://neurohive.io/en/popular-networks/vgg16/ - 첫 번째 층 : 64개의 $3 \times 3 \times 3$ 필터커널로 입력 이미지를 convolution하면 64장의 $224 \times 224$ 특성맵들 ($224 \times 224 \times 64$)이 생성된 후 활성화 시키기 위해 ReLU 함수를 적용
- 두 번째 층 : 64개의 $3 \times 3 \times 64$ 필터커널로 특성맵을 convolution하면 결과적으로 64장의 $224 \times 224$ 특성맵들 ($224 \times 224 \times 64$)이 생성된다. 그 다음 $2 \times 2$ max pooling을 stride 2로 적용함으로 특성맵의 사이즈를 $112 \times 112 \times 64$로 줄임
- Conv 계층을 연속으로 Pooling 계층을 두어 크기를 절반으로 줄이는 처리 반복
- 마지막엔 Fully Connected 계층을 통과시킨 출력 값들을 softmax 함수로 활성화
- 1000개의 뉴런으로 구성되었다는 것 = 1000개의 클래스로 분류하는 목적으로 만들어진 네트워크
- Conv 계층과 Pooling 계층으로 구성되는 기본적인 CNN
- GoogLeNet (출처 : https://bskyvision.com/539)
- GoogLeNet은 세로 방향 깊이 뿐 아니라 가로 방향도 깊다는 점이 특징
https://bskyvision.com/539 - 인셉션 구조 : 크기가 다른 필터(와 풀링)을 여러 개 적용하여 그 결과를 결합
- $1 \times 1$ Convolution : 특성맵 개수를 줄여 매개변수 제거와 고속 처리에 기여
https://bskyvision.com/539
- GoogLeNet은 세로 방향 깊이 뿐 아니라 가로 방향도 깊다는 점이 특징
- ResNet
- 딥러닝의 학습에서는 층이 지나치게 깊으면 학습이 잘 되지 않고, 오히려 성능이 떨어지는 경우도 많음
- ResNet은 위 문제를 해결 하기 위해 Skip Connection을 도입
- Skip Connection : 입력 데이터를 Conv 계층을 건너뛰어 출력에 바로 더하는 구조
- 입력 데이터를 그대로 흘리는 것
- 역전파 때도 상류의 기울기를 그대로 하류로 보냄
- 층을 깊게 할수록 기울기가 작아지는 소실 문제를 해결
3. 딥러닝의 고속화
- AlexNet을 예로 들 때, 대부분의 시간을 합성곱 계층에서 소요 (GPU에서는 전체의 95%, CPU에서는 전체의 89%)
→ 합성곱 계층에서 이뤄지는 연산을 고속으로 하는 것이 중요 - 딥러닝은 대량의 단일 곱셈-누산 (또는 큰 행렬의 곱) 수행
→ GPU는 대량 병렬 연산에 강함 (반대로 CPU는 연속적인 복잡한 계산에 용이) - 딥러닝 학습을 수평 확장 (scale out)하자는 아이디어
→ 분산 학습 - 메모리 용량 (대량의 가중치 매개변수와 중간 데이터를 메모리에 저장),
버스 대역폭 (GPU의 버스를 흐느는 데이터가 많음)이 딥러닝 고속화에 병목이 됨
→ 데이터 비트 수를 최소로 만드는 것
4. 딥러닝의 활용
- 사물 검출 : 이미지 속에 담긴 사물의 위치와 종류 (클래스)를 알아내는 기술
→ CNN 기반의 R-CNN, Faster R-CNNhttps://yeomko.tistory.com/13 - 분할 (Segmentation) : 이미지를 픽셀 수준에서 분류하는 문제. 픽셀 단위로 객체마다 채색된 supervised data를 사용해 학습한다.
→ FCN (Fully Convolutional Network) : 한번의 forward 처리로 모든 픽셀의 클래스를 분류 (https://gaussian37.github.io/vision-segmentation-fcn/)https://modulabs-biomedical.github.io/FCN - 일반적으로 CNN이 Fully-Connected layer을 이용하는 반면, FCN은 Fully-Connected layer을 같은 기능을 하는 Convolution layer로 바꾼다. 따라서 FCN은 합성곱 계층만으로 구성된 네트워크가 된다.
- FCN의 마지막에 수행하는 확대는 이중선형 보간 (Bilinear Interpolation)에 의한 선형 확대이고, 역합성곱 (deconvolution)연산으로 구현한다.
- 사진 캡션 생성 : 컴퓨터 비전과 자연어를 융합
→ NIC (Neural Image Caption) = 심층 CNN + RNN (Recurrent Neural Network)https://wewinserv.tistory.com/78 - NIC는 CNN으로 사진에서 특징을 추출하고 RNN에게 넘김
- RNN은 CNN이 추출한 특징을 초기값으로 해서 텍스트를 순환적으로 생성
(RNN은 과거의 정보를 기억하면서 동작하는 특징이 있음)
- 이미지 생성 : 아무런 입력이미지 없이도 새로운 이미지를 그려냄 (Unsupervised Learning)
→ DCGAN (Deep Convolutional Generative Adversarial Network)https://www.researchgate.net/figure/Deep-convolutional-generative-adversarial-networks-DCGAN-for-generative-model-of-BF-NSP_fig3_331282441 - 생성자(Generator)와 식별자(Discriminator)로 불리는 2개의 신경망 이용
- 생성자가 이미지를 생성하고, 식별자는 그것이 진짜인지를 판정 (생성자가 생성한 이미지인지, 실제로 촬영한 이미지인지)
- 자율 주행 : 주위 환경을 인식하는 기술
→ CNN기반의 SegNethttps://eremo2002.tistory.com/120 - Deep Q-Network (강화학습) : 에이전트라는 것이 환경에 맞게 행동을 선택하고, 그 행동에 의해서 환경이 변화하고 에이전트는 보상을 얻음. (출처 : https://sumniya.tistory.com/18)
https://www.kdnuggets.com/2016/11/deep-learning-research-review-reinforcement-learning.html/2 - 강화학습 목적 : 더 나은 보상을 받는 쪽으로 에이전트의 행동 지침을 바로잡는 것
- 강화학습 목적 : 더 나은 보상을 받는 쪽으로 에이전트의 행동 지침을 바로잡는 것
'ML 관련 서적 개념요약 > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
[Chapter 7] 합성곱 신경망 (CNN) (0) | 2021.05.24 |
---|---|
[Chapter 5] 오차역전파법 (Back Propagation) (0) | 2021.05.24 |
댓글