케라스(Keras) 이해하기 (아키텍처, 역사)

    케라스(Keras)는 텐서플로우(Tensorflow)와 같은 머신러닝 & 딥러닝 엔진 위에 구축된 파이썬용 라이브러리입니다. 현재는 케라스가 텐서플로 프로젝트에 속해 있기 때문에 기본적인 엔진은 텐서플로로 인지하지만 예전에는 씨아노(Theano)를 위한 라이브러리 였습니다.

     

    케라스의 구조

    케라스의 구조

     

    위 구조를 보면 텐서플로 밑에 CPU, GPU, TPU가 있고 위에 케라스가 있는데요. 이와 같이 텐서플로우가 실질적으로 하드웨어(Hardware)를 제어한다면, 케라스는 하드웨어를 제어하는 텐서플로를 제어한다 이해를 하면 될 것 같습니다. 

     

    텐서플로가 하드웨어를 얼마나 잘 컨트롤하고, 어떻게 하면 더 효율적이고 효과적인 딥러닝 엔진을 만들 것인지 고민을 하고 있다면, 케라스는 텐서플로우를 제어해서 개발자들이 보다 쉽게 텐서플로를 컨트롤할 수 있는 관점으로 접근합니다.

     

    쉬운 API와 탄력성

    텐서플로를 1.0부터 썼던 사람이라면 케라스로 본격화된 2.0이 얼마나 쉬운지 잘 알겁니다. 그래서 흔히 지금 텐서플로를 다루면 "좋을 때 배웠네"라는 말을 하기도 합니다. 텐서플로우가 서빙 등 실제 사용에 유리한 반면에 파이토치(Pytorch)에게 산학연에 밀린 이유는 초창기 어려운 라이브러리의 역할이 컸었기 때문입니다.

     

    그러나 현재는 텐서플로우를 매우 쉽게 다뤄주는 케라스가 있기 때문에 파이토치에 근접하게 쉬운 딥러닝 엔진이 되었고, 2021년 말을 기준으로 100만명이 넘는 사람들이 케라스를 사용하게 되었으며, 구글(Google)을 비롯하여, 넷플릭스(Netflix), 우버(Uber), NASA, 옐프(Yelp), 스퀘어(Square) 등과 수백 개의 스타트업 기업들이 딥러닝 문제를 해결하거나 서비스하기 위해 케라스를 사용하고 있습니다.

     

     

    케라스는 사용자 층이 다양하기 때문에 모델을 구축하는데 있어서 다양한 방식을 제공하고 있습니다. 사용자 성향에 따라서 고수준에서 저수준까지 다양한 워크플로를 사용할 수 있으며, 사이킷런(Scikit-learn) 처럼 fit() 메소드 하나로 알아서 처리하게 만들거나, 넘파이(Numpy)를 사용하여 세부 내용을 완벽히 제어할 수 있습니다. 

     

    케라스의 역사

    이렇게 텐서플로를 위해서 태어난 것만 같은 케라스이지만, 포스팅 초반에 적힌 대로 케라스는 Theano(딥러닝 최초 자동 미분과 GPU 지원 라이브러리)를 위한 라이브러리로 2015년 3월(텐서플로는 2015년 11월)에 등장하였습니다.

     

    케라스는 텐서플로의 등장 이후 빠르게 텐서플로도 지원을 해주게 되었는데요. 씨아노 단일 백엔드였던 케라스는 텐서플로우 등장 이후 멀티백엔드(multibackend) 구조로 변경되었습니다.

     

    멀티백엔드로 변경된 케라스는 이후 마이크로소프트(Microsoft)의 CNTK와 아마존(Amazon)의 MXNet도 지원을 하였지만, 현재는 CNTK와 Theano는 개발이 중지되었고 아마존 MXNet의 경우 다른 곳에서 잘 사용되지 않기 때문에 사실상 텐서플로 단일백엔드가 되어 버렸습니다.

     

    그렇게 텐서플로와 케라스는 서로에게 공생 관계를 잘 유지해오다가 2019년 9월 릴리즈된 텐서플로 2.0에서 사실상 텐서플로 개발 라이브러리화 되었다고 보시면 됩니다. 1.x대의 텐서플로는 텐서플로의 독자적인 라이브러리(케라스 별도 설치)만 사용하는 비율이 꽤 됐지만 2.0(케라스 포함)이 되면서 사실상 케라스로 개발하는 것이 텐서플로로 개발하는 것과 같다라고 생각하시면 될 것 같습니다.

     

     

    반응형

    댓글

    Designed by JB FACTORY