딥러닝은 층을 깊게 한 심층 신경망이다.
여기서 사용하는 합성곱 계층은 모두 3x3크기의 작은 필터로, 층이 깊어지면서 채널 수가 더 늘어나는 것이 특징이다.
합성곱 계층의 채널수는 앞 계층에서부터 순서대로 16, 16, 32, 32, 64, 64로 늘어난다.
또 그림과 같이 풀링 계층을 추가하여 중간 데이터의 공간 크기를 점차 줄여간다.
마지막 단의 완전연결 계층에서는 드롭아웃 계층을 사용한다.
이외의 것들을 합쳐 정리하면 이 신경망의 특징은 다음과 같다.
- 3x3의 작은 필터를 사용한 합성곱 계층
- 활성화 함수는 ReLU
- 완전연결 계층 뒤에 드롭아웃 계층 사용
- Adam을 사용해 최적화
- 가중치 초기값은 He 초기값
이 신경망이 잘못 인식할 확률은 겨우 0.62%이다. 실제로 어떤 이미지를 인식하지 못했는지 살펴보자.
이번의 심층 CNN은 정확도가 높고, 잘못 인식한 이미지들도 인간과 비슷한 인식 오류를 발생시키고 있다.
심층 CNN의 잠재력이 크다는걸 느낄 수 있다.
정확도를 더 높이려면
<What is the class of this image?> 사이트는 다양한 데이터셋을 대상으로 그동안 논문 등에서 발표한 기법들의 정확도 순위를 정리해두었다.
순위를 보면 Neural Networks나 Deep, Convolutional이라는 키워드가 돋보인다.
상위권은 대부분 CNN을 기초로 한 기법들이 점령했다.
MNIST 데이터셋에 대해서는 층을 아주 깊게 하지 않고도 최고 수준의 결과가 나온다. 손글씨 숫자라는 문제가 비교적 단순해서 신경망의 표현력을 극한까지 높일 필요가 없기 때문이다. 그래서 층을 깊게 해도 혜택이 적다고 할 수 있다.
반면, 대규모 일반 사물 인식에서는 문제가 훨씬 복잡해지므로 층을 깊게 하면 정확도를 크게 끌어올릴 수 있다.
상위 기법들을 참고하면 정확도를 더 높일 수 있는 기술이나 힌트를 발견할 수 있다.
예를 들어 앙상블 학습, 학습률 감소, 데이터 확장 등이 정확도 향상에 도움이 된다.
데이터 확장(data augmentation)은 입력(훈련) 이미지를 알고리즘을 통해 인위적으로 확장한다.
아래 그림과 같이 입력 이미지를 회전하거나 세로로 이동하는 등 미세한 변화를 주어 이미지의 개수를 늘리는 것이다. 이는 데이터가 몇개 없을 때 특히 효과적인 수단이다.
이외에도 이미지 일부를 잘라내는 crop이나 좌우를 뒤집는 flip 등이 있다.
깊게 하는 이유
층을 깊게 하는 중요성에 대해서, 이를 뒷받침하는 데이터와 설명을 몇가지 소개해본다.
층을 깊게 하는 것의 중요성은 ILSVRC로 대표되는 대규모 이미지 인식 대회의 결과에서 파악할 수 있다.
층을 깊게 할 경우 깊지 않은 경우보다 적은 매개변수로 같은(혹은 그 이상) 수준의 표현력을 달성할 수 있다.
합성곱 연산에서의 필터 크기에 주목해 생각해보자. 5x5 필터로 구성된 합성곱 계층의 예를 보자.
여기서 주목할 점은 출력 데이터의 각 노드가 입력 데이터의 어느 영역으로부터 계산되었느냐는 것이다.
위의 그림의 예에서는 각각의 출력 노트는 입력 데이터의 5x5 크기 영역에서 계산된다.
이어서 아래 그림처럼 3x3의 합성곱 연산을 2회 반복하는 경우를 생각해보자.
이 경우 출력 노트 하나는 중간 데이터의 3x3 영역에서 계산된다.
전자의 매개변수 수가 25개(5x5)인 반면, 후자는 18개(2x3x3)이며, 매개변수 수는 층을 반복할수록 적어진다.
그리고 그 개수의 차이는 층이 깊어질수록 더욱 커진다.
딥러닝의 초기 역사
딥러닝이 지금처럼 큰 주목을 받게 된 계기는 이미지 인식 기술을 겨루는 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)의 2012년 대회이다.
이 대회에서 AlexNet이 압도적인 성적으로 우승하면서 그동안의 이미지 인식에 대한 접근법을 뿌리부터 뒤흔들었다.
이미지넷
ImageNet은 100만장이 넘는 이미지를 담고 있는 데이터셋이다.
아래 그림과 같이 다양한 종류의 이미지를 포함하여 각 이미지에는 레이블(클래스 이름)이 붙어 있다.
ILSVRC 대회에는 시험 항목이 몇가지 있는데, 그중 하나가 분류(classfication)이다. 분류 부문에서 1000개의 클래스를 제대로 분류하는지를 겨룬다.
아래 그림은 2010년부터 최근까지 분류 부분 우승팀의 성적이다.
top-5 error를 막대 그래프로 나타냈다. 확률이 가장 높다고 생각하는 후보 클래스 5개 안에 정답이 포함되지 않은, 즉 5개 모두가 틀린 비율이다.
주목할 점은 2012년 이후 선두는 항상 딥러닝 방식이라는 것이다.
2015년에는 150층이 넘는 심층 신경망인 ResNet이 오류율을 3.5%까지 낮췄다. 이 결과는 일반적인 인간의 인식 능력을 넘어섰다고 한다.
VGG
VGG는 합성곱 계층과 풀링 계층으로 구성되는 기본적인 CNN이다.
아래 그림과 같이 비중 있는 층(합성곱 계층, 완전연결 계층)을 모두 16(또는 19)층으로 심화한게 특징이다.
층의 깊이에 따라 VGG16과 VGG19로 구분하기도 한다.
VGG에서 주목할 점은 3x3의 작은 필터를 사용한 합성곱 계층을 연속으로 거친다는 것이다.
그림에서 보듯 합성곱 계층을 2~4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 처리를 반복한다.
그리고 마지막에는 완전연결 계층을 통과시켜 결과를 출력한다.
GoogLeNet
GoogLeNet의 구성은 다음 그림과 같다. 그림의 사각형이 합성곱 계층과 풀링 계층 등의 계층을 나타낸다.
그림을 보면 구성이 복잡해 보이지만, 기본적으로는 CNN과 다르지 않다.
단, 세로 방향 깊이뿐 아니라 가로 방향도 깊이가 있다는 것이 특징이다.
GoogLeNet에는 가로 방향에 폭이 있다. 이를 인셉션 구조라 하며, 다음 그림과 같다.
인셉션 구조는 크기가 다른 필터(와 풀링)을 여러개 적용하여 그 결과를 결합한다.
이 인셉션 구조를 하나의 빌딩블록(구성요소)로 사용하는 것이 GoogLeNet의 특징이다.
1x1크기의 필터를 사용한 합성곱 계층을 많은 곳에서 사용한다. 이 1x1의 합성곱 연산은 채널 쪽으로 크기를 줄이는 것으로, 매개변수 제거와 고속 처리에 기여한다.
ResNet
ResNet(Residual Network)은 마이크로소프트 팀이 개발한 네트워크이다.
층을 깊게 하는 것이 성능 향상에 중요하다는 건 알고 있다.
그러나 딥러닝의 학습에서는 층이 지나치게 깊으면 학습이 잘 되지 않고, 오히려 성능이 떨어지는 경우도 많다.
ResNet에서는 그런 문제를 해결하기 위해 스킵 연결(skip connection)을 도입한다.
이 구조가 층의 깊이에 비례해 성능을 향상시킬 수 있게 한 핵심이다. 물론 층을 깊게 하는 데는 여전히 한계가 있다.
스킵 연결이란 아래 그림과 같이 입력 데이터를 합성곱 계층을 건너뛰어 출력에 바로 더하는 구조를 말한다.
입력 x를 연속한 두 합성곱 계층을 건너뛰어 출력에 바로 연결한다.
이 단축경로가 없었다면 두 합성곱 계층의 출력이 F(x)가 되나, 스킵 연결로 인해 F(x) + x가 되는게 핵심이다.
스킵 연결은 층이 깊어져도 학습을 효율적으로 할 수 있도록 해주는데, 이는 역전파때 스킵 연결이 신호 감쇠를 막아주기 때문이다.
스킵 연결은 입력 데이터를 그대로 흘리는 것으로, 역전파 때도 상류의 기울기를 그대로 하류로 보낸다.
핵심은 상류의 기울기에 아무런 수정도 가하지 않고 '그대로' 흘린다는 것이다.
층을 깊게 할수록 기울기가 작아지는 소실 문제를 이 스킵 연결이 줄여주는 것이다.
ResNet은 먼저 설명한 VGG 신경망을 기반으로 스킵 연결을 도입하여 층을 깊게 했다. 결과는 다음과 같다.
ResNet은 합성곱 계층을 2개 층마다 건너뛰면서 층을 깊게 한다. 실험결과 150층으로 해도 정확도가 오르는 모습을 확인할 수 있었다.
더 빠르게(딥러닝 고속화)
빅데이터와 네트워크의 발전으로 딥러닝에서는 대량의 연산을 수행해야 한다.
과거에는 주로 CPU가 계산을 담당했으나, CPU만으로 딥러닝을 처리하기는 부족한게 현실이다.
실제로 딥러닝 프레임워크, 대부분은 GPU를 활용해 대량의 연산을 고속으로 처리할 수 있다.
최근 프레임워크에서는 학습을 복수의 GPU와 여러 기기로 분산 수행하기 시작했다.
풀어야 할 숙제
딥러닝에서 어떠한 처리에 시간이 소요되는지를 보자. 아래 그림은 AlexNet의 forward처리에서 각 층이 소비하는 시간을 원 그래프로 보여준다.
그림에서 보듯 AlexNet에서는 오랜 시간을 합성곱 계층에서 소요한다.
실제로 합성곱 계층의 처리 시간을 다 더하면 GPU에서는 전체의 95%, CPU에서는 89%까지 달한다.
그래서 합성곱 계층에서 이뤄지는 연산을 어떻게 고속으로 효율적으로 하느냐가 딥러닝의 과제이다.
GPU를 활용한 고속화
GPU는 원래 그래픽 전용 보드에 이용해왔다. 그러나 최근에는 범용 수치 연산에도 이용한다.
GPU는 병렬 수치 연산을 고속으로 처리할 수 있으니, 그 압도적인 힘을 다양한 용도로 활용하자는 것이 GPU 컴퓨팅의 목표이다. GPU로 범용 수치연산을 수행하는 것을 GPU 컴퓨팅이라고 한다.
딥러닝에서는 대량의 단일 곱셉-누산(또는 큰 행렬의 곱)을 수행해야 한다.
아래 그림은 AlexNet의 학습 시간을 CPU와 GPU에서 비교한 결과이다.
cuDNN이라는 딥러닝에 최적화된 라이브러리를 이용하면 더욱 빨라짐을 확인할 수 있다.
GPU는 주로 엔비디아 제품을 쓴다. 엔비디아의 GPU 컴퓨팅용 통합 개발 환경인 CUDA를 사용하기 때문이다.
cuDNN은 CUDA 위에서 동작하는 라이브러리로, 딥러닝에 최적화된 함수 등이 구현되어 있다.
분산 학습
GPU로 딥러닝 연산을 꽤 가속할 수 있지만, 심층 신경망에서는 학습에 며칠 혹은 몇주가 걸리기도 한다.
그리고 지금까지 살펴본 것처럼 딥러닝은 많은 시행착오를 동반한다.
뛰어난 신경망을 만들려면 시험을 수없이 반복해야 하고, 그러려면 1회 학습에 걸리는 시간을 최대한 단축하고 싶다는 요구가 필연적으로 생겨난다. 그래서 딥러닝 학습을 수평 확장(scale out)하자는 아이디어, 즉 분산 학습이 중요해지는 것이다.
최근에는 다수의 GPU와 컴퓨터를 이용한 분산 학습을 지원한 딥러닝 프레임워크들이 나타나고 있다.
그중에서도 구글의 텐서플로와 마이크로소프트의 CNTK(Computational Network Toolkit)은 분산 학습에 역점을 두고 개발하고 있다.
거대한 데이터센터의 저지연 고처리량 네트워크 위에서 이 프레임워크들이 수행하는 분산 학습은 놀라운 효과를 보이고 있다.
7일짜리 작업을 불과 3시간만에 끝낸다는 것으로, 분산 학습의 놀라운 효과를 증명하고 있다.
여기서는 분산 학습의 상세 내용은 다루지 않는다. 이쉽게 해결할 수 없는 어려운 문제는 텐서플로같은 뛰어난 프레임워크에게 맡기는 것이 좋다.
연산 정밀도와 비트 줄이기
계산 능력 외에도 메모리 용량과 버스 대역폭 등이 딥러닝 고속화에 병목이 될 수 있다.
메모리 용량 면에서는 대량의 가중치 매개변수와 중간 데이터를 메모리에 저장해야 한다는 것을 생각해야 한다.
버스 대역폭 면에서는 GPU의 버스를 흐르는 데이터가 많아져 한계를 넘어서면 병목이 된다.
이러한 경우를 고려하면 네트워크로 주고받는 데이터의 비트수는 최소로 만드는 것이 바람직하다.
다행히 딥러닝은 높은 수치 정밀도를 요구하지 않는다. 이는 신경망의 중요한 성질 중 하나로, 신경망의 견고성에 따른 특성이다.
예를 들어 신경망은 입력 이미지에 노이즈가 조금 섞여있어도 출력 결과가 잘 달라지지 않는 강건감을 보여준다.
이런 견고성 덕분에 신경망을 흐르는 데이터를 퇴화시켜도 출력에 주는 영향은 적다.
컴퓨터에서 실수는 표현하는 방식으로 32비트 단정밀도(single-precision)과 64비트 배정밀도(double-precision) 부동소수점 등의 포맷이 있지만, 지금까지의 실험으로는 딥러닝은 16비트 반정밀도(half-precision)만 사용해도 학습에 문제가 없다고 알려져 있다.
실제로 엔비디의 2016년 GPU인 파스칼(Pascal) 아키텍처는 이 포맷을 지원하여, 이제는 반정밀도 부동소수점이 표준적으로 이용되리라 생각한다.
파이썬에서는 일반적으로 64비트 배정밀도 부동소수점 수를 사용한다.
Numpy는 16비트 반정밀도 부동소수점도 지원하며, 이를 사용해도 정확도가 떨어지지 않는 것을 확인할 수 있다.
딥러닝의 활용
지금까지 딥러닝을 활용한 예를 손글씨 숫자 인식이라는 이미지 분류를 중심으로 살펴봤다.
이는 사물 인식의 한 분야다. 그러나 딥러닝은 사물 인식뿐 아니라 온갖 문제에 적용할 수 있다.
이미지, 음성, 자연어 등 수많은 분야에서 딥러닝은 뛰어난 성능을 발휘한다.
사물 검출
사물 검출은 다음과 같이 이미지 속에 담긴 사물의 위치와 종류(클래스)를 알아내는 기술입니다.
사물 검출은 사물 인식보다 어려운 문제이다. 이미지 어딘가에 있을 사물의 위치까지 알아내야 하고, 한 이미지에 여러 사물이 존재할 수도 있다.
CNN을 이용하여 사물 검출을 수행하는 방식은 몇 가지가 있는데, 그중에서도 R-CNN(Regions with Convolutional Neural Network)가 유명하다. 다음은 R-CNN의 처리 흐름이다.
주목할 것은 2,3번이다.
먼저 사물이 위치한 영역을 어떠한 방법으로 찾아내고, 추출한 각 영역에 CNN을 적용하여 클래스를 분류한다.
여기서 이미지를 사각형으로 변형하거나 분류할 때 서포트 벡터 머신(SVM)을 사용하는 등 실제 처리 흐름은 다소 복잡하지만, 큰 틀에서는 이 두가지 처리로 계산된다.
후보 영역 추출에는 컴퓨터 비전 분야에서 발전해온 다양한 기법을 사용할 수 있고, R-CNN논문에서는 Selective Search 깁버을 사용했다.
최근에는 이 후보 영역 추출까지 CNN으로 처리하는 Faster R-CNN 기법도 등장했다.
Faster R-CNN은 모든 일을 하나의 CNN에서 처리하기 때문에 아주 빠르다.
분할
분할(segmentation)이란 이미지를 픽셀 수준에서 분류하는 문제이다.
다음 그림과 같이 픽셀 단위로 객체마다 채색된 지도(supervised)데이터를 사용해 학습한다.
그리고 추론할 때 입력 이미지의 모든 픽셀을 분류한다.
신경망을 이용해 분할하는 가장 단순한 방법은 모든 픽셀 각각을 추론하는 것이다.
예를 들어 어떤 직사각형 영역의 중심 픽셀의 클래스를 분류하는 신경망을 만들어서, 모든 픽셀을 대상으로 하나씩 추론 작업을 실행한다. 이런 식으로 픽셀 수만큼 forward처리를 해야 하며 긴 시간이 걸리게 된다.
이러한 낭비를 줄여주는 기법으로 FCN(Fully Convolutional Network)이 고안되었다. 이는 단 한번의 forward처리로 모든 픽셀의 클래스를 분류해주는 놀라운 기법이다.
FCN을 직역하면 합성곱 계층만으로 구성된 네트워크가 된다.
일반적인 CNN이 완전연결 계층을 이용하는 반면, FCN은 이 완전연결 계층을 같은 기능을 하는 합성곱 계층으로 바꾼다.
사물인식에서 사용한 신경망의 완전연결 계층에서는 중간 데이터의 공간 볼륨(다차원 형태)를 1차원으로 변환하여 한줄로 늘어선 노드들이 처리했으나, FCN에서는 공간 볼륨을 유지한 채 마지막 출력까지 처리할 수 있다.
FCN은 위 그림에서 보듯 마지막에 공간 크기를 확대하는 처리를 도입했다는 것도 특징이다.
이 확대 처리로 인해 줄어든 중간 데이터를 입력 이미지와 같은 크기까지 단번에 확대할 수 있다.
FCN의 마지막에 수행하는 확대는 이중 선형 보간(bilinear interpolation)에 의한 선형 확대이다.
FCN에서는 이 선형 확대를 역합성곱(deconvolution)연산으로 구현해내고 있다.(자세한 내용은 FCN논문을 확인하자.)
사진 캡션 생성
컴퓨터 비전과 자연어를 융합한 재미있는 연구가 있다. 다음 그림과 같은 사진을 주면, 그 사진을 설명하는 글을 자동으로 생성하는 연구이다.
딥러닝으로 사진 캡션을 생성하는 방법으로는 NIC(Neural Image Caption)모델이 대표적이다.
NIC는 위 그림과 같이 심층 CNN과 자연어를 다루는 순환 신경망(Recurrent Neural Network,RNN)으로 구성된다. RNN은 순환적 관계를 갖는 신경망으로 자연어나 시계열 데이터 등의 연속된 데이터를 다룰 때 많이 활용한다.
사진이나 자연와 같은 여러 정보를 조합하고 처리하는 것을 멀티모달 처리(multimodal processing)이라고 하여, 최근 주목받는 분야중 하나이다.
딥러닝의 미래
이미지 스타일(화풍 변환)
딥러닝을 활용해 화가처럼 그림을 그리는 연구가 있다.
다음 그림은 두 이미지를 입력해서 새로운 그림을 생성하는 연구이다. 하나는 콘텐츠 이미지, 다른 하나는 스타일 이미지라 부르는데, 이 둘을 조합해 새로운 그림을 그려준다.
고흐의 화풍을 콘텐츠 이미지에 적용하도록 지정하면, 이를 기초로 딥러닝이 새로운 그림을 그린다. 이 기법을 담은 [A Neural Algorithm of Artistic Style] 논문은 발표되자마자 전 세계에서 많은 이목을 끌었다.
큰 틀만 이야기하면, 이 기술을 네트워크의 중간 데이터가 콘텐츠 이미지의 중간 데이터와 비슷해지도록 학습한다.
이렇게 하면 입력 이미지를 콘텐츠 이미지의 형태를 흉내낼 수 있다.
또 스타일 이미지의 화풍을 흡수하기 위해 스타일 행렬이라는 개념을 동비한다. 그 스타일 행렬의 오차를 줄이도록 학습하여 입력 이미지를 고흐의 화풍과 비슷해지게 만들 수 있ㄷ는 것이다.
이미지 생성
앞의 이미지 스타일 변환 예는 새로운 그림을 생성하려면 이미지 두 장을 입력해야 했다.
한편 아무런 입력 이미지 없이도 새로운 이미지를 그려내는 연구도 진행 중이다.
물론 먼저 대량의 이미지를 사용하여 학습하긴 하지만, 학습이 끝난 후에는 아무런 입력 이미지 없이도 새로운 그림을 그려낸다.
딥러닝으로 침실 이미지를 생성하는게 가능하다. 아래 그림은 DCGAN(Deep Convolutional Generative Adversarial Network 기법)
위 그림은 진짜 사진처럼 보이지만, 모두 DCGAN을 사용해 새롭게 생성한 이미지이다.
즉, 아직 아무도 본적 없는 이미지이며, 처음부터 새로 생성한 이미지이다.
진짜와 구분할 수 없는 수준의 이미지를 그리는 DCGAN은 이미지를 생성하는 과정을 모델화한다.
그 모델을 대량의 이미지를 사용해 학습하고, 학습이 끝나면 그 모델을 이용하여 새로운 그림을 생성할 수 있다.
DCGAN도 딥러닝을 사용한다. 기술의 핵십은 생성자와 식별자로 불리는 2개의 신경망을 이용한다는 점이다.
생성자가 진짜와 똑같은 이미지를 생성하고 식별자는 그것이 진짜인지(생성한 이미지인지, 촬영된 이미지인지)를 판정한다. 그렇게 둘을 겨루도록 학습시켜 생성자는 더 정교한 가짜 이미지 생성 기술을 학습하고 식별자는 더 정확하게 간파할 수 있는 감정사로 성장한다.
이렇게 둘의 능력을 갈고닦게 하는 개념이 GAN(Generative Adversarial Network)기술의 재미난 점이다.
자율 주행
SegNet이라는 CNN 기반 신경망은 다음 그림과 같이 주변 환경을 정확하게 인식해낸다.
입력 이미지를 분할(픽셀 수준에서 판정)하고 있다.
결과를 보면 도로와 건물, 보도와 나무, 차량과 오토바이 등을 어느 정도 정확히 판별하고 있다.
Deep Q-Network(강화학습)
사람이 시행착오를 겪으며 배우듯 컴퓨터도 시행착오 과정에서 스스로 학습하게 하려는 분야가 있다.
이는 가르침에 의존하는 지도 학습과는 다른 분야로, 강화학습(reinforcement learning)이라고 한다.
강화학습에서는 에이전트라는 것이 환경에 맞게 행동을 선택하고 그 행동에 의해서 환경이 변한다는 게 기본적인 틀이다.
환경이 변화하면 에이전트는 어떠한 보상을 얻는다. 강화학습의 목적은 좀 더 나은 보상을 받는 쪽으로 에이전트의 행동 지침을 바로잡는 것이다.
여기서 주의점은 보상은 정해진 것이 아니라 예상 보상이라는 점이다.
명확한 지표로부터 역산해서 예상 보상을 정해야 한다. 만약 지도학습이였다면 행동에 대ㅔ한 지도를 통해 올바른 평가를 받을 수 있었을 것이다.
딥러닝을 사용한 강화학습 중 Deep Q-Network(일명 DQN)이라는 방법이 있다.
이는 Q학습이라는 강화학습 알고리즘을 기초로 한다. Q학습에서는 최적 행동 가치 함수로 최적인 행동을 정한다. 이 함수를 딥러닝(CNN)으로 비슷하게 흉내내어 사용하는 것이 DQN이다.
DQN 연구 중에는 비디오 게임을 자율 학습시켜 사람을 뛰어넘는 수준의 조작을 실현한 사례가 보고되고 있다.
아래 그림과 같이 DQN에서 사용하는 CNN은 게임 영상 프레임(4개의 연속한 프레임)을 입력하여 최종적으로는 게임을 제어한은 움직임에 대하여 각 동작의 가치를 출력한다.
그동안의 비디오 학습에서는 게임의 상태는 미리 추춣하는 것이 보통이였다.
그러나 DQN에서는 그림과 같이 입력 데이터는 비디오 게임의 영상뿐이다.
이는 DQN의 주목할 점으로, DQN의 응용 가능성을 현격히 높였다고 할 수 있다.
게임마다 설정을 바꿀 필요없이 단순히 DQN에 게임 영상을 보여주기만 하면 되기 때문이다.
2016년에는 알파고가 이세돌을 꺾었다는 소식이 화제였다.
이 알파고에도 딥러닝과 강화학습이 이용되었다. 3000만개의 프로 기보를 보며 학습한 후, 알파고 스스로 자신과 맞붙는 대결을 반복하면서 수련했다.
또한 알파고와 DQN은 모두 구글이 인수한 딥마인드(DeepMind)가 진행한 연구이다.
정리
이번 장에서는 약간 깊은 CNN을 구현하고, 손글씨 숫자 인식에서 99%를 넘는 높은 정확도를 얻었다.
그리고 딥러닝의 트렌드와 실제 활용 예, 고속화를 위한 연구와 미래를 느끼게 해주는 연구 사례를 소개했다.
- 수많은 문제에서 신경망을 더 깊게 하여 성능을 개선할 수 있다.
- 이미지 인식 기술 대회인 ILSVRC에는 최근 딥러닝 기반 기법이 상위권을 독점하고 있으며, 그 깊이도 더 깊어지는 추세이다.
- 유명한 신경망으로는 VGG,GoogLeNet, ResNet이 있다.
- GPU와 분산학습, 비트 정밀도 감소 등으로 딥러닝을 고속화할 수 있다.
- 딥러닝(신경망)은 사물 인식뿐 아니라 사물 검출과 분할에도 이용할 수 있다.
- 딥러닝의 응용 분야로는 사진의 캡션 생성, 이미지 생성, 강화학습, 자율 주행 등이 있다.
※dataset 및 코드 제공 - 밑바닥부터 시작하는 딥러닝 GitHub: https://github.com/kchcoo/WegraLee-deep-learning-from-
GitHub - kchcoo/WegraLee-deep-learning-from-scratch
Contribute to kchcoo/WegraLee-deep-learning-from-scratch development by creating an account on GitHub.
github.com
이렇게 밑바닥부터 시작하는 딥러닝1 책의 모든 챕터의 학습을 해보았다.
딥러닝에 필요한 기초 지식을을 배울수 있는 기회가 되었다고 생각하고,
밑바닥부터 시작하는 딥러닝2 책을 학습하며 본격적인 자연어 처리와 딥러닝에 대한 좀 더 깊은 학습을 진행해볼 것이다.
'공부 > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝2 - Chap2. 자연어와 단어의 분산 표현 (4) | 2024.12.16 |
---|---|
밑바닥부터 시작하는 딥러닝2 - Chap1. 신경망 복습 (2) | 2024.12.14 |
밑바닥부터 시작하는 딥러닝1 - Chap7. 합성곱 신경망(CNN) (4) | 2024.12.06 |
밑바닥부터 시작하는 딥러닝1 - Chap6. 학습 관련 기술들 (3) | 2024.11.29 |
밑바닥부터 시작하는 딥러닝1 - Chap5. 오차역전파법 (1) | 2024.11.27 |