데이터분석/Deep Learning

Deep Learning 개발 라이브러리 장단점

늘근이 2017. 11. 14. 22:58

출처 : https://deeplearning4j.org/kr/compare-dl4j-torch7-pylearn

각각의 라이브러리의 특징을 간단한 버전만 가지고  옴.


Pytorch

  • (+) 결합하기 쉬운 많은 모듈 조각
  • (+) 자신만의 레이어 유형을 작성하고 GPU에서 실행하기 쉬움
  • (+) Lua. ;) (대부분의 라이브러리 코드는 Lua로 되어있음, 읽기 쉬움)
  • (+) 사전 학습된 모델 대거 존재
  • (+) PyTorch
  • (-) Lua
  • (-) 보통 스스로 학습 코드를 작성해야 함 (적은 플러그 앤 플레이)
  • (-) 상업적 지원 없음
  • (-) 미완성 문서

Theano

  • (+) Python + Numpy
  • (+) 컴퓨테이셔널 그래프에 적합한 추상화
  • (+) 컴퓨테이셔널 그래프에 RNN이 잘 맞음.
  • (-) Raw Theano는 수준이 낮은 편임.
  • (+) 고급 래퍼 (Keras, Lasagne) 의 어려운 부분을 완화
  • (-) 오류 메시지는 도움이 되지 않는 경우가 있음.
  • (-) 대형 모델은 컴파일 시간이 오래 걸릴 수 있음.
  • (-) 토치보다 훨씬 “복잡함”
  • (-) 사전 학습 된 모델에 대한 패치 지원
  • (-) AWS에서 잦은 버그가 발생
  • (-) 단일 GPU

TensorFlow

  • (+) Python + Numpy
  • (+) 컴퓨테이션 그래프 앱스트랙션, Theano와 비슷
  • (+) Theano보다 컴파일 시간이 빠름
  • (+) TensorBoard 시각화
  • (+) 데이터 및 모델 병렬 처리
  • (-) 다른 프레임 워크보다 느림.
  • (-) Torch보다 훨씬 “더 복잡”하지만 기능이 많음.
  • (-) 사전 학습된 모델 부족.
  • (-) 컴퓨테이션 그래프는 순수 파이썬으로 속도가 느림.
  • (-) 상업적 지원 없음.
  • (-) 파이썬으로 드롭 아웃되어 각각의 새로운 트레이닝 배치를 로드
  • (-) 툴로 사용하기 어려움.
  • (-) 다이나믹 타이핑은 대형 소프트웨어 프로젝트에서 오류가 발생하기 쉬움.


Caffe

  • (+) 피드 포워드 네트워크 및 이미지 처리에 적합.
  • (+) 기존 네트워크 미세 조정에 적합.
  • (+) 코드 작성 없이 모델 트레이닝 가능.
  • (+) 파이썬 인터페이스가 매우 유용.
  • (-) 새로운 GPU 레이어에 C ++ / CUDA를 작성해야 함.
  • (-) 회귀망에 적합하지 않음
  • (-) 큰 네트워크를 다루기에는 불편함 (GoogLeNet, ResNet)
  • (-) 확장성이 없음
  • (-) 상업적 지원 없음
  • (-) 개발이 느려지고 있으며, 곧 유효하지 않을 수 있음

Keras

  • (+) Torch에서 영감을 얻은 직관적 API
  • (+) Theano와 작업 가능, TensorFlow와 Deeplearning4j 백엔드 (CNTK 백엔드 예정)
  • (+) 빠르게 성장하고 있는 프레임워크
  • (+) 신경망의 표준 Python API이 될 가능성이 큼

CNTK - Microsoft
Chainer - Preferred Networks
DSSTNE(Deep Scalable  Sparse Tensor  Network  Engine) - Amazon
Dynet - Carnegie Mellon University 
MxNet - Amazon Web Service
Paddle - Baidu
BigDL - Spark용, Only works on Intel Chip
H2O - H2O.ai

DL4J에서 주장하는 자바의  이용이유는, 재미있게도 우리나라  상황과 좀  닮아있다.
대기업 및 정부기관이 JVM기반으로 돌아간다는것을 중점으로 두며,
하둡생태계와 Kafka, Spark가 자바와 스칼라로 작성되었다는것을 강점으로 둔다.
파이썬 자체에서 생긴 놈들은 상당히 느릴것이 뻔하지만, 자바는 그보다는 빠를것이며 특히나 사사건건 컴파일을 해주지 않아도 된다는점은 나름의 강점으로 작용한다고 주장한다. Numpy의 강력함또한 인지하고 있는 상태. 
다만, Scala가 사실 굉장히 간결한 언어라고 생각할수있는데, 직접 짜보면 코드가 오히려 제대로 읽고 쓰기 어려울때가 많다. Kotlin의 경우는 조금더 접근이 쉬우며 기존 자바와 크게 유리되어있지도 않아 추후에 작업을 하게 된다면 스칼라보다는 코틀린으로 ..