간편한 데다, 텐서플로우랑 만나면 그렇게 궁합이 좋다는데?
오늘은 머신러닝, 딥러닝 프레임워크에 대해 좀 더 알아보는 시간입니다. 앞선 콘텐츠에서 목적, 개발 환경 또는 개발자의 습관이나 취향, 주 사용 언어 등 다양한 요건에 의해서 여러 가지 프레임워크들이 쓰이고 있다고 말씀드렸었는데요. 그중에서 가장 많은 언급량을 자랑하는 ‘텐서플로우(Tensorflow)’를 먼저 소개해 드렸었지요. :)
▶ 인공지능 프레임워크, 좀 더 알아보자 : 텐서플로우 (Tensorflow) 편
다양한 프레임워크들 중, 두 번째로 함께 알아볼 프레임워크는 바로 ‘케라스(Keras)’입니다. ‘케라스’는 ‘텐서플로우(Tensorflow)’와 함께 대표적인 파이썬(Python) 딥러닝 라이브러리인데요. 케라스는 정확히 말하면, 파이썬(Python)으로 작성된 신경망 라이브러리입니다. 딥러닝 엔진을 쉽게 다룰 수 있는 인터페이스 라이브러리인 데다 직관적인 API를 제공하고 있고, 오픈 소스라는 점 등이 더해져, ‘텐서플로우’와 함께 긴 시간 사랑을 받아온 프레임워크인데요. 텐서플로우(Tensorflow)를 기반으로 하여 케라스(Keras)를 사용할 수 있게 된 이후로, 두 프레임워크의 사용자 비율은 더욱 높아지고 공고해져서, 지금도 세계적인 규모를 유지하고 있습니다. 2021년 말을 기준으로 100만 명이 넘는 사람들이 케라스를 사용하고 있다고 하네요.
케라스는 2015년 3월, ‘사용자 친화성’에 중점을 두고 개발한 딥러닝 프레임워크입니다. 사용자에게 필요한, ‘빠르고’, ‘간편하고’, ‘쉽다’는 특성이 있습니다. 거의 모든 종류의 딥러닝 모델을 간편하게 만들고 훈련할 수 있습니다. 현재는 텐서플로우와의 조합으로 쓰이고 있어 최근의 AI 개발자분들은 케라스의 기본적인 엔진을 텐서플로로 인지하시기도 하는데요. 예전에는 티아노(혹은 씨아노, Theano)를 위한 라이브러리였습니다.
케라스의 ‘빠름’은 정말이지 매력적인 장점입니다. 빨리 모델을 만들기 위해서는 간편해야 하겠지요? 이 ‘신속성’과 ‘간편함’은 케라스를 설명할 수 있는 대표 키워드라 할 수 있습니다. 특히 ‘간편함’은 머신러닝, 딥러닝 초보자에게 매력적으로 다가올 수밖에요. 그래서 주로 입문용으로 추천하는 경우가 제일 많은 프레임워크입니다. 처음 머신러닝, 딥러닝을 시작하셨다면, 그리고 간단하게 모델을 제작해야 하거나 이른 시일 안에 프로토타이핑해야 한다면 Keras를 선택하여 개발하는 것이 적절한 선택일 수 있겠습니다.
방금 말씀드린 케라스를 추천하는 경우를 생각해 보면, 사실상 넓게, 다양한 사용자 케이스를 커버하고 있습니다. 그래서인지, 케라스는 모델 구축에 있어 다양한 방식을 제공하고 있는데요. 사용자 수준 높낮이에 따라 다양한 워크플로우(workflow)를 사용할 수 있어요. 케라스의 주요 데이터 구조는 model,로 레이어를 조직하는 방식인데, 사이킷런(Scikit-learn)처럼 fit() 메소드 하나로 알아서 모델 구축 등의 과제를 처리하게 만들거나, 넘파이(Numpy)를 사용하여 세부 내용을 완벽히 제어할 수 있다는 아주 매력적인 장점이 있습니다. ;)
케라스의 ‘간편함’은 장점이지만, 문제를 낳기도 합니다. 모듈에 적합한, 빠르고 간단한 프로젝트라면 케라스가 가진 장점이 도움이 되겠지만요. 간편하고 쉽게 모델을 만들 수 있도록 모듈화되어 있는 케라스의 특성상, 프로젝트가 복잡해지면 모듈을 응용하고, 구현하기가 쉽지 않아진다는 것입니다. 복잡한 프로젝트에 구현 범위가 다소 좁아져서, 결국은 텐서플로우처럼 직접 기초 레벨부터 작업해야 하는 프레임워크를 찾게 될 수밖에 없게 됩니다. 케라스의 특성이 너무나 강한 나머지, 모든 케이스를 커버할 수는 없게 되는 것이지요. 마치 아주 간단한 UI 내에서 애플리케이션 배열만 정리할 수 있는 스마트폰 화면처럼 말이에요. :)
케라스는 다양한 백엔드 위에서 동작합니다. 앞서 케라스에 대하여 설명해 드릴 때, 케라스는 텐서플로뿐만 아니라 티아노(Theano)를 커버했었다고 말씀드렸었는데요. 이 두 프레임워크 외에도 다른 프레임워크와 함께 쓰일 수 있어요. 그렇기에 어떤 오류가 발생했을 때 케라스 자체의 문제인지, 텐서플로우 등의 문제인지 특정하기 어려운 단점이 있습니다.
일부에서는 케라스가 워낙 간단하다 보니, 제공되는 함수에 대한 목록은 있어도, 그에 대한 설명 등의 문서화가 제대로 되어 있지 않다는 점을 아쉬운 점으로 꼽기도 합니다. 그 때문에 초보자가 케라스를 사용하더라도 어느 지점에 이르면 어려움을 겪을 수 있게 됩니다.
텐서플로우(Tensorflow)에 대한 이야기를 나눌 때 케라스를 언급했던 적이 있었는데요. 2019년에 텐서플로우 2.0 버전이 출시되면서, 모델 학습에 케라스(Keras) API를 사용하게 되었다는 이야기였지요. 케라스는 2015년 11월 텐서플로우가 세상에 나온 이후, 티아노(Theano)와 텐서플로우를 모두 커버하는 멀티 백엔드 구조가 되었는데요. 텐서플로우와의 본격적인 결합은 2019년이라고 할 수 있겠습니다.
두 프레임워크의 조합은 각자 떨어져 있을 때는 아쉽게 느껴졌던 점들을 상호 보완할 수 있어 정말 좋아 보이는데요. 오죽하면 케라스를 만난 텐서플로우를 시작으로 AI 개발을 하게 된 개발자들은 “쉽게 배웠다”라는 우스개 섞인 부러운 이야기도 나온다고 하더라고요. 그래서일까요? 텐서플로우와 케라스를 활용하여 머신러닝, 딥러닝을 하는 경우가 점차 늘게 되었어요. 이제는 ‘케라스’로 개발한다는 것은, ‘텐서플로우’로 개발한다는 것과 동일한 의미라고 보셔도 됩니다.
텐서플로우가 어떻게 하면 더 효율적인 딥러닝 엔진을 만들 것인지 하드웨어의 관점에서 고민하는 프레임워크라면, 케라스는 ‘간편하고 빠르다’라는 장점을 십분 발휘해서, 개발자들이 더 쉽게 텐서플로우를 컨트롤할 수 있도록 합니다. 즉, 텐서플로우가 실질적으로 하드웨어(Hardware)를 제어한다면, 케라스는 하드웨어를 제어하는 텐서플로를 제어한다, 정도로 구조도를 이해해 볼 수 있겠습니다.
그런데, 이렇게 잘 맞는 단짝 같은 텐서플로우와 케라스의 조합보다, 파이토치가 더 주목받고 있다는 이야기가 있습니다. 파이토치는 ‘쉽다’라는 점을 강력하게 어필할 수 있는 프레임워크입니다. 아무래도 ‘텐서플로우’가 초보자에게 만만치 않은 프레임워크이다 보니, 케라스와 만나 간편해졌더라도, 파이토치의 매력과 비교할 수 없지 않으냐는 의견이 많습니다.
어떤 프레임워크보다도 특색 있는 ‘케라스(Keras)’에 대하여 알아보았습니다. ‘인공신경망’이라는 개념만으로도 어렵게 느껴질 수 있는 딥러닝을 좀 더 쉽게 접근할 수 있게 해준다는 점에서, 케라스의 매력은 분명해 보입니다. 현재 텐서플로우를 사용하면 케라스 역시 사용하게 될 수밖에 없는 조합 특성상, AI 개발 업무를 곁에서 접하시는 분들이나 AI 개발을 막 시작하시려는 분들이라면, 케라스는 꼭 알고 있어야 할 프레임워크라는 점을 다시 한번 확인하게 되었네요.