기초/인곡지λŠ₯

손싀 ν•¨μˆ˜(Loss function)

James Hwang😎 2021. 8. 28. 23:47
πŸ’‘ 'Deep Learning from Scratch'λ₯Ό μ°Έκ³ ν•˜μ—¬ μž‘μ„±

  μ‹ κ²½λ§μ—μ„œ ν•™μŠ΅(train)μ΄λž€ ν•™μŠ΅ λ°μ΄ν„°λ‘œλΆ€ν„° κ°€μ€‘μΉ˜ λ§€κ°œλ³€μˆ˜(weight parameter)의 μ΅œμ κ°’(optimal value)을 μžλ™μœΌλ‘œ νšλ“ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 이번 κ²Œμ‹œλ¬Όμ—μ„œλŠ” 신경망을 ν•™μŠ΅ν•˜κΈ° μœ„ν•œ μ§€ν‘œ, 손싀 ν•¨μˆ˜μ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. 데이터와 ν•™μŠ΅

  신경망은 데이터λ₯Ό 톡해 ν•™μŠ΅ν•©λ‹ˆλ‹€. 데이터λ₯Ό μ΄μš©ν•˜μ—¬ ν•™μŠ΅ν•œλ‹€λŠ” 것은 데이터λ₯Ό 톡해 κ°€μ€‘μΉ˜ λ§€κ°œλ³€μˆ˜μ˜ 값을 μžλ™μœΌλ‘œ κ²°μ •ν•œλ‹€λŠ” λœ»μž…λ‹ˆλ‹€. μ΄λŠ” λͺ¨λ“  λ§€κ°œλ³€μˆ˜λ₯Ό μˆ˜μž‘μ—…μœΌλ‘œ κ²°μ •ν•΄μ•Ό ν•˜λŠ” 어렀움을 ν•΄κ²°ν•΄μ€λ‹ˆλ‹€.

1.1 데이터 주도 ν•™μŠ΅

  기계 ν•™μŠ΅(machine learning)의 생λͺ…은 λ°”λ‘œ λ°μ΄ν„°μž…λ‹ˆλ‹€. λ°μ΄ν„°μ—μ„œ 닡을 μ°Ύκ³  λ°μ΄ν„°μ—μ„œ νŒ¨ν„΄μ„ λ°œκ²¬ν•˜κ³  λ°μ΄ν„°λ‘œ 이야기λ₯Ό λ§Œλ“œλŠ” 것이 λ°”λ‘œ 기계 ν•™μŠ΅μž…λ‹ˆλ‹€. 기계 ν•™μŠ΅μ„ 톡해 μ‚¬λžŒ μ€‘μ‹¬μ˜ μ ‘κ·Ό λ°©μ‹μ—μ„œ 데이터가 μ΄λ„λŠ” μ ‘κ·Ό λ°©μ‹μœΌλ‘œ λ³€ν™”ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  기계 ν•™μŠ΅μ€ μ‚¬λžŒμ΄ μ•Œκ³ λ¦¬μ¦˜μ„ λ°‘λ°”λ‹₯λΆ€ν„° μ„€κ³„ν•˜λŠ” λŒ€μ‹ , 주어진 데이터λ₯Ό 잘 ν™œμš©ν•˜μ—¬ ν•΄κ²°ν•˜λŠ”λ° μ§‘μ€‘ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ΄λ―Έμ§€μ—μ„œ νŠΉμ§•(feature)을 μΆ”μΆœν•˜κ³  κ·Έ νŠΉμ§•μ˜ νŒ¨ν„΄μ„ ν•™μŠ΅ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ νŠΉμ§•μ€ μž…λ ₯ λ°μ΄ν„°μ—μ„œ 본질적인 데이터(μ€‘μš”ν•œ 데이터)λ₯Ό μ •ν™•ν•˜κ²Œ μΆ”μΆœν•œ 것을 λ§ν•©λ‹ˆλ‹€. νŠΉμ§•μ„ μ΄μš©ν•˜μ—¬ 이미지 데이터λ₯Ό λ²‘ν„°λ‘œ λ³€ν™˜ν•˜κ³ , λ³€ν™˜λœ 벑터λ₯Ό 가지고 지도 ν•™μŠ΅(supervised learning) 방식을 μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 기계 ν•™μŠ΅μ€ 크게 2가지 μ ‘κ·Ό λ°©λ²•μœΌλ‘œ λ‚˜λ‰©λ‹ˆλ‹€.

  1. λ¬Έμ œμ— 따라 μ‚¬λžŒμ΄ μ μ ˆν•œ νŠΉμ§•μ„ 생각해내고, 기계 ν•™μŠ΅μ„ ν™œμš©ν•œλ‹€.
  2. 데이터에 ν¬ν•¨λœ μ€‘μš”ν•œ νŠΉμ§• λͺ¨λ‘ 기계가 슀슀둜 ν•™μŠ΅ν•œλ‹€.

  첫 번째 λ°©λ²•μ˜ 경우, μ‚¬λžŒμ΄ νŠΉμ§•μ— λŒ€ν•΄ μ μ ˆν•˜κ²Œ μ„€κ³„ν•¨μœΌλ‘œμ¨ 쒋은 κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 지도 ν•™μŠ΅μ΄λΌ ν•©λ‹ˆλ‹€. 두 번째 μ ‘κ·Ό 방법을 ν”νžˆ λ”₯λŸ¬λ‹(deep-learning) ν˜Ήμ€ 신경망(neural network)이라 λΆ€λ¦…λ‹ˆλ‹€. ν”νžˆ λ”₯λŸ¬λ‹μ„ end-to-end 기계 ν•™μŠ΅μ΄λΌκ³ λ„ ν•©λ‹ˆλ‹€. μ΄λŠ” 'μ²˜μŒλΆ€ν„° λκΉŒμ§€' λ°μ΄ν„°λ‘œλΆ€ν„° λͺ©ν‘œν•œ κ²°κ³Όλ₯Ό μ‚¬λžŒμ˜ κ°œμž… 없이 μ–»λŠ”λ‹€λŠ” λœ»μ„ λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ ‘κ·Ό 방법은 μ•„λž˜μ˜ κ·Έλ¦Ό 1을 ν™•μΈν•˜λ©΄ 더 μ΄ν•΄ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.

κ·Έλ¦Ό 1. ν•™μŠ΅μ˜ μ’…λ₯˜

1.2 ν•™μŠ΅ 데이터와 ν…ŒμŠ€νŠΈ 데이터

  기계 ν•™μŠ΅ λ¬Έμ œλŠ” 데이터λ₯Ό ν•™μŠ΅ 데이터와 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ λ‚˜λˆ  μ•„λž˜μ™€ 같이 μˆ˜ν–‰ν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.

  1. ν•™μŠ΅ 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•™μŠ΅ν•˜λ©° 졜적의 λ§€κ°œλ³€μˆ˜λ₯Ό μ°ΎλŠ”λ‹€.
  2. ν…ŒμŠ€νŠΈ 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•™μŠ΅ν•œ λͺ¨λΈμ˜ μ„±λŠ₯을 ν‰κ°€ν•œλ‹€.

  ν•™μŠ΅ 데이터와 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ λ‚˜λˆ„λŠ” μ΄μœ λŠ” λ²”μš©μ μœΌλ‘œ μ‚¬μš©ν•  λͺ¨λΈμ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€. λ²”μš© λŠ₯λ ₯은 μƒˆλ‘œμš΄ λ°μ΄ν„°μ—μ„œλ„ 문제λ₯Ό μ˜¬λ°”λ₯΄κ²Œ ν’€μ–΄λ‚΄λŠ” λŠ₯λ ₯을 λ§ν•©λ‹ˆλ‹€. 이 λ²”μš© λŠ₯λ ₯을 νšλ“ν•˜λŠ” 것이 기계 ν•™μŠ΅μ˜ μ΅œμ’… λͺ©ν‘œμž…λ‹ˆλ‹€. λ”°λΌμ„œ 데이터셋(dataset) ν•˜λ‚˜λ‘œ ν•™μŠ΅κ³Ό 평가(evaluation)λ₯Ό μˆ˜ν–‰ν•˜λ©΄ μ˜¬λ°”λ₯Έ 평가가 될 수 μ—†μŠ΅λ‹ˆλ‹€. νŠΉνžˆλ‚˜ ν•˜λ‚˜μ˜ 데이터셋에 μ§€λ‚˜μΉ˜κ²Œ μ΅œμ ν™”λœ μƒνƒœλ₯Ό 과적합(overfitting)이라고 ν•©λ‹ˆλ‹€. 과적합을 ν”Όν•˜λŠ” 것은 기계 ν•™μŠ΅μ˜ μ€‘μš”ν•œ 과제 κ°€μš΄λ° ν•˜λ‚˜μž…λ‹ˆλ‹€.


2. 손싀 ν•¨μˆ˜

  신경망 ν•™μŠ΅μ—μ„œ 졜적의 λ§€κ°œλ³€μˆ˜ 값을 νƒμƒ‰ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ§€ν‘œλŠ” 손싀 ν•¨μˆ˜μž…λ‹ˆλ‹€. 손싀 ν•¨μˆ˜λŠ” 신경망 μ„±λŠ₯의 'λ‚˜μ¨'을 λ‚˜νƒ€λ‚΄λŠ” μ§€ν‘œμž…λ‹ˆλ‹€. ν˜„μž¬μ˜ 신경망이 ν•™μŠ΅ 데이터λ₯Ό μ–Όλ§ˆλ‚˜ 잘 μ²˜λ¦¬ν•˜μ§€ λͺ» ν•˜λŠλƒλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

2.1 μ˜€μ°¨μ œκ³±ν•©(Sum of Squares for Error, SSE)

  일반적으둜 κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” 손싀 ν•¨μˆ˜λŠ” μ˜€μ°¨μ œκ³±ν•©μž…λ‹ˆλ‹€. μˆ˜μ‹μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

$$ E=\frac{1}{2}\sum_{k}{(y_k-t_k)^2} $$

  • $ y_k $ : μ‹ κ²½λ§μ˜ 좜λ ₯(output), μΆ”μ •κ°’
  • $ t_k $ : μ •λ‹΅ λ ˆμ΄λΈ”, μ°Έκ°’
  • $ k $ : λ°μ΄ν„°μ˜ 차원 수

  μ˜€μ°¨μ œκ³±ν•©μ€ 각 μ›μ†Œμ˜ 좜λ ₯(μΆ”μ •κ°’)κ³Ό μ •λ‹΅ λ ˆμ΄λΈ”(μ°Έκ°’)의 μ°¨λ₯Ό μ œκ³±ν•˜κ³  κ·Έ 총합을 κ΅¬ν•©λ‹ˆλ‹€. μ˜€μ°¨μ œκ³±ν•©μ— $ \frac{1}{2} $이 μžˆλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” κ²½μ‚¬ν•˜κ°•λ²•(gradient descent) κ°€μš΄λ° ν•˜λ‚˜μΈ 델타 κ·œμΉ™(Delta rule)을 κ³„μ‚°ν•˜λŠ” κ³Όμ •μ—μ„œ 였차(error)κ°€ μ§€λ‚˜μΉ˜κ²Œ μ»€μ§€λŠ” 것을 막기 μœ„ν•΄μ„œ μž…λ‹ˆλ‹€. $ \frac{1}{2} $κ°€ 고정은 μ•„λ‹ˆμ§€λ§Œ, 델타 κ·œμΉ™μ„ λ„μΆœν•˜λŠ” κ³Όμ •μ—μ„œ 손싀 ν•¨μˆ˜λ₯Ό λ―ΈλΆ„ν•˜λŠ”λ° 이λ₯Ό νŽΈν•˜κ²Œ κ³„μ‚°ν•˜κΈ° μœ„ν•΄μ„œλ‘œ λ³΄μž…λ‹ˆλ‹€. 이λ₯Ό κ΅¬ν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

def sum_squares_error(y: np.array, t: np.array) -> float:
    return 0.5 * np.sum((y-t)**2)

  이λ₯Ό μ‹€μ œλ‘œ μ•„λž˜μ™€ 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

sum_squares_error(np.array(y), np.array(t))
-> 0.09750000000000003

  μž…λ ₯값을 μ‚΄νŽ΄λ³΄λ©΄, yλŠ” μ†Œν”„νŠΈλ§₯슀 ν•¨μˆ˜μ˜ 좜λ ₯을 μ˜λ―Έν•©λ‹ˆλ‹€. μ†Œν”„νŠΈλ§₯슀 ν•¨μˆ˜μ˜ 좜λ ₯은 ν™•λ₯ κ°’μœΌλ‘œ 해석할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 즉, ν•΄λ‹Ή 데이터가 2번 λ ˆμ΄λΈ”μΌ ν™•λ₯ μ€ 0.6이라고 해석할 수 μžˆμŠ΅λ‹ˆλ‹€. tλŠ” μ •λ‹΅ λ ˆμ΄λΈ”μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 참값에 ν•΄λ‹Ήν•˜λŠ” ν•˜λ‚˜μ˜ μ›μ†ŒλŠ” 1둜 ν‘œν˜„ν•˜κ³  κ·Έ μ™ΈλŠ” 0으둜 ν‘œν˜„ν•˜λŠ” ν‘œκΈ°λ²•μΈ 원-ν•« 인코딩(one-hot encoding)을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

2.2 ν‰κ· μ œκ³±ν•©(Mean of Squares for Error, MSE)

  기쑴의 μ˜€μ°¨μ œκ³±ν•©μ„ λ°μ΄ν„°μ˜ 크기만큼 λ‚˜λˆ μ„œ μ‚¬μš©ν•˜λŠ” 손싀 ν•¨μˆ˜μž…λ‹ˆλ‹€. μˆ˜μ‹μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

$$ E=\frac{1}{k}\sum_{k}{(y_k-t_k)^2} $$

  μ˜€μ°¨μ œκ³±ν•©μ˜ 경우, μ˜€μ°¨κ°€ 컀질 λ•Œ λ°μ΄ν„°μ˜ 양이 λ§Žμ•„μ„œ μ»€μ§€λŠ” 것인지 ν™•μΈν•˜λŠ”λ° 어렀움이 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν‰κ· μ œκ³±ν•©μ€ λ°μ΄ν„°μ˜ 차원 수만큼 였차λ₯Ό λ‚˜λˆ μ€ŒμœΌλ‘œμ¨ μ΄λŸ¬ν•œ ν•œκ³„μ μ„ 극볡할 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό κ΅¬ν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

def mean_squares_error(y: np.array, t: np.array) -> float:
    return np.sum((y-t)**2) / len(y)

  μ΄λŠ” μ•„λž˜μ™€ 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]

mean_squares_error(np.array(y), np.array(t))
-> 0.019500000000000007

2.3 ꡐ차 μ—”νŠΈλ‘œν”Ό 였차(Cross Entropy Error, CEE)

  ꡐ차 μ—”νŠΈλ‘œν”Ό 였차의 μˆ˜μ‹μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

$$ E=-\sum_{k}{t_{k}\log{y_k}} $$

  • $ y_k $ : μ‹ κ²½λ§μ˜ 좜λ ₯
  • $ t_k $ : μ •λ‹΅ λ ˆμ΄λΈ”, 원-ν•« 인코딩 데이터

  ꡐ차 μ—”νŠΈλ‘œν”Ό μ˜€μ°¨λŠ” $ \log $λ₯Ό ν™œμš©ν•˜μ—¬ 정닡일 λ•Œμ˜ 좜λ ₯이 전체 값을 μ •ν•˜κ²Œ ν•©λ‹ˆλ‹€. 정닡에 ν•΄λ‹Ήν•˜λŠ” λ ˆμ΄λΈ”μ˜ μ†Œν”„νŠΈλ§₯슀 좜λ ₯이 컀질수둝 0에 λ‹€κ°€κ°‘λ‹ˆλ‹€. λ°˜λŒ€λ‘œ 정닡에 ν•΄λ‹Ήν•˜λŠ” λ ˆμ΄λΈ”μ˜ 좜λ ₯이 μž‘μ•„μ§ˆμˆ˜λ‘ μ˜€μ°¨λŠ” μ»€μ§‘λ‹ˆλ‹€. 이λ₯Ό κ΅¬ν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

def cross_entropy_error(y: np.array, t: np.array) -> float:
    delta = 1e-7
    return -np.sum(t * np.log(y + delta))

  μ½”λ“œμ˜ λ§ˆμ§€λ§‰μ— μ•„μ£Ό μž‘μ€ 값인 deltaλ₯Ό λ”ν•œ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ•„μ£Ό μž‘μ€ 값을 λ”ν•¨μœΌλ‘œμ¨, $ \log $ ν•¨μˆ˜ λ‚΄λΆ€κ°€ 0이 λ˜μ–΄ λ¬΄ν•œλŒ€λ‘œ λ°œμ‚°ν•˜λŠ” 것을 막기 μœ„ν•΄μ„œ μž…λ‹ˆλ‹€. 이λ₯Ό μ‚¬μš©ν•œ κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]

cross_entropy_error(np.array(y), np.array(t))
-> 0.510825457099338

3. 손싀 ν•¨μˆ˜μ˜ 이용

3.1 λ―Έλ‹ˆλ°°μΉ˜(mini-batch) ν•™μŠ΅

  기계 ν•™μŠ΅μ€ ν•™μŠ΅ 데이터에 λŒ€ν•œ 솔싀 ν•¨μˆ˜μ˜ 값을 κ΅¬ν•˜κ³ , κ·Έ 값을 μ΅œλŒ€ν•œ μ€„μ—¬μ£ΌλŠ” λ§€κ°œλ³€μˆ˜λ₯Ό μ°Ύμ•„λƒ…λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” λͺ¨λ“  ν•™μŠ΅ 데이터λ₯Ό λŒ€μƒμœΌλ‘œ 손싀 ν•¨μˆ˜μ˜ 값을 ꡬ해야 ν•©λ‹ˆλ‹€. κ°€λ Ή, ꡐ차 μ—”νŠΈλ‘œν”Ό 였차λ₯Ό μ΄μš©ν•΄ λͺ¨λ“  ν•™μŠ΅ 데이터에 λŒ€ν•œ 손싀 ν•¨μˆ˜μ˜ 합을 κ΅¬ν•˜λŠ” 방법을 μƒκ°ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

$$ E=-\frac{1}{N}\sum_{n}\sum_{k}{t_{nk}\log{y_{nk}}} $$

  • $ N $ : λ°μ΄ν„°μ˜ 개수
  • $ t_{nk} $ : $ n $번째 λ°μ΄ν„°μ˜ $ k $번째 κ°’, μ •λ‹΅ λ ˆμ΄λΈ”
  • $ y_{nk} $ : μ‹ κ²½λ§μ˜ 좜λ ₯

  이전에 μ–ΈκΈ‰ν–ˆλ˜ 데이터 ν•˜λ‚˜μ— λŒ€ν•œ 손싀 ν•¨μˆ˜λ₯Ό $ N $개의 λ°μ΄ν„°λ‘œ ν™•μž₯ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λ§ˆμ§€λ§‰μ— $ N $으둜 λ‚˜λˆ„μ–΄ μ •κ·œν™”(normalization)λ₯Ό μ§„ν–‰ν•˜μ—¬ '평균 손싀 ν•¨μˆ˜'λ₯Ό κ΅¬ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ 평균을 κ΅¬ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ ν•™μŠ΅ 데이터와 상관 없이 μ–Έμ œλ“  ν†΅μΌλœ μ§€ν‘œλ₯Ό 얻을 수 μžˆλ”°λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

  ν•˜μ§€λ§Œ λͺ¨λ“  데이터λ₯Ό λŒ€μƒμœΌλ‘œ 손싀 ν•¨μˆ˜μ˜ 합을 κ΅¬ν•˜κΈ°μ—λŠ” μ‹œκ°„μ΄ 많이 ν•„μš”ν•©λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ°μ΄ν„°μ˜ 일뢀λ₯Ό μΆ”λ € μ „μ²΄μ˜ 'κ·Όμ‚¬μΉ˜'둜 μ΄μš©ν•©λ‹ˆλ‹€. 신경망 ν•™μŠ΅μ—μ„œλ„ ν•™μŠ΅ λ°μ΄ν„°λ‘œλΆ€ν„° μΌλΆ€λ§Œμ„ 골라 ν•™μŠ΅μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. 이 일뢀λ₯Ό λ―Έλ‹ˆλ°°μΉ˜λΌ λΆ€λ¦…λ‹ˆλ‹€. λ¬΄μž‘μœ„λ‘œ 데이터λ₯Ό μ„ νƒν•˜κ³  이λ₯Ό μ΄μš©ν•΄ ν•™μŠ΅ν•˜λŠ” 방법을 λ―Έλ‹ˆλ°°μΉ˜ ν•™μŠ΅μ΄λΌ ν•©λ‹ˆλ‹€.

3.2 ꡐ차 μ—”νŠΈλ‘œν”Ό 였차(배치)

  배치 데이터λ₯Ό μ§€μ›ν•˜λŠ” ꡐ차 μ—”νŠΈλ‘œν”ΌλŠ” 기쑴의 κ΅¬ν˜„μ—μ„œ 쑰금만 μˆ˜μ •ν•˜λ©΄ λ©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” 데이터가 ν•˜λ‚˜μΈ κ²½μš°μ™€ 배치둜 λ¬Άμ–΄μ„œ μž…λ ₯ν•˜λŠ” 경우 λͺ¨λ‘λ₯Ό μ²˜λ¦¬ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

def cross_entropy_error(y: np.array, t: np.array) -> np.array:
    if y.ndim == 1:
        t = t.reshape(1, t.size)
        y = y.reshape(1, y.size)
    
    batch_size = y.shape[0]
    delta = 1e-7
    
    return -np.sum(t * np.log(y + delta)) / batch_size

  λ§ˆμ§€λ§‰μ— 배치의 크기둜 λ‚˜λˆ”μœΌλ‘œμ¨ μ •κ·œν™”λ₯Ό μ§„ν–‰ν•˜κ³ , 각 λ°μ΄ν„°μ˜ 평균 ꡐ차 μ—”νŠΈλ‘œν”Ό 였차λ₯Ό 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.

3.3 손싀 ν•¨μˆ˜λ₯Ό μ§€ν‘œλ‘œ μ‚¬μš©ν•˜λŠ” 이유

  기계 ν•™μŠ΅μ˜ ꢁ극적인 λͺ©μ μ€ 높은 '정확도'λ₯Ό μ΄λŒμ–΄λ‚΄λŠ” λ§€κ°œλ³€μˆ˜ 값을 μ°ΎλŠ” κ²ƒμž…λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μ™œ '정확도'λΌλŠ” μ§€ν‘œκ°€ μ•„λ‹Œ, '손싀 ν•¨μˆ˜μ˜ κ°’'μ΄λΌλŠ” 우회적인 방법을 νƒν• κΉŒμš”?

  신경망 ν•™μŠ΅μ—μ„œ 'λ―ΈλΆ„'의 역할에 μ£Όλͺ©ν•΄λ³΄λ©΄ κ·Έ 해닡을 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. 신경망 ν•™μŠ΅μ—μ„œλŠ” 졜적의 λ§€κ°œλ³€μˆ˜(κ°€μ€‘μΉ˜μ™€ 편ν–₯)λ₯Ό 탐색할 λ•Œ, 손싀 ν•¨μˆ˜μ˜ 값을 κ°€λŠ₯ν•œ μž‘κ²Œ ν•˜λŠ” λ§€κ°œλ³€μˆ˜ 값을 μ°ΎμŠ΅λ‹ˆλ‹€. μ΄λ•Œ 기울기(gradient)λ₯Ό κ³„μ‚°ν•˜κ³ , 이λ₯Ό λ‹¨μ„œλ‘œ λ§€κ°œλ³€μˆ˜μ˜ 값을 μ„œμ„œνžˆ κ°±μ‹ ν•˜λŠ” 과정을 λ°˜λ³΅ν•˜κ²Œ λ©λ‹ˆλ‹€.

  기울기λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ§€κ°œλ³€μˆ˜μ˜ 미뢄을 계산해야 ν•©λ‹ˆλ‹€. λ§€κ°œλ³€μˆ˜ κ°€μš΄λ° κ°€μ€‘μΉ˜ λ§€κ°œλ³€μˆ˜ ν•˜λ‚˜λ₯Ό λ– μ˜¬λ €λ³΄κ² μŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή κ°€μ€‘μΉ˜ λ§€κ°œλ³€μˆ˜μ— λŒ€ν•œ 손싀 ν•¨μˆ˜μ˜ 미뢄은 'κ°€μ€‘μΉ˜ λ§€κ°œλ³€μˆ˜μ˜ 값을 μ•„μ£Ό 쑰금 λ³€ν™”μ‹œμΌ°μ„ λ•Œ, 손싀 ν•¨μˆ˜κ°€ μ–΄λ–»κ²Œ λ³€ν™”ν•˜λƒ'λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 이에 λŒ€ν•œ λ³€ν™”λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • λ―ΈλΆ„ κ°’ : μ–‘ → κ°€μ€‘μΉ˜ : 음의 λ°©ν–₯으둜 λ³€ν™”
  • λ―ΈλΆ„ κ°’ : 음 → κ°€μ€‘μΉ˜ : μ–‘μ˜ λ°©ν–₯으둜 λ³€ν™”
  • λ―ΈλΆ„ κ°’ : 0 →κ°€μ€‘μΉ˜ : λ³€ν™” μ—†μŒ

  μ—¬κΈ°μ„œ λ―ΈλΆ„ 값이 0이 되면 κ°€μ€‘μΉ˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ–΄λŠ μͺ½μœΌλ‘œ 움직여도 손싀 ν•¨μˆ˜μ˜ 값은 λ³€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉, λ―ΈλΆ„ 값이 0일 λ•Œ κ°€μ€‘μΉ˜ λ§€κ°œλ³€μˆ˜μ˜ 갱신은 멈μΆ₯λ‹ˆλ‹€. 정확도λ₯Ό μ§€ν‘œλ‘œ μ‚Όμ•„μ„œ μ•ˆ λ˜λŠ” μ΄μœ λŠ” μ •ν™•λ„μ˜ λ―ΈλΆ„ 값이 λŒ€λΆ€λΆ„μ˜ μž₯μ†Œμ—μ„œ 0이 λ˜μ–΄ λ§€κ°œλ³€μˆ˜λ₯Ό κ°±μ‹ ν•  수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 정확도λ₯Ό μ§€ν‘œλ‘œ μ‚ΌμœΌλ©΄, κ°€μ€‘μΉ˜ λ§€κ°œλ³€μˆ˜λ₯Ό 쑰금 μˆ˜μ •ν•˜λ”λΌλ„ 정확도가 κ°œμ„ λ˜μ§€ μ•Šκ³  μΌμ •ν•˜κ²Œ μœ μ§€λ©λ‹ˆλ‹€. μ •ν™•λ„λŠ” λ§€κ°œλ³€μˆ˜μ˜ λ―Έμ„Έν•œ λ³€ν™”μ—λŠ” 거의 λ°˜μ‘ν•˜μ§€ μ•Šκ³ , λ°˜μ‘μ΄ μžˆλ”λΌλ„ κ·Έ 값이 λΆˆμ—°μ†μ μœΌλ‘œ κ°‘μžκΈ° λ³€ν™”ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 이유 λ•Œλ¬Έμ— 손싀 ν•¨μˆ˜λ₯Ό 신경망 ν•™μŠ΅μ˜ μ§€ν‘œλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.