AI 기반 딥러닝 기술로 영어 공부까지 하는 시대가 왔습니다. 자율주행 자동차, CCTV 분석 등 인간의 손이 가는 곳마다 점차 딥러닝이 도입되어 우리의 삶을 편하게 해주고 있는데요.
딥러닝을 구현하는데 필요한 가장 기본 골조가 되는 것이 바로 딥러닝 소프트웨어 프레임워크입니다.
* 관련 기사 : 인공지능(AI)으로 영어교육이 확 달라지고 있다
딥러닝 프레임워크의 종류도 텐서플로(TensorFlow), 케라스(Keras), 테아노(Theano), 파이토치(Pytorch), CNTK 등 다양한데요, 딥러닝 프레임워크에 대해 처음 관심 가진 분들이라면 조금 생소하고 어려운 개념일 수 있습니다. 이 중 어떤 것을 배워 둬야 하는 것인지 헷갈리고 어려우신가요?
딥러닝 개발자 채용공고에 가장 많이 등장하기도 하고, 실제로 많은 분야에서 상용되기에 알아두면 좋을 프레임워크인 텐서플로, 파이토치, 케라스에 대해 알아보도록 할게요.
개념과 특징, 장단점을 잘 알아두고 나면 딥러닝 프레임워크를 어떤 것으로 선택하여 공부할지 가닥을 잡는 데 도움이 될 거예요.
텐서플로 vs 파이토치 vs 케라스 비교하기
대표적 딥러닝 프레임워크인 텐서플로우, 케라스, 파이토치에 대해 살펴보겠습니다. 우선 한 눈에 보기 쉽게 정리한 장단점부터 볼까요?
– 데이터 플로우 그래프를 통한 풍부한 표현이 가능함
– 계산 구조와 목표 함수만 정의 면 자동으로 미분 계산을 처리함
– 텐서보드를 통해서 파라미터 변화 양상 및 DNN 구조를 알 수 있음<단점>
– 메모리를 효율적으로 사용하지 못하고 있음
– Symbolic Loop 기능이 유연하지 못하며, 함수가 있어도 텐서 타입으로만 적용해야 함
– 익히기 쉽고 간결하며 구현이 빠르게 됨
– 비교적 빠른 최적화가 가능함
– 그래프를 만들면서 동시에 값을 할당하는 define by run 방식으로 코드를 깔끔하게 작성할 수 있음<단점>
– 텐서플로우에 비해 학습에 필요한 예제를 구하기 쉽지 않음
– 텐서플로우보다 디테일한 모델링이 불가능함
– 사용자 친화성, 모듈성, 확장성이있어서 일관되고 간결한 API를 제공함
– 배우기 쉽고 모델 구축이 쉬움
– 컨볼루션 신경망, 순환 신경망, -그리고 둘의 조합까지 모두 지원<단점>
– 어떤 오류가 발생했을 때 케라스자체의 문제인지, 백엔드 언어의 문제인지 특정하기 어려움
– 문서화가 제대로 되어 있지 않고이용자 수가 적어 참고할 곳이 부족함
1) 텐서플로 (TensorFlow)
텐서플로우는 데이터 플로우 그래프 (Data Flow Graph) 구조를 사용하는 프레임워크입니다. 구글이 개발한 오픈소스 소프트웨어 라이브러리고, 또한 머신러닝과 딥러닝에 적용하여 쉽게 사용할 수 있도록 여러 기능들을 제공하고 있지요.
텐서플로우는 각종 신경망 학습에 사용되는데요, 실제로 이미지 인식, 반복 신경망 구성, 기계 번역, 필기 숫자 판별 등에 활용되고 있습니다. 대규모 예측 모델 구성에 강점을 보이기 때문에 베타 테스트 단계부터 실제 서비스 구현까지 사실상 거의 모든 딥러닝 프로젝트에서 활용도가 높은 프레임워크입니다. 게다가 구글에서 제공하는 오픈소스 라이브러리기 때문에 지속적인 성능 개선이나 속도, 안정 부문에서도 우수합니다. 하지만 딥러닝 모델을 구축하는 단계에서 기초 레벨부터 직접 만들어 나가야 하므로 초보자에게는 추천하지 않는 프레임워크지요.
2) 파이토치 (Pytorch)
페이스북의 인공지능(AI) 연구팀이 개발한 파이썬 기반 오픈소스 라이브러리인 ‘토치(Torch)’가 있습니다. 파이토치는 이 토치에 바탕을 두고 만들어진 프레임워크인데요. 절차가 간단한 편이며 그래프는 동적으로 변화할 수 있고, 코드 자체도 파이썬과 유사해 초보자들도 쉽게 시작할 수 있습니다.
우선 파이토치는 코드를 깔끔하고 직관적으로 작성할 수 있다는 장점이 있습니다. 그래프를 만들면서 동시에 값을 할당하는 Define by run 방식을 사용하기 때문인데요. 게다가 텐서플로우가 신경망을 유기적으로 만들 수 없다는 성능의 한계가 있지만, 파이토치는 메모리에서 연산 하면서도 신경망 사이즈도 최적으로 동작시킬 수 있다는 강점이 있습니다. 게다가 학습 속도까지 텐서플로우보다 빠르다고 하니, 선호도가 높은 이유를 아시겠죠. 파이토치는 Numpy를 대체할 수 있으며 GPU를 이용한 연산도 가능하므로, 최근 딥러닝 관련 논문들이나 업계에서도 텐서플로우보다는 연산도 가능하고 속도도 빠른 파이토치를 선호하는 추세입니다.
3) 케라스 (Keras)
구글에서 프로젝트 연구적 노력의 목적으로 개발된 프레임워크, 케라스입니다. 파이썬으로 작성된 오픈 소스 신경망 라이브러리지요. 딥 신경망과의 빠른 실험을 가능케 하도록 만들어졌으며 최소한의 모듈 방식의 확장 가능성에 초점을 둡니다. 즉 텐서플로우의 문제를 해결하기 위해 개발된, 더욱 단순화된 인터페이스를 제공하는 프레임워크라고 생각하면 쉽습니다. 케라스에서 제공하는 시퀀스 모델로 원하는 레이어를 쉽게 쌓을 수도 있고, 더 복잡한 모델을 구성할 땐 케라스 함수 API를 활용하여 구성할 수도 있습니다.
일반 사용 사례에 가장 최적화된 간단하고 일관적인 인터페이스라는 점에서 강점을 가집니다. 또한 사용자 오류에 대해 명확하게 피드백을 제공해주지요. 컨볼루션 신경망, 순환 신경망, 그리고 둘의 조합까지 모두 지원해준다는 장점도 있고요. 하지만 문서화가 제대로 되어 있지 않아, 함수에 대한 설명을 찾기 쉽지 않으며 충분한 공식 예제가 부족하다는 단점이 있습니다. 한국에서 사용하는 개발자 수가 적어 물어볼 곳이 마땅치 않은 것도 사실이고요.
그렇다면 어떤 프레임워크가 가장 좋을까?
텐서플로, 케라스, 파이토치 세 가지 프레임워크의 특징과 장단점에 대해 간단히 알아보았는데요, 이쯤 되면 ‘그래서 실무에서는 세 가지 중에 뭐가 제일 많이 활용된다는 거야?, 나는 뭘 배우면 되는 거지?’ 라는 궁금증이 생길 수도 있겠네요. 하지만 세 가지 모두 특징이 명확하므로, 상황에 따라 활용하는 프레임워크 종류는 모두 다릅니다.
텐서플로는 원래 학계와 기업 모두에서 가장 인기 있던 오픈소스 프레임워크였는데, 파이토치가 등장한 이후 커뮤니티의 주도로 다양한 사용 사례에 대한 사용 편의성, 배포 편의성을 개선하며 빠른 속도로 따라잡고 있습니다. 파이토치는 자동차 업계에서 활발하게 도입되어 테슬라, 리프트 레벨 (Lyft Lever 5) 등의 자율 운전 시스템 파일럿에 적용되고 있거든요. 게다가 넷플릭스나 왓챠 등 OTT 서비스에서 ‘당신이 좋아할 콘텐츠’ 등 다들 한 번쯤 보셨을 법한 콘텐츠 분류, 추천에 사용되는 기능으로도 활약 중입니다.
하지만 뭐가 더 낫고, 별로다 하는 정답은 없어요. 딥러닝 프레임워크는 다루기 까다로운 만큼 확실히 이론과 개념을 이해하고 실습으로 익히는 것이 중요합니다. 위에서 알아보았듯 세 가지 모두 장단점이 명확하므로, 여러 가지를 배우고 써보며 본인이 잘 다룰 수 있는 프레임워크를 적시적기에 선택하는 것이 좋겠지요.