μμνλ©°
λ₯λ¬λλͺ¨λΈ κ΅¬μΆ λμ€ μμ€ν¨μ λλ¬Έμ μ€λ₯κ° λ¬λ€. μλ§ μμ€ν¨μμ νμ±ν ν¨μμ μ‘°ν©μ΄ λ§μ§ μμλ κ² κ°λ€. μΌλ¨ κ·Έλμ μ΄λλ‘λ μλκ² λ€ μΆμ΄μ μμΈν μμκΉμ§λ μλλλΌλ μΈμ , μ΄λ»κ², λ¬΄μ¨ μ’ λ₯μ μμ€ν¨μκ° μλμ§ μ΄ν΄λ³΄κΈ°λ‘ νλ€!!! μμμμ νμ΄ν βΰΌΌ •Μ β •Μ ΰΌ½β
μμ€ ν¨μ(loss function) λ?
- λ¨Έμ λ¬λ νΉμ λ₯λ¬λ λͺ¨λΈμ μΆλ ₯κ°κ³Ό μ¬μ©μκ° μνλ μΆλ ₯κ°μ μ€μ°¨λ₯Ό μλ―Έ
- μμ€ν¨μλ μ λ΅(y)μ μμΈ‘(^y)λ₯Ό μ λ ₯μΌλ‘ λ°μ μ€μ«κ° μ μλ₯Ό λ§λλλ°, μ΄ μ μκ° λμμλ‘ λͺ¨λΈμ΄ μμ’μ κ²
- μμ€ν¨μμ ν¨μκ°μ΄ μ΅μν λλλ‘ νλ κ°μ€μΉ(weight)μ νΈν₯(bias)λ₯Ό μ°Ύλ κ²μ΄ λͺ©ν
νμ΄μ¬μμ μ§μνλ λ€μν λΌμ΄λΈλ¬λ¦¬μμλ λ§μ μμ€ν¨μλ₯Ό μ§μνλ€. ν΄λΉ ν¬μ€ν μμλ kerasμμ μ‘΄μ¬νλ μμ€ν¨μμ, pytorchλ₯Ό νμ©ν΄μ μμ€ν¨μλ₯Ό μ΄ν΄λ³Ό κ²μΈλ°, μλ 곡μλ¬Έμμμ λ€μν μμ€ν¨μλ₯Ό μ΄ν΄λ³Ό μ μλ€.
www.tensorflow.org/api_docs/python/tf/keras/losses
1. binary_crossentropy (μ΄ν κ΅μ°¨ μνΈλ‘νΌ)
- yκ°μ΄ (ex. 0,1) μΈ μ΄μ§ λΆλ₯κΈ°λ₯Ό νλ ¨ν λ μμ£Ό μ¬μ©λλ μμ€ ν¨μ (multi-label classification)
- νμ±ν ν¨μ : sigmoid μ¬μ© (μΆλ ₯κ°μ΄ 0κ³Ό 1μ¬μ΄μ κ°)
- μμ
- μλ ν¨μμ μμΈ‘κ°(Yi) κ³Ό μ€μ κ°(ti) μ 1μ λμ νλ©΄, μμμ 0μ μλ ΄νκ² λ¨
- μλ ν¨μμ μμΈ‘κ°(Yi =0)κ³Ό μ€μ κ°(ti = 1)μ λμ νλ€λ©΄, μμμ μμ 무νλκ° λ¨
- λ°λΌμ μ΄μ§ λΆλ₯μ μ ν©νλ€κ³ ν©λλ€ :)
β· kerasμμ μ§μνλ μ΄ν κ΅μ°¨ μνΈλ‘νΌ
tf.keras.losses.BinaryCrossentropy( from_logits=False, label_smoothing=0, reduction="auto", name="binary_crossentropy" )
β· pytorchμμ μ§μνλ λ²μ£Όν κ΅μ°¨ μνΈλ‘νΌ
μ κ²½λ§μ μΆλ ₯μ κ°μ₯ν λλ€ λ²‘ν°μ μκ·Έλͺ¨μ΄λ νμ±ν ν¨μλ₯Ό μ μ©ν΄ μ΄μ§ 벑ν°μΈ probabilitiesλ₯Ό λ§λ λ€. κ·Έ λ€μ targetμ 0κ³Ό 1λ‘ μ΄λ£¨μ΄μ§ 벑ν°λ‘ λ§λ€μ΄μ μμ€μ κ³μ°νλ€.
import torch
import torch.nn as nn
bce_loss = nn.BCELoss()
sigmoid = nn.Sigmoid()
probabilities = sigmoid(torch.randn(4, 1, requires_grad=True))
targets = torch.tensor([1, 0, 1, 0], dtype=torch.float32).view(4,1)
loss = bce_loss(probabilities, targets)
print(probabilities)
print(loss)
2. categorical_crossentropy (λ²μ£Όν κ΅μ°¨ μνΈλ‘νΌ)
- μΆλ ₯μ ν΄λμ€ μμ νλ₯ μ λν μμΈ‘μΌλ‘ μ΄ν΄ν μ μλ λ¬Έμ μμ μ¬μ© (μ¦, λ μ΄λΈ (y) ν΄λμ€κ° 2κ° μ΄μμΌ κ²½μ° μ¬μ© μ¦, λ©ν°ν΄λμ€ λΆλ₯μ μ¬μ©λ¨)
- νμ±ν ν¨μ : softmax (λͺ¨λ λ²‘ν° μμμ κ°μ 0κ³Ό 1μ¬μ΄μ κ°μ΄ λμ€κ³ , λͺ¨λ ν©μ΄ 1μ΄ λ¨)
- λΌλ²¨μ΄ (0,0,1,0,0) , (0,1,0,0,0) κ³Ό κ°μ΄ one-hot encoding λ ννλ‘ μ 곡λ λ μ¬μ© κ°λ₯
- μμ
- μλ μμμμ C λ ν΄λμ€μ κ°μ
- μ€μ κ°κ³Ό μμΈ‘κ°μ΄ λͺ¨λ λμΌνκ² λ κ²½μ° μμ€ν¨μμ κ°μ 0μ΄ λμ΄
- μ€μ κ°κ³Ό μμΈ‘κ°μ΄ λ€λ₯Ό κ²½μ° μμμ λμ νλ©΄ μμ 무νλλ‘ λ°μ°
β· kerasμμ μ§μνλ λ²μ£Όν κ΅μ°¨ μνΈλ‘νΌ
tf.keras.losses.CategoricalCrossentropy( from_logits=False, label_smoothing=0, reduction="auto", name="categorical_crossentropy", )
β· pytorchμμ μ§μνλ λ²μ£Όν κ΅μ°¨ μνΈλ‘νΌ
import torch
import torch.nn as nn
ce_loss = nn.CrossEntropyLoss()
outputs = torch.randn(3, 5, requires_grad = True)
targets = torch.tensor([1, 0, 3], dtype = torch.int64)
loss = ce_loss(outputs, targets)
print(loss)
λλ€ν 벑ν°λ₯Ό μΆλ ₯μΌλ‘ κ°μ νκ³ , κ·Έ target 벑ν°λ₯Ό μ μ 벑ν°λ‘ λ§λ λ€. νμ΄ν μΉμ CrossEntropyLoss() ν΄λμ€λ κ° μ λ ₯μ΄ ν΄λμ€ νλμ μνκ³ κ° ν΄λμ€μλ κ³ μ ν μΈλ±μ€κ° μλ€κ³ κ°μ νκΈ° λλ¬Έμ΄λ€.
3. sparse_categorical_crossentropy
tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred, from_logits=False, axis=-1)
- λ²μ£Όν κ΅μ°¨ μνΈλ‘νΌμ λμΌνκ² λ©ν° ν΄λμ€ λΆλ₯μ μ¬μ©
- one-hot encoding λ μνμΌ νμ μμ΄ μ μ μΈμ½λ© λ μνμμ μν κ°λ₯
- λΌλ²¨μ΄ (1,2,3,4) μ΄λ°μμΌλ‘ μ μννμΌλ μ¬μ©!
4. νκ· μ κ³± μ€μ°¨ μμ€ (means squared error, MSE)
- μ κ²½λ§μ μΆλ ₯(^y)κ³Ό νκ²(y)μ΄ μ°μκ°μΈ νκ· λ¬Έμ μμ λ리 μ¬μ©νλ μμ€ν¨μ
- νκ·λ¬Έμ μ μ¬μ©λ μ μλ λ€λ₯Έ μμ€ ν¨μ
- νκ· μ λκ° μ€μ°¨ (Mean absolute error, MAE)
- νκ· μ κ³±κ·Ό μ€μ°¨ (Root mean squared error, RMSE)
- νκ·λ¬Έμ μ μ¬μ©λ μ μλ λ€λ₯Έ μμ€ ν¨μ
- μμΈ‘κ³Ό νκ²κ°μ μ°¨μ΄λ₯Ό μ κ³±νμ¬ νκ· ν κ° (λͺ¨λ μ€μ«κ°μΌλ‘ κ³μ°)
- MSEκ° ν¬λ€λ κ²μ νκ· μ¬μ΄μ μ°¨μ΄κ° ν¬λ€λ λ» / MSEκ° μλ€λ κ²μ λ°μ΄ν°μ νκ· μ¬μ΄μ μ°¨μ΄κ° μλ€λ λ»
- μ¦, MSEλ λ°μ΄ν°κ° νκ· μΌλ‘λΆν° μΌλ§λ λ¨μ΄μ Έμλλ₯Ό 보μ¬μ£Όλ μμ€ν¨μ
- μ°μν λ°μ΄ν°λ₯Ό μ¬μ©ν λ μ£Όλ‘ μ¬μ© (μ£Όμ κ°κ²© μμΈ‘ λ±)
β· pytorchμμ μ§μνλ MSE
import torch
import torch.nn as nn
mse_loss = nn.MSELoss()
outputs = torch.randn(3, 5, requires_grad = True)
targets = torch.randn(3, 5)
loss = mse_loss(outputs, targets)
print(loss)
β· keras μμ μ§μνλ MSE
keras.losses.mean_squared_error(y_true, y_pred)
https://www.tensorflow.org/api_docs/python/tf/keras/metrics/mean_squared_error?hl=ko
μ°Έκ³ λ¬Έν (λμμ£Όμ μ κ°μ¬ν©λλ€. κΈ μμ½μμ΄μ!)
wordbe.tistory.com/entry/ML-Cross-entropyCategorical-Binary%EC%9D%98-%EC%9D%B4%ED%95%B4
λ§μΉλ©°
λ°©κΈ κ³΅λΆνλ€κ° μκ² λ 건λ°, μκΉ λ₯λ¬λ λͺ¨λΈμ λ리λ€κ° μ€λ₯κ° λ μ΄μ λ νμ±ν ν¨μ λλ¬Έμ΄ μλλΌ μλ§ μ€λ₯κ° λ μ΄μ κ°, μ μ ννμ λΌλ²¨μ΄μλλ° binary cross entrophyλ₯Ό μ¬μ©νκΈ° λλ¬Έμ΄μλ κ² κ°λ€. ν°μ€ν 리μ μ λ‘λνλ κ² μκ°μ΄ μ’ λ 걸리긴 νμ§λ§ λ¨Έλ¦Ώμμ νμ€νκ² μ λ¦¬κ° λλ κ² κ°λ€!! α¦(· α΄₯ ·)ο½―
κ·Έλμ λ§μ νλ‘μ νΈλ μ§ννκ³ μλ νκ³ νμλλ°, μ΄λ κ² μΈμΈνκ² κ³ λ―Όνκ³ κ³΅λΆν΄λ³΄λ μ λ§ λΆμ‘±ν¨μ λ§μ΄ λλλ€. μΌλ₯Έ TF μκ²©μ¦ λ°μ !! νμ΄ν±ν±ν± ΰΈ^•ο»•^ΰΈ