Programming Languages/Python

Keras, model.compile() - 파이썬에서 케라스 모델 컴파일이란

Henry Cho 2025. 6. 14. 23:05

* 포스트 난이도: HOO_Middle

* Python ver.1: July 28, 2022

* Python ver.2: June 14, 2025

 


# Review Comments

HOOAI 블로그의 방향성은 "정보의 공유"이다. 그렇다 보니 처음부터 "브로"라고 불리는 지인, 구독자, 독자 등 다양한 사람들의 질문을 받거나 내가 궁금했었던 고민이 많았었던 내용을 중점적으로 포스팅을 하고 있다. 따라서 포스트 내용들을 보면 상당히 "뒤죽박죽"이란 걸 알 수 있다. 스타트업 CEO나 기업 CTO들이 관심 있어할 만한 데이터 트렌드 내용부터 이제 막 대학교에 가서 프로그래밍 언어의 입출력에 대해서 궁금해하는 내용 등 정말 다양한 종류의 퍼즐처럼 흩어져 있다. 내가 이렇게 서론을 길게 말한 이유는 해당 글도 오래전에 먼지에 쌓여있던 글 중 하나였다.

 

앞선 2022년 첫 포스트 당시에는 아무래도 케라스에 model.compile()에서 기본 코드 형태에 대한 질문을 받았던 것 같다. 지금이야 뭐 Chatgpt가 있어서 기본적인 걸 물어보면 된다고 하지만 LLM이 나오기 전까지만 하더라도 사실상 기본 코드 형태를 저장해두다가 수정해서 사용하는 게 편했다. 그렇기 때문에 설명이 많이 생략되어 HOO_Senior 난이도로 설정이 되어 있던 것 같다. 하지만 이제는 AI 여기서는 케라스를 쓰는 딥러닝 학습 방법이 비교적 대중화가 되었다. 전문가가 아니더라도 대학원생 아니 대학생만 되더라도 해당 딥러닝 학습은 한번 정도 누구나 해봤을 법하다. 그래서 해당 포스트는 추가 설명과 더불어 원문을 수정하면서 난이도를 HOO_Middle로 바꾸었다.


# 딥러닝 학습이란?

케라스의 모델 컴파일은 딥러닝 학습을 위해 사용하는 기능이다. 인공지능을 공부하는 브로나 사실상 개발자는 아니지만 인공지능에 대해서 관심이 있는, 또는 IT 관련된 일을 하는 브로들의 경우가 가장 많이 헷갈리는 부분 중에 하나가 머신러닝과 딥러닝의 차이이다. 거두절미하고 말하자면, 인공지능 안에 머신러닝과 딥러닝이 있고 머신러닝의 하위 분야가 딥러닝이다. 한마디로 머신러닝에서 더 심화된 학습과 기존의 머신러닝에서 패턴을 찾는 방식의 한계점이 존재할 때 또 다른 머신러닝의 부분인 딥러닝을 사용한다고 생각하면 쉽다.

 

딥러닝이 Artifical neural network or Deep neural network이라는 말은 책이나 인터넷에서 정의와 함께 많이 들어봤을 것이다. 어렵게 생각할 필요없이 컴퓨터의 작업은 여러 층, 즉 Layers로 나눠져 있다. 그게 내가 지금 중점으로 하고 있는 데이터 및 블록체인이든 Computer vision이든, 아니면 더 큰 범위인 케라스이든 여러 층으로 나눠져서 더 심화되고 사소한 부분까지도 분석해서 파악하는 역할을 수행한다. 그래서 Deep learning인 셈이다. 정형화된 데이터의 경우 "빅데이터"라고 할지라도 머신러닝에서 충분히 패턴 파악이 가능하다. 다만 비정형, 비선형 즉 사람이 보더라도 "도대체 무슨 차이가 있는 거야?"라고 생각되는 것은 딥러닝으로 학습할 경우 특정한 패턴이나 보이지 않던 결과가 산출되기도 한다. 이러한 추상적 패턴을 찾아내는 게 딥러닝이고 대표적으로 많이 들어봤을 법한 CNN, RNN or GAN 등의 방법이 존재한다.


# model.compile() (모델 컴파일) 이란?

자, 그럼 "도대체 케라스가 뭔데?"라는 의문이 들 것이다. Keras (케라스)는 딥러닝 모델을 쉽게 구축할 수 있도록 이미 훈련되고 설계된 API라고 생각하면 된다. 한마디로 매번 딥러닝을 구축하는데 사실상 어렵기 때문에 General하게 사용되는 부분을 이미 만들어서 API로 구성해 둔 선물 패키지라고 생각하면 된다. 마치 내가 YOLO가 없는 시절에 힘들게 Segmentation을 했었는데 이제는 컴퓨터 관련 전공자가 아니더라도 충분히 YOLO를 통해서 Segmentation을 할 수 있게 된 것과 비슷하다고 보면 된다.

 

여기서 모델 컴파일은 이미 다 알고 있겠지만 케라스의 한 기능이다. 모델 컴파일 기능을 통해서 딥러닝 모델한테 최적화 방법과 손실함수, 평가 지표 등을 알려주는 역할을 담당한다. 최적화 방법이란 어떻게 딥러닝 학습을 실행할 것인가라고 생각하면 된다. 딥러닝을 포함한 인공지능 모델의 핵심 중 하나는 예측 오차를 줄여나가는 거에서 시작한다. 그래서 우리가 흔히 수치 조정을 하는 Optimizer or Weights를 어떻게 조정할지가 중요하다. 이런 부분에 대해서 다루는데 model.compile 기능을 사용한다.

 

두 번째로 손실함수이다. 예측된 모델이 실제와의 갭 (Gaps)가 얼마인지 정형화된 수치로 살펴본다. 우리 개발자 브로들이 글보다는 Term이 편하니까 Loss function에 해당한다. 이를 통해서 분류, 즉 Categorization 문제인지 아니면 회귀, 즉 Regression인지 등을 살펴볼 수 있다.

 

또 다른 기능으로 평가지표 즉, Metrics를 살펴볼 수 있다. 한마디로 "학습과정을 어떻게 모니터링할 것인가?"에 해당한다고 보면 된다. 더 쉽게 말해서 Accuracy를 보여줘서 모델의 정확도를 한눈에 확인할 수 있게 해 준다. 딥러닝을 사용한 논문을 작성해 봤다면 Results에 전형적으로 비교해줘야 하는 부분 중 하나인 건 우리 모두 아는 사실이다.


# Defaults

아래의 코드는 model.compile()의 예제들이다. 한마디로 defaults라고 생각하고 가져다가 수정해서 사용하면 된다. 코드 예제를 세가지 보여주는 이유는 각기 다른 컴파일 기능을 나타내고 싶었다. 우선 세 가지 코드 공통적으로 앞에서 언급한 optimizer, loss, metrics 기능들이 존재하는 걸 볼 수 있다. 그러고 나서 안의 내용을 살펴보면 binary_crossentropy를 분석하는 거와 categorical_crossentropy를 분석하는 걸 볼 수 있다. metrics의 경우도 accuracy를 볼 수 있고 binary_accuracy도 확인이 가능하다.

model.compile(
    optimizer='adam',
    loss='binary_crossentropy',
    metrics=['binary_accuracy'],
)

model.compile(
    optimizer='adam',
    loss='categorical_crossentropy',
    metrics=['binary_accuracy'],
)

model.compile(
    optimizer='adam',
    loss='binary_crossentropy',
    metrics=['accuracy'],
)

fig.1 NASA에서도 쓰는 케라스, Space Commerce Way, Merritt Island, FL 32953


 

728x90