최고의 기계 학습 및 딥 러닝 라이브러리

새로운 기계 학습 또는 딥 러닝 프로젝트를 시작하는 경우 어떤 프레임 워크를 선택할지 혼란 스러울 수 있습니다. 논의 하겠지만 두 종류의 프로젝트에 대해 몇 가지 좋은 옵션이 있습니다.

머신 러닝 프레임 워크와 딥 러닝 프레임 워크에는 차이가 있습니다. 기본적으로 기계 학습 프레임 워크는 분류, 회귀, 클러스터링, 이상 탐지 및 데이터 준비를위한 다양한 학습 방법을 다루며 신경망 방법을 포함하거나 포함하지 않을 수 있습니다.

딥 러닝 또는 딥 신경망 프레임 워크는 숨겨진 레이어가 많은 다양한 신경망 토폴로지를 다룹니다. Keras, MXNet, PyTorch 및 TensorFlow는 딥 러닝 프레임 워크입니다. Scikit-learn 및 Spark MLlib는 기계 학습 프레임 워크입니다. (이전 링크 중 하나를 클릭하여 제품에 대한 독립 실행 형 리뷰를 읽으십시오.)

일반적으로 심층 신경망 계산은 CPU가 아닌 GPU (특히 Nvidia CUDA 범용 GPU), TPU 또는 FPGA에서 훨씬 더 빠르게 실행됩니다. 일반적으로 단순한 기계 학습 방법은 GPU의 이점을 얻지 못합니다.

하나 이상의 CPU에서 심층 신경망을 훈련 할 있지만 훈련은 느린 경향이 있으며 느리다는 것은 몇 초 또는 몇 분에 대해 말하는 것이 아닙니다. 훈련해야하는 뉴런과 계층이 많고 훈련에 사용할 수있는 데이터가 많을수록 시간이 더 오래 걸립니다. Google Brain 팀이 2016 년 Google 번역의 새 버전에 대한 언어 번역 모델을 교육했을 때 여러 GPU에서 한 번에 일주일 동안 교육 세션을 실행했습니다. GPU가 없었다면 각 모델 학습 실험에 수개월이 걸렸을 것입니다.

그 이후 Intel Math Kernel Library (MKL)는 합리적인 시간 내에 CPU에서 일부 신경망 을 훈련 할 수있게했습니다 . 한편 GPU, TPU, FPGA는 더욱 빨라졌습니다.

동일한 GPU에서 실행되는 모든 딥 러닝 패키지의 훈련 속도는 거의 동일합니다. 훈련 내부 루프가 Nvidia CuDNN 패키지에서 대부분의 시간을 소비하기 때문입니다.

훈련 속도 외에도 각 딥 러닝 라이브러리에는 고유 한 장단점이 있으며 Scikit-learn 및 Spark MLlib도 마찬가지입니다. 뛰어 들자.

케 라스

Keras는 TensorFlow, CNTK 및 Theano의 세 가지 백엔드 딥 러닝 프레임 워크에 대한 지원과 함께 제공되는 신경망 모델을 구축하기위한 상위 수준의 프런트 엔드 사양 및 구현입니다. Amazon은 현재 Keras 용 MXNet 백엔드를 개발 중입니다. 모든 GPU에 대해 PlaidML의 OpenCL 지원을 활용하기 위해 Keras의 백엔드로 PlaidML (독립 프로젝트)을 사용할 수도 있습니다.

TensorFlow는 Keras의 기본 백엔드이며, CUDA 및 cuDNN을 통한 Nvidia 하드웨어의 GPU 가속과 GCP의 TPU 가속과 관련된 많은 사용 사례에 권장되는 것입니다. TensorFlow에는 tf.keras외부 Keras 설치와는 별도로 내부 클래스 도 포함되어 있습니다 .

Keras는 순차 모델에서 한 줄의 코드처럼 쉽게 신경망에 레이어를 추가 할 수있는 고수준 환경을 가지고 있으며 모델을 컴파일하고 훈련하기 위해 각각 하나의 함수 호출 만 필요합니다. Keras를 사용하면 원하는 경우 모델 또는 기능적 API를 사용하여 더 낮은 수준에서 작업 할 수 있습니다.

Keras를 사용하면 하위 클래스를 지정하여 Python 코딩 수준까지 더 멀리 떨어 뜨릴 수 keras.Model있지만 가능하면 기능적 API를 선호합니다. Keras에는 scikit-learnAPI도 있으므로 Scikit-learn 그리드 검색을 사용하여 Keras 모델에서 하이퍼 파라미터 최적화를 수행 할 수 있습니다. 

비용 : 무료 오픈 소스. 

플랫폼 : Linux, MacOS, Windows 또는 Raspbian; TensorFlow, Theano 또는 CNTK 백엔드. 

Keras에 대한 내 리뷰를 읽어보십시오. 

MXNet

MXNet은 2017 년 초에 Apache Software Foundation 우산 아래에서 이동 한 이후 상당히 발전하고 개선되었습니다. MXNet 백엔드를 사용하여 Keras에 대한 작업이 있었지만 다른 고급 인터페이스 인 Gluon이 훨씬 더 중요해졌습니다. Gluon을 통합하기 전에 MXNet에서 쉬운 명령형 코드 또는 빠른 기호 코드를 작성할 수 있었지만 동시에 둘 다 작성할 수는 없었습니다. Gluon을 사용하면 Keras 및 PyTorch와 경쟁하는 방식으로 두 세계의 장점을 결합 할 수 있습니다.

Gluon의 장점은 다음과 같습니다.

  • 간단하고 이해하기 쉬운 코드 : Gluon은 사전 정의 된 계층, 최적화 프로그램 및 이니셜 라이저를 포함하여 전체 플러그 앤 플레이 신경망 빌딩 블록 세트를 제공합니다.
  • 유연하고 명령적인 구조 : Gluon은 신경망 모델을 엄격하게 정의 할 필요가 없지만, 개발 프로세스에서 유연성을 제공하기 위해 훈련 알고리즘과 모델을 더 가깝게 만듭니다.
  • 동적 그래프 : Gluon을 통해 개발자는 동적 신경망 모델을 정의 할 수 있습니다. 즉, 어떤 구조로든 Python의 기본 제어 흐름을 사용하여 즉석에서 구축 할 수 있습니다.
  • 고성능 : Gluon은 기본 엔진이 제공하는 훈련 속도에 영향을주지 않고 위의 모든 이점을 제공합니다.

이 네 가지 장점은 광범위하게 확장 된 모델 예제 모음과 함께 Gluon / MXNet을 Keras / TensorFlow 및 PyTorch와 거의 동일하게하여 개발 및 교육 속도를 용이하게합니다. 기본 Gluon 페이지에서 각각에 대한 코드 예제를 볼 수 있으며 Gluon API의 개요 페이지에서 반복 할 수 있습니다.

Gluon API에는 신경망 계층, 순환 신경망, 손실 함수, 데이터 세트 방법 및 비전 데이터 세트, 모델 동물원 및 기여한 실험 신경망 방법 세트에 대한 기능이 포함되어 있습니다. Gluon을 표준 MXNet 및 NumPy 모듈 (예 module:autograd , 및) 및 ndarrayPython 제어 흐름과 자유롭게 결합 할 수 있습니다 .

Gluon에는 기본 레이어 (Dense, Dropout 등), 컨볼 루션 레이어, 풀링 레이어 및 활성화 레이어를 포함하여 모델 구축을위한 다양한 레이어가 있습니다. 이들 각각은 단선 통화입니다. 이는 .NET과 같은 네트워크 컨테이너 내부에서 다른 위치에서 사용할 수 있습니다 gluon.nn.Sequential().

비용 : 무료 오픈 소스. 

플랫폼 : Linux, MacOS, Windows, Docker, Raspbian 및 Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ 및 Clojure (실험용). MXNet은 AWS Deep Learning AMI에 포함되어 있습니다.

MXNet에 대한 내 리뷰를 읽어보십시오. 

파이 토치

PyTorch는 이전 Torch와 새로운 Caffe2 프레임 워크를 기반으로합니다. 이름에서 짐작할 수 있듯이 PyTorch는 Python을 스크립팅 언어로 사용하고 진화 된 Torch C / CUDA 백엔드를 사용합니다. Caffe2의 생산 기능은 PyTorch 프로젝트에 통합되고 있습니다.

PyTorch는 "강력한 GPU 가속을 지원하는 Python의 텐서 및 동적 신경망"으로 청구됩니다. 그게 무슨 뜻입니까?

Tensor는 물리학과 공학에서 많이 사용되는 수학적 구조입니다. 랭크 2의 텐서는 특별한 종류의 행렬입니다. 텐서로 벡터의 내적을 취하면 새로운 크기와 새로운 방향을 가진 또 다른 벡터가 생성됩니다. TensorFlow는 텐서 (시냅스 가중치)가 네트워크 모델 주위를 흐르는 방식에서 이름을 따 왔습니다. NumPy는 또한 텐서를 사용하지만 ndarray.

GPU 가속은 대부분의 최신 심층 신경망 프레임 워크에 제공됩니다. 동적 신경망의 정확성과 일반성을 향상시키기 위해 추가 훈련 기간 동안 숨겨진 레이어를 제거하는 PyTorch 모델을 허용 예를 들어, 반복에 반복에서 변경할 수 있습니다 하나입니다. PyTorch는 각 반복 단계에서 즉석에서 그래프를 다시 만듭니다. 반대로 TensorFlow는 기본적으로 단일 데이터 흐름 그래프를 만들고 성능을 위해 그래프 코드를 최적화 한 다음 모델을 학습시킵니다.

eager 실행 모드는 TensorFlow에서 상당히 새로운 옵션이지만 PyTorch가 실행되는 유일한 방법입니다. API 호출은 나중에 실행될 그래프에 추가되는 것이 아니라 호출 될 때 실행됩니다. 계산 효율성이 떨어지는 것처럼 보일 수 있지만 PyTorch는 그런 방식으로 작동하도록 설계되었으며 훈련 또는 예측 속도와 관련하여 느슨하지 않습니다.

PyTorch는 Intel MKL, Nvidia cuDNN 및 NCCL (Nvidia Collective Communications Library)과 같은 가속 라이브러리를 통합하여 속도를 극대화합니다. 핵심 CPU 및 GPU Tensor 및 신경망 백엔드 (TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network), THCUNN (Torch CUDA Neural Network))는 C99 API를 사용하여 독립 라이브러리로 작성됩니다. 동시에 PyTorch는 모 놀리 식 C ++ 프레임 워크에 대한 Python 바인딩이 아닙니다. 의도는 Python과 긴밀하게 통합되고 다른 Python 라이브러리를 사용할 수 있도록하는 것입니다.

비용 : 무료 오픈 소스. 

플랫폼 : Linux, MacOS, Windows; CPU 및 Nvidia GPU. 

PyTorch에 대한 내 리뷰를 읽어보세요. 

Scikit-learn

Scikit-learn Python 프레임 워크에는 다양한 강력한 기계 학습 알고리즘이 있지만 딥 러닝은 없습니다. Python 팬이라면 Scikit-learn이 일반 기계 학습 라이브러리 중에서 가장 좋은 옵션 일 수 있습니다.

Scikit-learn은 다양한 종류의 잘 구축 된 알고리즘과 통합 그래픽을 갖춘 강력하고 검증 된 Python 용 기계 학습 라이브러리입니다. 설치, 학습 및 사용이 비교적 쉽고 좋은 예제와 튜토리얼이 있습니다.

단점으로 Scikit-learn은 딥 러닝 또는 강화 학습을 다루지 않고 그래픽 모델과 시퀀스 예측이 부족하며 실제로 Python 이외의 언어에서 사용할 수 없습니다. PyPy, Python Just-in-Time 컴파일러 또는 GPU를 지원하지 않습니다. 즉, 신경망에 대한 작은 진출을 제외하고는 실제로 속도 문제가 없습니다. 내부 루프와 같이 속도가 빨라야하는 함수에 Cython (Python to C 컴파일러)을 사용합니다.

Scikit-learn은 분류, 회귀, 클러스터링, 차원 감소, 모델 선택 및 전처리를위한 좋은 알고리즘을 제공합니다. 이 모든 것에 대한 좋은 문서와 예제가 있지만 이러한 작업을 수행하기위한 안내 워크 플로가 없습니다.

Scikit-learn은 대부분의 알고리즘이 모두 문서화 된대로 작동하고 API가 일관되고 잘 설계되었으며 데이터 구조간에 "임피던스 불일치"가 거의 없기 때문에 개발 용이성 측면에서 최고 점수를 받았습니다. 기능이 완전히 구체화되고 버그가 완전히 제거 된 라이브러리와 함께 작업하는 것은 즐거움입니다.

반면에 라이브러리는 정확한 이미지 분류 및 신뢰할 수있는 실시간 언어 구문 분석 및 번역과 같은 현재 어렵지만 중요한 문제를 배제하는 딥 러닝 또는 강화 학습을 다루지 않습니다. 분명히 딥 러닝에 관심이 있다면 다른 곳을 찾아보아야합니다.

그럼에도 불구하고 다양한 관찰을 연결하는 예측 함수 구축, 관찰 분류, 레이블이 지정되지 않은 데이터 세트의 구조 학습에 이르기까지 수십 개의 뉴런 레이어를 필요로하지 않고 일반 머신 러닝에 적합하며 해당 영역에 대한 많은 문제가 있습니다. Scikit-learn은 실제로 매우 좋습니다.

비용 : 무료 오픈 소스. 

플랫폼 : Python, NumPy, SciPy 및 Matplotlib가 필요합니다. 릴리스는 MacOS, Linux 및 Windows에서 사용할 수 있습니다.

Scikit-learn에 대한 제 리뷰를 읽어보세요. 

Spark MLlib

Apache Spark 용 오픈 소스 기계 학습 라이브러리 인 Spark MLlib는 분류, 회귀, 클러스터링 및 협업 필터링 (심층 신경망은 아님)과 같은 일반적인 기계 학습 알고리즘을 제공합니다. 또한 기능 추출, 변환, 차원 축소 및 선택을위한 도구가 포함됩니다. 기계 학습 파이프 라인을 구성, 평가 및 조정하기위한 도구 알고리즘, 모델, 파이프 라인 저장 및로드, 데이터 처리, 선형 대수 및 통계 수행을위한 유틸리티.

Spark MLlib는 Scala로 작성되었으며 선형 대수 패키지 Breeze를 사용합니다. Breeze는 최적화 된 수치 처리를 위해 netlib-java에 의존하지만, 오픈 소스 배포에서는 CPU의 최적화 된 사용을 의미합니다. Databricks는 GPU를 사용하는 맞춤형 Spark 클러스터를 제공하므로, 빅 데이터로 복잡한 기계 학습 모델을 학습하는 데 잠재적으로 10 배 더 빠른 속도를 얻을 수 있습니다.

Spark MLlib는 초보자가 혼란 스러울 수있는 지점까지 분류 및 회귀를위한 공통 알고리즘 및 모델의 트럭로드를 구현하지만 결국 전문가는 분석 할 데이터에 대한 좋은 모델을 찾을 수 있습니다. 이 과다한 모델에 Spark 2.x는 모델 선택이라고도하는 하이퍼 파라미터 튜닝의 중요한 기능을 추가합니다. 하이퍼 파라미터 튜닝을 통해 분석가는 파라미터 그리드, 추정기 및 평가자를 설정하고 교차 검증 방법 (시간이 많이 걸리지 만 정확함) 또는 훈련 검증 분할 방법 (빠르지 만 덜 정확함)이 최적의 모델을 찾을 수 있습니다. 데이터.

Spark MLlib에는 Scala 및 Java 용 전체 API, 대부분 Python 용 전체 API 및 R 용 대략적인 부분 API가 있습니다. 샘플 (Java 54 개 및 Scala 기계 학습 예제 60 개, Python 기계 52 개)을 계산하여 커버리지에 대한 좋은 느낌을 얻을 수 있습니다. 학습 예제와 5 개의 R 예제 만 있습니다. 내 경험상 Spark MLlib는 Jupyter 노트북을 사용하여 작업하는 것이 가장 쉽지만 자세한 Spark 상태 메시지를 길 들이면 콘솔에서 확실히 실행할 수 있습니다.

Spark MLlib는 기본 기계 학습, 기능 선택, 파이프 라인 및 지속성 방식으로 원하는 거의 모든 것을 제공합니다. 분류, 회귀, 클러스터링 및 필터링으로 꽤 잘 수행됩니다. Spark의 일부이므로 데이터베이스, 스트림 및 기타 데이터 소스에 대한 액세스가 뛰어납니다. 반면에 Spark MLlib는 TensorFlow, PyTorch, MXNet 및 Keras와 동일한 방식으로 심층 신경망을 모델링하고 훈련하도록 설정되지 않았습니다.

비용 : 무료 오픈 소스.

플랫폼 : Spark는 Java 7 이상, Python 2.6 / 3.4 이상 및 R 3.1 이상이 설치된 Windows 및 Unix 계열 시스템 (예 : Linux, MacOS) 모두에서 실행됩니다. Scala API의 경우 Spark 2.0.1은 Scala 2.11을 사용합니다. Spark에는 Hadoop / HDFS가 필요합니다.

Spark MLlib에 대한 내 리뷰를 읽어보세요.