uncategorized

어떤 딥러닝 프레임워크를 써볼까? 00_인트로

INTRO

‘인생은 선택의 연속이다’라는 격언은 괜히 있는 말이 아닙니다. 우리는 언제나 정말 다양한 상황에 놓이고, 그럴 때마다 무엇인가를 선택해야 합니다.

이는 거창한 상황이 아닌 프로그래밍의 사소한 부분에 있어서도 마찬가지입니다. 여러 사람이 (비교적) 쉽게 접근하고 무엇인가를 만들어 낼 수 있는 프로그래밍의 특성 상, 하나의 테마에 대해서도 서로 다른 여러가지 선택지가 존재하는 경우가 많습니다. 때문에 프로그래머는 텍스트 에디터로는 무엇을 사용할지부터 시작해서 어떤 프로그래밍 언어를 사용할지까지, 늘 상황과 취향에 맞춰 무엇인가를 선택해야 합니다.

딥러닝 프레임워크도 마찬가지입니다. 딥러닝이 주목받기 시작하면서, 그 개발을 도와주는 여러 프레임워크들이 등장하였습니다. 이들은 저마다의 특색을 갖고 있죠. 딥러닝 프로그래밍을 처음 시작하는 사람이라면, 이들 중 어떤 프레임워크를 사용할지 정하는 것이 가장 먼저 해야 할 일일 것입니다.

어떤 딥러닝 프레임워크를 써볼까? 프로젝트의 목적은 여러 딥러닝 프레임워크를 수박 겉핥기 식으로 살펴보는 것입니다. 단순히 그들이 구현되어 있는 언어나 사용성을 떠나, 각 프레임워크의 구성과 특징을 전체적으로 살펴보아 그들의 장단점을 알아내는 것이 그 목적입니다. RPG 게임에서 직업을 선택할 때 그 직업의 스킬 트리와 공략을 살펴보듯, 본 문서가딥러닝 프레임워크를 선택하는데 도움이 되기를 바랍니다.

“ 물론 현실은 그 무엇보다 친한 선배/친구가 사용하는 프레임워크를 사용하는 것이 최고입니다. “

프레임워크(framework) 란?

앞에서 프레임워크 라는 말을 반복적으로 사용하였습니다. 무슨 뜻이길래 이렇게 반복해서 사용한 것일까요?

Design Pattern을 창시한 GoF의 한 명이자, 프레임워크 설계의 대가 Ralph E. Johnson 교수는, Components, Frameworks, Patterns 에서 프레임워크를 다음과 같이 정의했습니다.

" A framework is a reusable design of all or part of a system that is represented by a set of abstract classes and the way their instances interact "

" A framework is the skeleton of an application that can be customized by an application developer "

즉, 사용자가 원하는 기능 구현에만 집중할 수 있도록 기본적인 기능이 구현되어 있는 틀을 뜻합니다. 비슷하게 사용되곤 하는 라이브러리(library)는 반복되는 코드 작성을 피하기 위해 재사용이 가능한 기능을 구현해놓은 것을 말합니다. 프레임워크는 틀 그 자체이며, 라이브러리는 그를 구성하는 것의 일부라고 생각하는 것이 좋을 것 같습니다.

결국, 딥러닝에 사용되는 기능은 상황에 따라 크게 차이나지 않습니다. 때문에 각 딥러닝 프로젝트에 도움을 주기 위해, 기본적인 부분들이 구현되어 있는 프레임워크를 제공하는 것입니다. 그러나 프로젝트에는 여러가지 상황과 조건이 존재하며, 그렇기 때문에 하나의 프레임워크로 모두를 커버할 수 없어 다양한 프레임워크가 생겨났다고 생각하는 것이 좋을 것 같습니다.

-

뭐 근데 사실 프레임워크와 라이브러리의 명확한 구분은 모호한 것 같습니다. 대표적인 딥러닝 프레임워크인 TensorFlow 의 홈페이지를 보면, TensorFlow 를 다음과 같이 설명하고 있습니다.

" An open source machine learning framework for everyone "

" TensorFlow™ is an open source software library for high performance numerical computation. "

정의에 프레임워크와 라이브러리가 중복으로 등장합니다. 애초에 둘 간의 구분이 명확하지 않음을 알 수 있습니다. 그냥 그 정의를 이해하고 넘어가면 될 것 같습니다.

비교

그렇다면 본격적으로 딥러닝 프레임워크들을 알아봅시다!

정말 많은 프레임워크들이 있겠지만, 주로 사용되는, 혹은 주로 언급되는 프레임워크를 조금만 꼽아보자면 TensorFlow, Keras, Caffe, PyTorch, DL4J, Theano, Torch 등이 있습니다.

인기(Popularity)

얼마나 많은 사람들이 그 프레임워크를 사용하는가는 정말 중요한 요소입니다.

저는 이를 체크하는데 2가지 요소를 사용하였습니다. Google TrendsGitHub 가 그것입니다.

먼저 Google Trends 부터 확인할까요? (제 기준에서) 가장 대표적인 5개의 딥러닝 프레임워크 - TensorFlow, PyTorch, Keras, Caffe, Torch - 들을 확인해보았습니다.

Python

References

프레임워크

[개발용어] 라이브러리, 프레임워크, 아키텍처, 플래폼이란?

Components, Frameworks, Patterns - Ralph E. Johnson

Ralph Johnson의 Evolving Frameworks

Share