Caffe Tutorial : 3.Loss (Kor) - ys7yoo/BrainCaffe GitHub Wiki
μμ€ (Loss)
λλΆλΆμ κΈ°κ³νμ΅μ²λΌ, Caffeμμλ νμ΅μ (μλ¬, λΉμ© νΉμ λͺ©μ ν¨μλΌκ³ λ μλ €μ§)μμ€ν¨μμ μν΄μ μ΄λ£¨μ΄μ§λ€. μμ€ν¨μλ μ΄λ¬ν νλΌλ―Έν° μ€μ μ "λμ¨"μ λͺ μνλ μ€μΉΌλΌ κ°μ νλΌλ―Έν° μΈν μ 맡νν¨μ μν΄ νμ΅μ λͺ©νλ₯Ό λͺ μνλ€. κ·Έλ¬λ―λ‘ νμ΅μ λͺ©νλ μμ€ν¨μλ₯Ό μ΅μνλ κ°μ€μΉμ μ€μ μ μ°Ύλ κ²μ΄λ€.
Caffeμμ μμ€μ λ€νΈμν¬μ μ λ°©ν₯ κ³Όμ μ κ³μ°ν΄μ μ»μ΄μ§λ€. κ° κ³μΈ΅μ μ λ ₯ blobsμ λ©μ΄λ¦¬λ₯Ό λ°μ μΆλ ₯ blobsμ λ©μ΄λ¦¬λ₯Ό μμ±νλ€. μ΄λ¬ν λͺλͺ κ³μΈ΅μ μΆλ ₯μ μμ€ν¨μμμ μ¬μ©λμ΄μ§ μλ μλ€. λͺ¨λ λΆλ₯ν μ 무μ λμνλ νλμ λν μμ€ν¨μμ μΌλ°μ μΈ μ νμ λ€νΈμν¬ μ μΈ λ€μμΌλ‘ λ°λΌμ€λ κ²μΌλ‘μ μ¬μ©λλ SoftmaxWithLoss ν¨μμ΄λ€. μλ₯Όλ€λ©΄
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "pred"
bottom: "label"
top: "loss"
}
SoftmaxWithLoss ν¨μμμ μΆλ ₯ blobλ μ 체 μ΅μ μΌν μ²λ¦¬λμ λνμ¬ μμΈ‘λ λΌλ²¨λ€ predμ μ€μ λΌλ²¨λ€μΈ labelλ‘λΆν° νκ· μμ€μ κ³μ°νλ μ€μΉΌλΌ (λΉ λͺ¨μ)μ΄λ€.
** μμ€ κ°μ€μΉ (Loss Weight) SoftmaxWithLoss κ³μΈ΅μ μ¬μ©ν΄μ μ λ ₯μ λΆλ₯νλκ²κ³Ό μ ν΄λ¦¬λμμμ€(EuclideanLoss) κ³μΈ΅μ μ¬μ©ν΄μ μ λ ₯μ μ¬κ΅¬μ±νλ μμͺ½ λͺ¨λλ₯Ό μννλ λ€νΈμν¬ κ°μ΄ μμ€μ μμ°νλ λ€μ€ κ³μΈ΅μΌλ‘ μ΄λ£¨μ΄μ§ λ€νΈμν¬μ λνμ¬ μμ€ κ°μ€μΉλ κ·Έλ€μ μλμ μ€μλλ₯Ό λͺ μν΄μ€ μ μλ€.
μ¬μ©μ μ μμ μν΄, μ λ―Έ μμ€(suffix loss)μ κ°μ§ Caffe κ³μΈ΅ νμ μ μμ€ν¨μμ κΈ°μ¬νμ§λ§ λ€λ₯Έ κ³μΈ΅λ€μ μ€μ§ κ³μ° μ€κ°μμ μ¬μ©λλ κ²μΌλ‘ κ°μ λλ€. νμ§λ§, κ³μΈ΅μμν΄ μμ°λ κ° μΆλ ₯ bolbμ λνμ¬ λ μ΄μ΄ μ μμ μΆκ°νλ κ²μ²λΌ, μΈ΅μ νλ loss_weightλ₯Ό μΆκ°ν¨μΌλ‘μ μμ€λ‘ μ¬μ©λ μ μλ€. μ λ―Έ μμ€μ κ°μ§ κ³μΈ΅μ 첫 μΆλ ₯ blobμ λνμ¬(μΆκ°μ μΈ μ΄λ ν μΆλ ₯λ€μ λν΄μλ loss_weight: 0) μμλ loss_weight: 1μ κ°μ§κ³ μλ€. λ€λ₯Έ κ³μΈ΅λ€μ λͺ¨λ μΆλ ₯λ€μ λνμ¬ μ묡μ loss_weight: 0μ μ§λλ€. κ·Έλμ, μμ SoftmaxWithLoss κ³μΈ΅μ λ€μκ³Ό κ°μ΄ μ°μ¬μ§κ³€νλ€.
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "pred"
bottom: "label"
top: "loss"
loss_weight: 1
}
νμ§λ§ Back-Propagateκ° κ°λ₯ν μ΄λ€ κ³μΈ΅μ 0μ΄ μλ loss_weightλ₯Ό λ°μ μλ μλ€. μλ₯Όλ€μ΄ μνλ€λ©΄ λ€νΈμν¬μ λͺλͺμ μ€κ°μͺ½ κ³μΈ΅(λ€)μ activationμ νκ°νλ κ²μ νλ½νλ κ²μ΄ μμ±λλ€. 0μ΄ μλ μμ€κ³Ό μ°κ΄λμ΄ μλ λ¨μΌκ°μ²΄κ° μλ μΆλ ₯λ€ λλ¬Έμ, μμ€μ blobμ λͺ¨λ λ΄μ©μ λ€ λνλ κ²μΌλ‘ κ°λ¨ν κ³μ°λλ€.
κ·Έλ¬λ©΄ Caffeμμ μ΅μ’
μμ€μ λ€μκ³Ό κ°μ μ μ¬μ½λμ²λΌ λ€νΈμν¬μ λν μ 체 κ°μ€νλ μμ€(total weighted loss)μ μ΄ν©νλ κ²μΌλ‘ κ³μ°λλ€.
loss := 0
for layer in layers:
for top, loss_weight in layer.tops, layer.loss_weights:
loss += loss_weight * sum(top)