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)
⚠️ **GitHub.com Fallback** ⚠️