케라스 창시자에게 배우는 딥러닝

케라스 창시자에게 배우는 딥러닝

프랑소와 숄레 저/박해선

단어 하나, 코드 한 줄 버릴 것이 없다!
창시자의 철학까지 담은 딥러닝 입문서

케라스 창시자이자 구글 딥러닝 연구원인 저자는 ‘인공 지능의 민주화’를 강조한다. 이 책 역시 많은 사람에게 딥러닝을 전달하는 또 다른 방법이며, 딥러닝 이면의 개념과 구현을 가능하면 쉽게 이해할 수 있게 하는 데 중점을 두었다. 1부에서는 딥러닝, 신경망, 머신 러닝의 기초를, 2부에서는 컴퓨터 비전, 텍스트, 시퀀스, 생성 모델을 위한 딥러닝 같은 실전 딥러닝을 설명한다. 이외에도 딥러닝을 언제 적용하는지, 한계는 무엇인지...


이 책은 케라스 창시자인 프랑소와 숄페의 저서로, 케라스에 입문하거나 케라스로 처음 딥러닝을 경험하려는 사람들에게 좋습니다...(중략)...한 가지 특이한 점은 단순하게 내용을 나열하거나 사전식으로 늘어놓는 것이 아니라 어떠한 과제를 제시하고 그 과제를 해결하는 과정에서 케라스 코드와 함께 딥러닝 구현 방법을 설명합니다.

-추천사 중...-



본 책은 딥러닝을 처음 배우고나 이해의 폭을 넓히가조 하는 모든 독자층을 위한 도서이다. 머신러닝 기술자, 소프트웨어 엔지니어, 학생들까지 많은 것을 배울 수 있다. 그에 맞게 이 책은 크게 1부와 2부로 구성되어 있다. 1부는 딥러닝을 이론적으로 소개하고 있다. 딥러닝의 배경, 정의, 머신 러닝과 신경망을 시작하는 데 필요한 모든 개념이 들어가 있다.



1장: AI, 머신 러닝, 딥러닝에 관한 핵심 사항과 배경지식

2장: 딥러닝을 배우기 위한 기초 개념에 대해 배운다. 텐서, 텐서 연산, 경사 하강법, 역전파에 대해 배운다.

3장: 신경망에 필요한 딥러닝 프레임워크인 케라스를 소개하고, 딥러닝 컴퓨터 설정, 예제등을 배운다. 회귀 작업을 위한 간단한 신경망을 학습시킬 수 있고 학습 과정에 어떤 일이 일어났는지 확실히 이해할 수 있다.

4장: 대표적인 머신 러닝 작업 흐름을 배운다. 흔히 나타나는 문제와 해결책도 소개한다.


2부는 컴퓨터 비전과 자연어 처리 분야의 실용적인 딥러닝 애플리케이션에 대해 자세히 다룬다. 


5장: 이미지 분류에 알맞은 실용적인 컴퓨터 비전 예제를 배운다.

6장: 텍스트와 시계열과 같은 시퀀스 연속 데이터를 처리하기 위한 기술에 대해 배운다.

7장: 최고 수준의 딥러닝 모델을 구축해본다.

8장: 이미지와 텍스트를 생성할 수 있는 딥러닝 생성 모델을 소개한다.


450페이지에 달하는 이 책은 딥러닝, 머신러닝, 인공지능을 케라스라는 프레임워크를 이용해 쉽고 재미있게 설명해주고 있다. 데이터를 준비하고, 전처리하며, 모델을 구성하고, 훈련된 데이터를 검증하는 일반적인 과정부터 시작해, CNN, RNN, LSTM과 같은 신경망 종류도 배운다.


한 가지 내용을 집어서 살펴보자. 딥러닝에서는 그래디언트 소실 문제가 존재한다. 흔히 심층 신경망을 학습시키기 위해 사용되는 알고리즘에 역전파 알고리즘이 있는데, 이는 출력 손실에서 얻은 피드백 신호를 하위 층에 전파하는 알고리즘이다. 이 때 피드백 신호가 계속 깊은 층을 통과해 전파되면 신호가 아주 작아지거나 완전히 사라질 수 있다. 이렇게 신경망이 학습되지 않는 문제는 그래디언트 소실(vanishing gradient)문제라고 한다.



딥러닝에서 모든 것은 벡터라고 한다. 모두가 기하하적인 공간에 놓은 하나의 포인트인거이다. 이러한 다차원 벡터를 흔히 텐서라 불리며, 이러한 텐서의 공간에서 각 텐서를 연결해 연산을 수행하는 것이 텐서플로우(Tensorflow) 프레임워크의 핵심 구조이다. 한 마디로 마술 같다. 데이터가 가진 의미를 벡터와 기하학 공간으로 변환해 특정 공간에서 다른 공간으로 매핑하는 복잡한 기하하적 변환을 차근차근 학습한다. 원본 데이터에 있는 모든 형태의 관계를 찾기 위해 충분한 고차원 공간이 필요하게 되는 이유이다.


4장 머신 러닝의 기본 요소에서 과대적합(overfitting)과 과소적합(underfitting)에 대해 설명하고 있다. 머신 러닝에서는 항상 이러한 문제가 발생하게 되는데 상황에 따라 어떻게 해결해야 하는지 잘 설명해주고 있다. 과대적합을 막는 가장 단순한 방법으로는 모델의 학습 파라미터 수를 줄이는 것이다. 그 외에도 가중치 규제를 두어 네트워크의 손실 함수에 큰 가중치로 연관된 비용을 추가한다. 그 외에 훈련하는 동안 무작위로 층의 일부 출력 특성을 제외시키는 드롭아웃을 추가하는 방법이 있다. 이러한 방법 모두 그래프와 개념 그림, 코드와 함께 상세하지만 어렵지 않게 설명해주고 있다.



개인적으로 지금까지 읽어본 책 중에서 가장 '역주'가 많은 책이지 않나 싶다. 매 페이지마다 1개 이상의 역주가 있을 만큼 번역자의 꼼꼼함이 돋보이는 책이다. 보충 설명이 필요하거나 혼동될 수 있는 부분을 잘 정리해주고 있어 독자들이 읽기에 많은 도움이 된다.


부록에서는 예제를 실행하기 위해 구축해야할 설정 및 프로그램 설치등 환경 구성에 관한 부분을 친절히 설명해주고 있다. 끝으로 이 책은 쉽고 알차고, 예제까지 배울 수 있는 훌륭한 딥러닝 및 인공지능 기본서이다. 개념부터 실전 예제까지 꾸준히 공부하며 차근차근 완성해 나가보자! 


텐서플로(Tensorflow)는 인공지능을 이용하기 위해 사용하는 파이썬 라이브러리이다. 손쉽게 모델을 구축하고 Traning이 가능하고High-Level API를 제공해 유연하고 강력한 파이썬 코드를 작성하게 도와준다.


텐서란 다차원 배열 데이터라 이해하면 된다. 벡터(1차원), 행렬(2차원), 큐브(3차원) 등등 이 모든 차원의 배열 데이터를 포괄적으로 텐서라고 한다.


tensor-definition

https://stackoverflow.com/questions/37849322/how-to-understand-the-term-tensor-in-tensorflow


텐서플로는 이러한 데이터 흐름 그래프를 사용하는 수치 연산용 오픈소스 소프트웨어 라이브러리입니다. 오픈소스란 누구나 이 코드를 볼 수 있고 수정할 수 있는 형태입니다. 물론 이 코드는 깃헙(GitHub)에서 볼 수 있다.




https://github.com/tensorflow/tensorflow


여기서 텐서플로에 대한 자세한 안내와 어떻게 코드 contribution에 참여할 수 있는지 알 수 있다. 물론 텐서플로의 모든 소스 코드 또한 볼 수 있다. 


오늘은 윈도우 PC기반에서 텐서플로 CPU버전과 텐서플로 GPU버전을 설치하는 방법을 알아본다.



텐서플로 CPU



CPU만 사용해 연산 작업을 수행하는 일반적인 텐서플로 CPU버전은 pip 명령어를 통해 설치한다.


pip install tensorflow




텐서플로 GPU



텐서 연산은 쉽게 말해 병렬 연산입니다. 따라서 CPU보다는 GPU의 하드웨어 성능을 이용하면 효율적인 연산이 가능합니다. 현재는 엔비디아(NVIDIA)의 GPU만 지원하기 때문에 본인의 PC에 엔비디아 그래픽카드가 설치되어 있어야 한다.


그래픽 카드 사양

최소 사양: 텐서플로의 Compute capability의 버전에 따라 다르지만 문서상 최소 사양한 GeForce GT 640(GDDR5)이다. 하지만, 실제 텐서플로를 훤활히 실행하고 어차피 그래픽카드를 구매할 시점이라면 GeForce GTX 1000시리즈를 권장한다. 현재 필자의 그래픽카드 GeForce GTX 1060 6GB를 사용한다. 


https://developer.nvidia.com/cuda-gpus


위 링크에서 CUDA를 지원하는 그래픽 카드를 확인해본다.


그래픽 카드를 준비했으면 이제 소프트웨어를 설치해보자. 소프트웨어 설치는 총 3가지가 필요하다. 멀티GPU는 따로 다루지 않겠다.

  • NVIDIA GPU Drivers: 384.x 이상 버전 설치 
  • CUDA Toolkit: CUDA 9.0
  • cuDNN SDK: CUDA 9.0에 해당하는 7.2버전 이상



NVIDIA GPU Drivers

먼저 GPU 드라이버는 그래픽카드를 처음 설치하면 대부분 설치할 것이다. 하지만 최신 버전이 정확히 설치됐는지 확인한다.



본인의 그래픽 카드에 해당하는 드라이버를 설치한다. 



CUDA Toolkit


쿠다(CUDA)란 엔비디아 그래픽카드에서 개발한 병렬 컴퓨팅 플랫폼 및 프로그래밍 모델이다. 한마디로, 그래픽 카드의 연산 능력을 이용해 CPU보다 효율적이고 빠르게 작업을 수행할 수 있게 도와준다.


텐서플로 공식 홈페이지에서는 최신의 CUDA 10.0버전 다운로드만 가능하니 다음 링크를 이용한다.


https://developer.nvidia.com/cuda-90-download-archive


자신의 운영체제를 선택하고, local 버전으로 1.4GB의 설치 파일을 다운로드 하고 설치한다. network버전은 인터넷 환경에 따라 설치속도가 느릴 수 있으니 참고한다. 버전 확인이 가장 중요하다. 사용자 정의 설치를 통해 Visual Studio 관련 항목 체크를 해제하면 오류없이 정상적으로 설치할 수 있을 것이다.





cuDNN SDK


심층신경망 라이브러리 개발 SDK이다. CUDA 9.0에 해당하는 최신버전을 설치한다.


https://developer.nvidia.com/cudnn



Download cuDNN을 클릭한다. 엔비디아 회원가입이 필요하니 가입 후 로그인한다. 간단한 설문조사를 하고 설치한다.



CUDA 9.0의 최신 버전인 cuDNN v7.3.1 Library for Windows 10을 선택해 다운로드한다.


압축파일을 해제하면 이렇게 3개의 폴더가 있다.



다음과 같이 복사한다.


  • <설치경로>\cuda\bin\cudnn64_7.dll  ->  C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin

  • <설치경로>\cuda\ include\cudnn.h   ->  C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include

  • <설치경로>\cuda\lib\x64\cudnn.lib  ->  C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64


이렇게 총 3개의 파일을 정확한 위치에 복사한다.


다음으로 환경 변수를 설정한다.




  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\extras\CUPTI\libx64

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\cuda\bin


이렇게 3개의 경로 또한 Path 변수에 추가한다.


마지막으로 CMD창에서 다음 명령어를 통해 텐서플로 gpu를 설치한다.


pip install tensorflow-gpu


CMD 창에서 파이썬을 실행해 텐서플로 설치가 완료됐는지 확인한다.


>>> import tensorflow as tf


아무런 오류가 없다면 정상적으로 설치된 것이다.


>>> import tensorflow as tf >>> tf.enable_eager_execution() >>> tf.add(1, 2)



이렇게 본인의 GPU를 통해 연산이 됐음을 확인할 수 있다. 간단한 코드를 테스트를 해본 결과이다. GPU가 정확히 인식되며, 만약 GPU가 없을 경우 자동으로 CPU 연산이 이뤄진다. 만약 정상적으로 작동이 안될 경우 기존의 텐서플로를 삭제하고 재설치하며, 환경변수를 확인해보자.





+ Recent posts