머신 러닝 및 딥 러닝은 최신 인공 지능 산업의 붐으로 인해 가파르게 성장하고 있으며, 일찌감치 뛰어든 기업들이 결실을 보는 단계에 이르렀다. 점점 더 많은 기업과 자본이 이 미개척 영역에 뛰어들어 잠재력 실현을 위해 시간과 노력을 투자하는 추세이므로 관련 엔지니어가 일하기에도 좋은 환경이 갖춰질 것이다.
인공 지능, 머신 러닝, 딥 러닝용으로 널리 사용되는 프로그래밍 언어는 파이썬, Julia, R, Java 등이 있는데 가장 선호도가 높은 것은 파이썬이다.
머신 러닝 및 인공 지능에 파이썬을 선호하는 이유
현재 파이썬이 머신 러닝 분야에서 선호도가 가장 높다. 여러 라이브러리와 오픈 소스 도구를 사용할 수 있으므로 머신 러닝 모델 개발에 이상적이기 때문이다.
사실 파이썬은 머신 러닝 및 인공 지능 개발자 사이에서 오랫동안 선호도가 높은 프로그래밍 언어였다. 파이썬은 개발자에게 코드 품질과 생산성 향상에 기여하는 최상의 유연성과 기능을 제공하며, 개발의 어려움을 줄여주는 광범위한 라이브러리를 보유하고 있다. 머신 러닝, 딥 러닝, 인공 지능 분야에서 파이썬이 최고의 프로그래밍 언어인 여러 가지 이유를 정리하면 다음과 같다.
▶ 무료로 사용할 수 있고 오픈 소스라는 특성상 개발자 커뮤니티가 발달해 있으며 장기적인 관점에서 관리되고 향상될 여지가 있다.
▶ 실재하는 모든 문제를 해결할 수 있는 방대한 라이브러리를 보유한다.
▶ 구현이 원활하여 기술 수준이 서로 다른 개발자들이 쉽게 접근할 수 있다.
▶ 코딩과 디버깅 시간이 줄어들어 생산성이 향상된다.
▶ 소프트 컴퓨팅과 자연어 처리에도 사용할 수 있다.
▶ C/C++ 코드 모듈과도 원활하게 동작한다.머신 러닝 및 딥 러닝에 가장 적합한 파이썬 라이브러리파이썬은 머신 러닝 및 딥 러닝 프로그래밍 언어 가운데 가장 개발자 친화적이고, 모든 프로젝트에 대응할 수 있는 방대한 라이브러리를 제공한다.
머신 러닝과 딥 러닝을 위한 대표적인 파이썬 라이브러리
텐서플로(TensorFlow)
텐서플로는 연구 및 생산을 위한 빠르고 유연하며 확장 가능한 오픈 소스 머신 러닝 라이브러리이다.
텐서플로는 머신 러닝 프로젝트에 사용할 수 있는 최고의 파이썬 라이브러리 중 하나이다. 텐서플로는 구글이 제공하는 오픈소스 서비스이며 입문자와 전문가 모두 쉽게 머신 러닝 모델을 구축할 수 있다.
텐서플로를 사용하면 컴퓨터뿐만 아니라 모바일 장치나 서버에서도 머신 러닝 모델을 생성 및 학습할 수 있다. 동일한 성능으로 모바일 플랫폼과 고성능 서버에서 사용할 수 있는 텐서플로 라이트(TensorFlow Lite)와 텐서플로 서빙(TensorFlow Serving)이 각각 존재한다.
텐서플로가 빛을 발하는 머신 러닝 및 딥 러닝 영역은 다음과 같다.
▶ 심층 신경망(DNN) 처리
▶ 자연어 처리
▶ 편미분 방정식
▶ 추상화
▶ 이미지, 텍스트, 음성 인식
▶ 아이디어 및 코드 협업
주요 역할: 딥 러닝 모델 구축
케라스(Keras)
케라스는 파이썬용으로 가장 널리 쓰이는 오픈 소스 신경망 라이브러리 중 하나이다. ONEIROS(Open-Ended Neuro Electronic Intelligent Robot Operating System)를 위해 구글의 엔지니어가 처음 설계했으며, 머지않아 텐서플로의 주요 라이브러리에 채택되어 텐서플로에서도 접근할 수 있게 되었다. 신경망 생성을 위해 케라스가 제공하는 몇 가지 모듈과 도구는 다음과 같다.
▶ 신경층
▶ 활성화 함수와 비용 함수
▶ 손실 함수
▶ 배치 정규화
▶ 드롭아웃
▶ 풀링
케라스가 제공하는 이러한 추가 기능으로 머신 러닝 및 딥 러닝 프로그래밍을 위한 텐서플로의 사용성이 확장된다. 활성화된 커뮤니티와 전용 슬랙 채널이 있다는 것도 케라스의 장점이다. 케라스는 표준 신경망뿐만 아니라 컨볼루션 신경망(CNN)과 순환 신경망(RNN)도 지원한다.
주요 역할: 딥 러닝 모델 구축
파이토치(PyTorch)
지금은 메타로 사명을 바꾼 페이스북에서 개발한 파이토치는 몇 안되는 파이썬용 머신 러닝 라이브러리 가운데 하나이다. 파이토치는 파이썬 외에도 C++ 인터페이스를 지원한다. 파이토치는 최고의 머신 러닝 및 딥 러닝 프레임워크 자리를 두고 텐서플로와 경쟁 구도에 있다.
파이토치가 텐서플로와 차별되는 몇 가지 주요 기능은 다음과 같다.
▶ GPU를 통한 가속 처리 기능을 갖춘 텐서 컴퓨팅
▶ 쉬운 학습 및 사용, 쉽고 파이썬 생태계와의 높은 호환성
▶ 테이프 기반 자동 미분 시스템에 구축된 신경망 지원
신경망의 생성 및 학습에 도움을 주는 파이토치의 다양한 모듈은 다음과 같다.
▶ 텐서: torch.Tensor
▶ 최적화: torch.optim
▶ 신경망: torch.nn
▶ 자동미분: torch.autograd
장점: 사용자의 입맛에 맞춰 정의 가능하며 딥 러닝 연구에 폭넓게 사용
단점: 자연어 처리의 한계와 최적화되지 않은 속도
주요 역할: 딥 러닝 모델의 개발 및 학습
사이킷런(Scikit-learn)
사이킷런은 또 다른 파이썬용 머신 러닝 라이브러리다. 사이킷런은 넘파이(Numpy)나 판다스(Pandas) 등 다양한 머신 러닝 프로그래밍 라이브러리와 쉽게 통합할 수 있다. 사이킷런이 지원하는 다양한 알고리즘은 다음과 같다.
▶ 분류
▶ 회귀
▶ 클러스터링
▶ 차원 축소
▶ 모델 선택
▶ 전처리
사이킷런은 사용이 쉬우면서도 유연성을 보장하는 컨셉으로 탄생했으며, 데이터 적재/처리/조작/시각화보다는 데이터 모델링에 중점을 둔다. 그리고 연구 단계부터 배포까지 종단 간(end to end) 머신 러닝에 사용하기 좋다.
주요 역할: 모델링
판다스(Pandas)
판다스는 파이썬 데이터 분석 라이브러리이며, 주로 데이터 조작 및 분석에 사용된다. 머신 러닝 프로그래머는 판다스를 사용하여 시계열 데이터나 구조화된 다차원 데이터를 쉽게 다룰 수 있다. 데이터 처리와 관련된 판다스의 몇 가지 주요 기능은 다음과 같다.
▶ 데이터 세트 변형 및 피벗
▶ 데이터 세트 병합 및 결합
▶ 누락 데이터 처리 및 데이터 정렬
▶ 계층적 인덱싱, 팬시 인덱싱 등 다양한 인덱싱 옵션
▶ 데이터 필터링 옵션
판다스는 DataFrame 객체를 통해 데이터를 2차원으로 표현한다.
주요 역할: 데이터 조작 및 분석
NLTK
NLTK는 Natural Language Toolkit(자연어 툴킷)의 약자로 자연어 처리를 위한 파이썬 라이브러리이며, 자연어 데이터를 다루는 분야에서 가장 인기 있는 라이브러리 가운데 하나이다. NLTK는 FrameNet, WordNet, Word2Vec 등의 다양한 어휘 자원과 함께 단순한 인터페이스를 제공한다. NLTK의 주요 특징은 다음과 같다.
▶ 문서상 키워드 탐색
▶ 텍스트의 토큰화 및 분류
▶ 음성 및 필기 인식
▶ 단어의 표제어 및 어간 추출
주요 역할: 텍스트 처리
Spark MLlib
Apache에서 개발한 Spark MLlib는 연산의 규모를 쉽게 확장할 수 있는 머신 러닝 라이브러리이다. 사용이 간편하고 빠르며 설정이 쉽고 다른 도구와도 호환성이 좋다. Spark MLlib는 등장 후 머지않아 머신 러닝 알고리즘과 애플리케이션을 개발하기 위한 편리한 도구로 자리 잡았다.
Spark MLlib를 사용하여 머신 러닝을 다루는 프로그래머가 활용할 수 있는 알고리즘과 API 중 인기 있는 것들은 다음과 같다.
▶ 회귀
▶ 클러스터링
▶ 최적화
▶ 차원 축소
▶ 분류
▶ 기초 통계
▶ 특성 추출
테아노(Theano)
테아노는 깊이 있는 수학적 표현을 쉽게 정의, 최적화, 평가할 수 있는 강력한 파이썬 라이브러리이다. 대규모의 과학적 연산을 수행하는 환경에서 테아노를 강력한 라이브러리로 만드는 몇 가지 특징은 다음과 같다.
▶ 고부하 계산에서 CPU보다 더 나은 성능을 발휘하는 GPU 지원
▶ 넘파이(Numpy)와의 강력한 통합 지원
▶ 가장 까다로운 변수들도 빠르고 안정적으로 평가
▶ 수학 연산을 위한 맞춤형 C 코드 생성 기능
테아노를 사용하면 가장 효율적인 머신 러닝 알고리즘의 일부를 빠르게 개발할 수 있다. 테아노 기반으로 구축된 딥 러닝 라이브러리 중 잘 알려진 것에는 케라스(Keras), 블록(Blocks), 라자냐(Lasagne) 등이 있다.
MXNet
MXNet은 전문 기술 영역에서 딥 러닝을 포함할 때 아주 적합하다. MXNet은 심층 신경망(DNN)의 학습과 배포에 사용되며, 확장성이 뛰어나고 빠른 모델 학습을 지원한다. Apache에서 개발한 MXNet은 파이썬 뿐만 아니라 C++, Perl, Julia, R, Scala, Go 등 여러 프로그래밍 언어로도 동작한다.
MXNet의 이식성과 확장성은 플랫폼 간의 이동과 프로젝트의 요구사항에 맞춘 확장을 보장한다. Intel, Microsoft, MIT와 같이 기술 및 교육 분야의 거대 조직들은 현재 MXNet을 지원한다. 아마존 AWS는 딥 러닝 프레임워크로 MXNet을 채택하고 있다.
넘파이(Numpy)
파이썬용 넘파이 라이브러리는 방대한 다차원 데이터와 복잡한 수학 함수를 처리하는데 특화되어 있다. 넘파이는 배열을 다루는 복잡한 함수의 빠른 연산과 실행을 제공한다. 넘파이가 지원하는 기능은 다음과 같다.
▶ 수학 및 논리 연산
▶ 형상 조작
▶ 분류 및 선택
▶ 이산 푸리에 변환
▶ 기본 선형대수 및 통계 연산
▶ 랜덤 시뮬레이션
▶ n차원 배열
넘파이는 객체 지향 방식으로 동작하고 C, C++, Fortran 코드를 통합하는 도구를 제공하기 때문에 과학 커뮤니티에서 인기가 많다.
주요 역할: 데이터 정리 및 조작
파이썬은 일반적인 프로그래밍 언어로 사용될 뿐만 아니라 프로젝트나 작업 흐름의 적재적소에 부합하는 굉장한 개발 도구이다. 파이썬의 기능을 확장하는 라이브러리와 패키지는 프로그램과 알고리즘을 개발하는 모든 프로그래머에게 완벽할 정도로 적합하다. 앞서 소개한 파이썬용 머신 러닝 및 딥 러닝 라이브러리를 접하고 나면 각 라이브러리가 무엇을 제공하고 필요에 따라 무슨 라이브러리를 선택해야 하는지를 알 수 있게 된다.
머신 러닝 및 딥 러닝을 위한 파이썬 라이브러리를 학습하기 좋은 책 한 권을 소개한다.
원서는 2020년 초에 출간된 「Artificial Intelligence with Python, 2nd Edition」이다.
이 책은 주로 넘파이, 사이파이, 사이킷런, 맷플롯립을 다룬다. 텐서플로나 파이토치가 부각되지 않은 점은 조금 아쉽다. 아무래도 1년의 시차를 두고 한글화된 책이라서 그간의 흐름을 놓칠 수 있다는 생각이 든다. 그만큼 관련 분야의 성장이 빠르다.
책의 구성은 전반적으로 각 라이브러리를 집중적으로 소개하기 보다는 필요에 따라 무슨 라이브러리를 사용해야하는지 감을 찾게 만드는 내용이 주를 이룬다.
이 책에 등장하는 파이썬 라이브러리를 인덱스에서 확인할 수 있다. 비록 머신 러닝과 딥 러닝이 단 한 권의 책으로 배부를 수 있는 주제는 아니지만 넘파이, 맷플롯립, 사이킷런, 사이파이를 주로 다루고 상대적으로 선호도가 높은 텐서플로나 판다스가 책의 중후반부에서야 등장해 조금 언급되며 파이토치는 아예 다뤄지지 않는 것은 아쉬운 점이라고 생각한다.
머신 러닝과 딥 러닝 분야에서 프로그램과 알고리즘을 개발하는 파이썬 프로그래머라면 파이썬의 기능을 확장하는 라이브러리 및 패키지를 다루는 콘텐츠를 많이 접하는 것이 필수적이다. 다양한 책, 아티클 등을 접하고 앞서 소개한 파이썬용 머신 러닝 및 딥 러닝 라이브러리 중 필요에 따라 무엇을 선택해야 하는지 능숙하게 파악하는 것이 기본 역량이라고 생각한다.
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.