[딥러닝] 케라스 손실 함수 (Loss Function)

이 글은 케라스(Keras)에서 제공하는 손실 함수(Loss function)에 관한 기록입니다.

import tensorflow as tf

손실 함수의 종류

Problem type Last-layer activation Loss function Example
Binary classification sigmoid binary_crossentropy Dog vs cat, Sentiemnt analysis(pos/neg)
Multi-class, single-label classification softmax categorical_crossentropy MNIST has 10 classes single label (one prediction is one digit)
Multi-class, multi-label classification sigmoid binary_crossentropy News tags classification, one blog can have multiple tags
Regression to arbitrary values None mse Predict house price(an integer/float point)
Regression to values between 0 and 1 sigmoid mse or binary_crossentropy Engine health assessment where 0 is broken, 1 is new

1. Binary Crossentropy

  • Binary classification 즉 클래스가 두 개인 이진 분류 문제에서 사용
  • label이 0 또는 1을 값으로 가질 때 사용
  • 모델의 마지막 레이어의 활성화 함수는 시그모이드 함수
# API

tf.keras.losses.BinaryCrossentropy(
    from_logits=False, label_smoothing=0, reduction=losses_utils.ReductionV2.AUTO,
    name='binary_crossentropy'
)

tf.keras.losses.binary_crossentropy(
    y_true, y_pred, from_logits=False, label_smoothing=0
)
# Usage

model.add(layers.Dense(1, activation='sigmoid'))

model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              optimizer='adam', 
              metrics=['accuracy'])

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

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

2. Categorical Crossentropy

  • Multi-class classification 즉 클래스가 여러 개인 다중 분류 문제에서 사용
  • label이 원-핫 인코딩 된 형태 즉 label이 class를 나타내는 one-hot vector를 값으로 가질 때 사용
    • 예를 들어, 3-class classification 문제에서
    • label이 [1, 0, 0] 또는 [0, 1, 0] 또는 [0, 0, 1]을 값으로 가질 때 사용
  • 모델의 마지막 레이어의 활성화 함수는 소프트맥스 함수
# API

tf.keras.losses.CategoricalCrossentropy(
    from_logits=False, label_smoothing=0, reduction=losses_utils.ReductionV2.AUTO,
    name='categorical_crossentropy'
)

tf.keras.losses.categorical_crossentropy(
    y_true, y_pred, from_logits=False, label_smoothing=0
)
# Usage

model.add(tf.keras.layers.Dense(num_categories, activation='softmax'))

model.compile(loss=tf.keras.losses.CategoricalCrossentropy(),
              optimizer='adam', 
              metrics=['accuracy'])

model.compile(loss=tf.keras.losses.categorical_crossentropy, 
              optimizer='adam', 
              metrics=['accuracy'])

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

3. Sparse Categorical Crossentropy

  • Multi-class classification 즉 클래스가 여러 개인 다중 분류 문제에서 사용
  • label이 정수 인코딩 된 형태 즉 label이 class index를 값으로 가질 때 사용
    • 예를 들어, 3-class classification 문제에서
    • label이 0 또는 1 또는 2를 값으로 가질 때 사용
  • 모델의 마지막 레이어의 활성화 함수는 소프트맥스 함수
# API

tf.keras.losses.SparseCategoricalCrossentropy(
    from_logits=False, reduction=losses_utils.ReductionV2.AUTO,
    name='sparse_categorical_crossentropy'
)

tf.keras.losses.sparse_categorical_crossentropy(
    y_true, y_pred, from_logits=False, axis=-1
)
# Usage

model.add(tf.keras.layers.Dense(num_categories, activation='softmax'))

model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy()
              optimizer='adam',
              metrics=['accuracy'])

model.compile(loss=tf.keras.losses.sparse_categorical_crossentropy()
              optimizer='adam',
              metrics=['accuracy'])

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

참고자료

Keras Documentation

댓글남기기