Theano 이야기

Tue 12 May 2015

Theano는 정말 물건인게 함수형 프로그래밍 철학, 보다 정확히는 Symbolic Tensor Algebra를 구현해놔서 기계학습에서 자주 다루게 되는 복잡한 Matrix 연산, 그리고 Matrix 미분을 몇 줄 적는 정도로 끝나는 엄청나게 간단한 레벨로 올려놨다 (Sympy는 Matrix 연산에서는 많이 부족). 이를 이용하면 Neural Network 모델에서 Back Propagation 코드는 한 줄로 끝난다(!!). 게다가 똑같은 코드를 전혀 수정하지 않고 GPU에서 돌릴수 있다는 더 엄청난 메리트가 있다.

물론 단점도 몇 개 있는데,

  • Python 위에서 함수형을 구현하다 보니 문법이 꽤 번거롭다.
  • 에러메시지가 Readability가 떨어져서 종종 어디를 고쳐야 할 지 감이 안온다.
  • MATLAB, numpy 처럼 동적 Matrix 타입이 기본이라 아쉽다.

1번 단점은 어쩔 수 없고, 2번 단점은 버전업이 되면 개선될 부분이다. 3번에서 정적 Matrix 타입이라고 하면 Matrix의 차원 (m x n)이 타입으로 같이 정의되는 걸 말한다. 예를 들면 C++ 에서는 이걸 (n,m)에 대한 Template Class로 정의할 수 있겠다. MATLAB, numpy의 경우는 이 부분은 동적으로 놔두어 일단 더 Flexible 하게 다룰 수 있는 정책을 택했다. 하지만 적어도 Symbolic 연산에서는 정적 타입으로 하는 게 메리트가 훨씬 많다는 게 내 생각이다. 이러한 철학의 라이브러리로 Haskell의 hmatrix-static 패키지나, Dependent Type Language인 Agda 등이 있으나 아직 가져다 사용하기엔 문서화된 것도 적고, 프로젝트도 성숙한 단계가 아니다.

아무튼 이러한 소소한 단점 따위는 무시할만큼 장점이 많은 Theano. 도저히 한 연구실에서 만들었다고 생각되지 않는 Open Source 퀄리티에 문서화도 잘 돼있는 편. 함수형 언어에 대한 기본 개념이 있고, MATLAB이나 numpy를 쓰던 사용자라면 정말 쉽게 배울 수 있다. 그리고 Deep Learning에 뛰어들 수 있다.

Category: Machine Learning Coding Tagged: Theano Personal Thoughts

Comments