이 책에서 우리가 말하는 일반화된 알고리즘 분류는 AI의 하위범주인
딥러닝(deeplearning)
에 해당된다. 딥러닝은 적합한 예제, 즉 적합한 데이터를 사용하여 심층신경망이라는 수학적 개체를 훈련시키는 일을 한다.
십여 년 전까지 머신러닝이라고 분류되는 광범위한 시스템은 피처 엔지니어링(feature engineering)에 크게 의존했다. 피처 엔지니어링은 분류기가 새로운 데이터를 기반으로 올바른 결과물을 낼 수 있도록 입력 데이터를 변환하는 작업을 일컫는다. 반면 딥러닝은 이와 같은 피처 엔지니어링 작업을 자동으로 수행한다.
즉 기존 머신러닝에서는 주어진 데이터에 대해 주어진 데이터를 목적에 맞게 잘 변환해서 피처를 직접 새로 구성해야하지만 딥러닝은 이것을 자동으로 처리하는 것이다. 예로 머신러닝 입문 프로젝트인 "California real estate"예제에서 보통 상관성이 높은 피처를 찾기위해 지역내의 전체 거실수를 지역내의 전체 가구수로 나누어 평균 가구당 거실수라는 새로운 피처를 만들기도 한다. 인간에 의해 직접 이루어지는 feature engineering이다.
구체적으로, Feature Engineering은 모델 정확도를 높이기 위해서 주어진 데이터를 예측 모델의 문제를 잘 표현할 수 있는 features로 변형시키는 과정이다. '머신러닝 알고리즘을 작동하기 위해 데이터의 도메인 지식을 활용해 feature를 만드는 과정'이라고 할 수도 있다.
Pytorch는 딥러닝 프로젝트를 위한 파이썬 프로그램 라이브러리이다. 파이토치의 명확한 문법과 현대적인 API, 쉬운 디버깅은 딥러닝 입문에 있어서 최선의 선택일 것이다.
딥러닝 머신은 입력을 출력으로 매핑하는 다소 복잡한 수학 함수이다. 이 함수를 만들기 위해 파이토치는 텐서(tensor)
라는 핵심 데이터 구조를 제공한다. 텐서는 넘파이 배열과 여러 면에서 유사하며 텐서구조를 활용하면 파이토치에서 제공되는 전용 하드웨어를 활용하여 수학 연산을 빠르게 가능하다.
파이토치를 추천하는 이유 중 하나는 단순함
이다. 학습이나 활용, 확장, 디버깅 면에서 모두 수월하다고 평가받고 있다. 또한 파이토치는 두 가지 특별한 기능을 제공한다. 하나는 GPU로 연산을 가속하는 것이며, 다른 하나는 딥러닝에 사용하는 일반 수학식에 대해 산술 최적화를 지원하는 점이다.
파이토치 첫 베타 버전이 릴리스되던 당시엔 테아노와 텐서플로는 초기의 저수준 라이브러리 였으며, 라쟈냐와 케라스는 테아노의 고수준 래핑이었다. 그 후로 2년간 경쟁구도에 많은 변화가 있었으며 이후 커뮤니티는 특수한 경우가 아니고야 파이토치나 텐서플로 양 진영으로 나뉘었다.
Tensorflow VS Pytorch
텐서플로는 제품화를 위한 견고한 파이프라인과 함께 업계 전반에 걸쳐 두터운 인지도를 확보했으며, 파이토치는 사용하기 쉬운 장점을 살려 연구와 교육 커뮤니티에 침투하였다.
파이토치는 기본적으로 다차원 배열, 즉 텐서라고 부르는 자료구조를 사용하는 라이브러리이다. 따라서 텐서를 사용하는 다양한 연산 라이브러리를 torch 모듈로 제공한다. 텐서 자료구조나 이를 사용한 연산은 CPU 혹은 GPU를 사용하여 연산한다. 또한 파이토치는 특정 텐서에서 수행한 모든 연산을 기억해두었다가 주어진 입력값을 기준으로 미분값을 자동 계산해준다.(역전파에서 활용될 수 있음.) 파이토치에는 자동미분 엔진이 텐서를 다루기 때문에 가능하다. 아래의 그림은 데이터를 읽고 모델을 훈련한 후 배포하는 일반적인 워크플로를 나타낸다.
신경망 구축을 위한 파이토치 핵심 모듈은 torch.nn에 있으며, 이곳에는 완전연결계층, 컨볼루션층, 활성화함수, 손실함수가 모두 포함된다. 이 요소들은 훈련전 모델을 정의할 때 필요하며 모델 훈련을 위해서는 데이터를 얻을 수 있는 곳과 옵티마이저, 계산을 수행할 하드웨어등이 부가적으로 필요하다.
입력될 데이터를 표준화된 파이토치 텐서로 변환하기 위해서는 torch.utils.data에 있는 Dataset 클래스가 필요하며, 데이터 변환의 경우 4장에서 구체적으로 볼 수 있다.
사전훈련된 신경망을 신규 데이터로 돌려보는 것은 일반 최신 노트북이나 데스크탑에서 무리없이 가능하다. 2부에서 다루는 고급 예제의 경우에는 CUDA를 지원하는 GPU가 필요하며 기본적으로 8기가램에 GTXX1070이상의 그래픽파워가 필요하다. (2부를 읽을때에는 고사양의 GPU가 필요하다고 미리 알림) 마지막으로 고려할 사항은 운영체제로, 현재 맥북은 CUDA를 지원하는 GPU가 없기 때문에 맥 OS용 파이토치 패키지는 CPU만 사용 가능하다.
(Mac 사용자의 경우 리눅스 설치와 주피터 노트북 활용을 권장하고 있다.)