이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.24 17:15
케라스는 파이썬으로 작성된 오픈 소스 딥 러닝 라이브러리이다. 2015년 3월 27일에 처음 출시되었으며, 아파치 라이선스 2.0 하에 배포된다. 케라스의 주요 목적은 인공신경망 모델을 빠르게 구축하고 실험할 수 있도록 사용자 친화적인 고수준 API를 제공하는 것이다.
이 라이브러리는 다층 퍼셉트론, 컨볼루션 신경망, 순환 신경망과 같은 기본적인 신경망 구조부터 이들을 조합한 복잡한 모델까지 직관적으로 구성할 수 있도록 설계되었다. 케라스는 자체적인 저수준 연산 라이브러리를 포함하지 않고, 텐서플로나 파이토치와 같은 전문적인 딥 러닝 백엔드 엔진 위에서 동작한다는 점이 특징이다.
이러한 설계 철학 덕분에 연구자와 개발자는 모델 설계와 실험에 집중할 수 있으며, 복잡한 백엔드 코드를 직접 작성할 필요가 크게 줄어든다. 케라스의 모듈화된 구조는 사용자가 필요한 구성 요소를 쉽게 선택하고 연결하여 신경망을 조립하는 방식을 가능하게 한다.
케라스는 2015년 3월 27일에 처음 출시된 파이썬 기반의 고수준 딥 러닝 라이브러리이다. 초기에는 테아노와 CNTK를 주요 백엔드 엔진으로 지원하며, 사용자가 직관적인 API를 통해 복잡한 신경망 모델을 빠르게 구축할 수 있도록 설계되었다. 이로 인해 연구 및 프로토타입 개발 분야에서 빠르게 인기를 얻었다.
2017년, 구글은 자사의 핵심 머신러닝 프레임워크인 텐서플로의 2.0 버전부터 코어 레벨에서 케라스를 공식적인 고수준 API로 통합하겠다고 발표했다. 이에 따라 2019년에 출시된 텐서플로 2.0에서는 케라스가 사실상 표준 인터페이스가 되었으며, tf.keras 모듈을 통해 완전히 통합되었다. 이 통합은 사용자 경험을 단순화했지만, 기존의 낮은 수준의 텐서플로 1.x 세션 방식에 익숙했던 사용자들에게는 상당한 변화를 요구하기도 했다.
최근에는 케라스 3.0의 발표와 함께 다시 다중 백엔드 지원 체제로의 전환이 이루어지고 있다. 새로운 버전에서는 텐서플로뿐만 아니라 파이토치와 JAX도 공식 백엔드로 지원하여, 사용자가 선호하는 하위 엔진을 유연하게 선택할 수 있는 환경을 제공한다. 이는 프레임워크에 종속되지 않는 모듈화된 설계 철학을 재확인하는 것이며, 인공지능 생태계 내에서 케라스의 지속적인 적응력을 보여준다.
케라스는 독립적인 딥 러닝 API를 제공하지만, 자체적으로 저수준의 연산을 수행하지는 않는다. 대신 하나 이상의 외부 딥 러닝 엔진을 '백엔드'로 선택하여 사용한다. 이는 사용자가 고수준의 모델 구성 인터페이스에 집중하면서도, 백엔드 엔진의 성능과 기능을 활용할 수 있게 해주는 설계 철학의 핵심이다.
초기 버전의 케라스는 Theano, Microsoft Cognitive Toolkit(CNTK), 그리고 TensorFlow를 주요 백엔드로 지원했다. 사용자는 설정 파일을 통해 기본 백엔드를 쉽게 전환할 수 있었으며, 이는 연구나 개발 환경에 따라 다른 연산 라이브러리의 장점을 취할 수 있는 유연성을 제공했다. 예를 들어, Theano는 연구 분야에서, TensorFlow는 프로덕션 환경에서 각각 강점을 보였다.
2017년 구글의 발표 이후, 케라스는 TensorFlow 2.0에 공식적으로 통합되어 그 기본 고수준 API가 되었다. 이 시점부터 TensorFlow는 케라스의 '권장' 백엔드이자 사실상의 표준이 되었다. 그러나 케라스 3.0에서는 다시 다중 백엔드 지원이 강화되어, PyTorch와 JAX도 공식적으로 지원하는 백엔드로 추가되었다. 이를 통해 사용자는 동일한 케라스 코드로 다양한 백엔드 프레임워크를 실험하고 활용할 수 있는 선택권을 다시금 확보하게 되었다.
케라스의 핵심 설계 철학은 사용자 친화적인 고수준 API를 제공하는 것이다. 이는 복잡한 딥 러닝 모델을 직관적이고 간결한 코드로 빠르게 구현하고 실험할 수 있도록 한다. 사용자는 낮은 수준의 텐서 연산이나 계산 그래프를 직접 구성할 필요 없이, 레고 블록을 조립하듯이 레이어를 쌓아 모델을 만들 수 있다.
이 고수준 API는 주로 Sequential 모델과 함수형 API 두 가지 방식으로 제공된다. Sequential 모델은 레이어를 선형적으로 순차적으로 쌓는 단순한 구조에 적합하며, 몇 줄의 코드로 모델을 정의할 수 있다. 더 복잡한 다중 입력, 다중 출력 또는 잔차 연결과 같은 비순차적 토폴로지를 가진 모델을 구성할 필요가 있을 때는 함수형 API를 사용한다. 함수형 API는 각 레이어를 함수처럼 호출하고 이를 연결하여 유연한 모델 그래프를 정의할 수 있게 해준다.
이러한 접근 방식은 모델 구성, 컴파일, 학습, 평가의 전형적인 워크플로우를 표준화한다. 사용자는 compile() 메서드를 통해 옵티마이저, 손실 함수, 평가 지표를 명시하고, fit() 메서드 하나로 훈련 데이터에 대한 학습을 시작할 수 있다. 이후 evaluate()나 predict() 메서드를 사용하여 모델 성능을 측정하거나 새로운 데이터에 대한 예측을 수행한다. 이로 인해 딥 러닝의 진입 장벽을 크게 낮추고, 연구자와 개발자가 아이디어 검증과 프로토타이핑에 집중할 수 있게 했다.
케라스의 핵심 설계 철학 중 하나는 모듈화이다. 이는 신경망을 구성하는 기본 요소들을 독립적이고 재사용 가능한 모듈로 정의하여, 이를 조립하듯이 복잡한 모델을 쉽게 구축할 수 있게 한다. 주요 구성 요소인 계층, 활성화 함수, 옵티마이저, 손실 함수, 평가 지표 등은 모두 모듈로 제공되며, 사용자는 이들을 블록처럼 연결하여 다층 퍼셉트론, 컨볼루션 신경망, 순환 신경망 또는 이들의 조합 모델을 직관적으로 만들 수 있다.
이러한 모듈화 덕분에 사용자는 세부적인 구현보다는 모델의 구조와 논리에 집중할 수 있다. 예를 들어, 합성곱 계층, 풀링 계층, 완전 연결 계층을 순차적으로 쌓아 이미지 분류 모델을 구성하거나, LSTM이나 GRU 같은 순환 계층을 추가하여 시계열 데이터를 처리하는 모델을 빠르게 설계할 수 있다. 또한, 사용자 정의 계층이나 함수를 만들어 기존 모듈과 함께 사용하는 것도 가능하여 확장성도 높다.
케라스의 핵심 기능 중 하나는 직관적인 방식으로 딥 러닝 모델을 구성하는 것이다. 사용자는 순차적 모델(Sequential model) 또는 함수형 API(Functional API)를 선택하여 네트워크 구조를 정의할 수 있다. 순차적 모델은 레이어를 선형으로 쌓아가는 간단한 방식이며, 함수형 API는 다중 입력 또는 다중 출력 모델, 공유 레이어를 사용하는 복잡한 비순환 그래프 구조의 모델을 구성할 때 유용하다.
모델 구성은 레이어 객체를 추가하는 방식으로 이루어진다. 케라스는 다층 퍼셉트론을 위한 Dense 레이어, 컨볼루션 신경망을 위한 Conv2D 레이어, 순환 신경망을 위한 LSTM이나 GRU 레이어 등 다양한 기본 구성 요소를 제공한다. 또한, 배치 정규화, 드롭아웃, 풀링 레이어와 같은 기능도 포함되어 있어 복잡한 모델 아키텍처를 쉽게 구축할 수 있다.
케라스에서 모델을 구성한 후에는 컴파일 단계를 거쳐야 한다. 컴파일 과정에서는 모델이 학습 및 추론에 사용할 손실 함수, 최적화 알고리즘, 그리고 평가 지표인 메트릭을 지정한다. 사용자는 model.compile() 메서드를 통해 이 설정을 간편하게 할 수 있다. 손실 함수는 모델의 예측 오차를 계산하는 함수이며, 최적화 알고리즘은 이 손실을 최소화하기 위해 가중치를 업데이트하는 방법을 정의한다. 메트릭은 학습 과정에서 모델의 성능을 모니터링하기 위한 추가 지표를 제공한다.
컴파일이 완료되면 model.fit() 메서드를 사용하여 모델 학습을 시작한다. 이 메서드는 학습 데이터와 검증 데이터, 에포크 수, 배치 크기 등을 인자로 받는다. 학습이 진행되는 동안 케라스는 각 에포크마다 지정된 메트릭을 기준으로 학습 데이터와 검증 데이터에 대한 성능을 자동으로 출력하여 사용자가 학습 진행 상황을 실시간으로 확인할 수 있게 한다. 또한, 콜백 기능을 활용하면 학습 중간에 모델 가중치를 저장하거나 학습률을 조정하는 등의 세부 제어가 가능하다.
fit() 메서드는 학습 데이터를 직접 메모리에 로드하여 사용할 수도 있지만, 대용량 데이터를 처리할 때는 제너레이터를 활용할 수 있다. 제너레이터를 사용하면 데이터를 배치 단위로 디스크에서 불러와 메모리 효율성을 높일 수 있다. 학습이 완료된 모델은 model.save()를 통해 전체 모델 구조와 가중치를 하나의 파일로 저장하여 나중에 재사용하거나 배포할 수 있다.
케라스는 모델 학습이 완료된 후, 해당 모델의 성능을 평가하고 새로운 데이터에 대한 예측을 수행하는 기능을 직관적인 API로 제공한다. 평가와 예측은 모델 개발 과정의 최종 단계로서, 모델의 실용성을 판단하는 데 핵심적이다.
model.evaluate() 메서드를 사용하면 검증 데이터셋이나 테스트 데이터셋에 대한 모델의 최종 성능을 정량적으로 평가할 수 있다. 이 메서드는 모델을 컴파일할 때 지정한 손실 함수와 평가 지표(예: 정확도)를 기반으로 성능 수치를 계산하여 반환한다. 이를 통해 모델이 학습 데이터에 과적합되었는지, 혹은 일반화 성능은 어느 정도인지를 확인할 수 있다.
한편, model.predict() 메서드는 학습된 모델을 활용하여 새로운 입력 데이터에 대한 실제 예측값을 생성한다. 이 메서드는 배치 처리를 지원하여 대량의 데이터도 효율적으로 처리할 수 있다. 예측 결과는 주로 분류 작업에서는 클래스 확률이나 레이블로, 회귀 분석 작업에서는 연속적인 수치로 제공된다. 이러한 예측 기능은 실제 서비스 환경에서 모델을 배포하여 활용하는 기반이 된다.
2017년, 구글은 TensorFlow 2.0부터 코어 레벨에서 케라스를 지원하도록 변경하겠다고 발표했다. 이에 따라 2019년에 공개된 TensorFlow 2.0 안정 버전부터는 고수준 API가 사실상 케라스를 통해서만 제공되도록 통합되었다. 이로 인해 사용자는 tf.keras 모듈을 통해 케라스의 모든 기능을 TensorFlow의 일부로 직접 사용할 수 있게 되었다.
이 통합은 사용자 경험을 단순화하는 방향으로 이루어졌다. TensorFlow 1.x 버전에서 사용되던 복잡한 세션 실행 방식이나 자잘한 저수준 API 대부분이 정리되었고, 케라스의 직관적인 순차 모델 및 함수형 API가 표준 방식으로 자리 잡았다. 이는 딥 러닝 모델의 구성, 학습, 평가 과정을 더 쉽고 빠르게 만들어 주었다.
그러나 이 변화는 TensorFlow 1.x의 세션 기반 저수준 프로그래밍 방식에 익숙했던 기존 사용자들에게는 상당한 학습 곡선을 요구했다. 기존 코드를 새로운 파이썬 중심의 즉시 실행 모드와 케라스 API에 맞게 리팩토링해야 하는 부담이 생겼다. 한편, 이 통합은 TensorFlow 생태계 내에서의 API 일관성을 크게 높이고, 초보자와 연구자 모두에게 더 접근하기 쉬운 프레임워크로 진화하는 계기가 되었다.
케라스 3.0은 2023년 11월에 출시된 주요 버전으로, 가장 큰 변화는 다시 다중 백엔드를 공식 지원하는 아키텍처로 회귀한 것이다. 이 버전부터 케라스는 단일 TensorFlow에 종속된 고수준 API가 아닌, JAX, PyTorch, TensorFlow를 모두 백엔드 엔진으로 선택할 수 있는 진정한 다중 백엔드 라이브러리가 되었다. 이는 사용자가 동일한 케라스 코드로 다양한 프레임워크의 성능과 기능을 활용할 수 있게 해주며, 프레임워크 간 호환성과 유연성을 크게 높였다.
이 아키텍처 변경의 핵심은 새로운 백엔드 시스템인 "Keras Core"에 있다. 사용자는 os.environ["KERAS_BACKEND"]를 설정하거나 keras.backend.set_backend() 함수를 호출하여 원하는 백엔드를 런타임에 동적으로 전환할 수 있다. 이를 통해 연구자나 개발자는 특정 하드웨어 가속기나 배포 환경에 최적화된 백엔드를 선택할 수 있으며, 모델의 이식성이 극대화된다. 예를 들어, JAX 백엔드는 TPU에서의 연구와 실험에, PyTorch 백엔드는 해당 생태계의 풍부한 도구를 활용하는 데 유리하다.
버전 3.0은 또한 성능과 사용자 경험을 개선하는 많은 기능을 도입했다. 대규모 모델 학습을 위한 새로운 분산 학습 API가 추가되었고, 컴파일러 수준의 최적화로 연산 속도가 향상되었다. 또한, 모든 백엔드에서 일관되게 동작하는 통합된 옵티마이저, 손실 함수, 지표 API를 제공하여 코드의 복잡성을 줄였다. 이로써 케라스는 다시 한번 "사용자 친화성"과 "프레임워크 민첩성"이라는 본래의 설계 철학을 강화하게 되었다.
케라스는 직관적인 API를 통해 다양한 딥 러닝 모델을 빠르게 구축하고 실험할 수 있게 해준다. 가장 기본적인 사용 예시는 순차 모델(Sequential model)을 이용하여 레이어를 쌓는 방식이다. 사용자는 Sequential() 객체를 생성한 후, add() 메서드를 통해 Dense 레이어나 Conv2D, LSTM 같은 레이어를 순차적으로 추가하여 모델 구조를 정의한다. 이후 compile() 메서드로 옵티마이저, 손실 함수, 평가 지표를 지정하고, fit() 메서드에 훈련 데이터와 레이블을 제공하여 모델을 학습시킨다.
보다 복잡한 구조, 예를 들어 다중 입력 또는 다중 출력 모델, 잔차 연결(Residual Connection)이 포함된 모델을 구성할 때는 함수형 API를 사용한다. 함수형 API는 각 레이어를 호출 가능한 객체로 취급하고, 이를 조합하여 유연한 비순환 그래프 구조의 모델을 만들 수 있게 한다. 이를 통해 인코더-디코더 구조나 멀티태스크 러닝 모델과 같은 복잡한 아키텍처도 직관적인 코드로 구현할 수 있다.
학습이 완료된 모델은 evaluate() 메서드로 테스트 데이터셋에 대한 성능을 평가하고, predict() 메서드를 사용하여 새로운 데이터에 대한 예측을 수행한다. 또한, save() 메서드를 통해 모델 전체 또는 가중치만을 파일로 저장하여 배포하거나 재사용할 수 있다. 이러한 간결한 워크플로우 덕분에 연구자와 개발자는 모델 설계와 실험에 더 집중할 수 있으며, 텐서플로, 파이토치, JAX 중 선호하는 백엔드를 선택하여 동일한 코드로 실행할 수 있다는 점도 큰 장점이다.