최적화 - 경사하강법
손실함수(Loss Function), 비용함수(Cost Function), 목적함수(Object Function), 오차함수(Error Function)
다 같은 함수인데 어떤 관점에서 보는지에 따라 부르는게 다를 뿐 모두 모델의 예측한 값과 실제값 사이에 얼마나 차이가 나는지 오차를 계산하는 함수이다.
학습할 때 사용(모델이 파라미터를 찾을 때)
평가함수(최종적으로 모델의 성능이 어떤지 판정하는 함수) 와 손실함수(학습하는 도중 얼마나 오차가 났는지 계산하는 함수)는 다르다.
해결하려는 문제에 맞춰 Loss 함수를 기반으로 정의한다.
최적화 문제를 해결하는 방법(fit할때 해줌)
Loss 함수 최적화 함수를 찾기
경사하강법 (Gradient Descent)
최적화는 Loss를 줄이는 것인데 loss함수는 한번에 loss를 줄이는 것인데 경사하강법은 하나씩 줄여가면서 loss를 줄여가는 것이다. → 즉,값을 조금씩 조금씩 조정해나가면서 최소값을 찾는다는 것이다.
딥러닝 모델들에는 최적화방법이 없어 딥러닝 모델들은 경사하강법을 사용한다.
즉
⇒ 최적의 w가 된것은 기울기가 0이 된 것으로 알 수 있다.
<예제로 확인해 보자>
import numpy as np
def loss(weight):
return (weight - 1) ** 2 + 2
def derived_loss(weight):
return 2 * (weight - 1)
np.random.seed(0)
learning_rate = 0.4
max_iter = 100
weight = np.random.randint(-2, 3)
weight_list = [weight]
iter_cnt = 0
while True:
if derived_loss(weight) == 0 or iter_cnt == max_iter:
break
weight = weight - learning_rate * derived_loss(weight)
weight_list.append(weight)
iter_cnt += 1
print("Iteration Count:", iter_cnt)
print("Final Weight:", weight)
print("Loss at Final Weight:", loss(weight))
print("Weight History:", weight_list)
=> 초기 파라미터 weight를 랜덤하게 설정하고, 주어진 손실 함수 loss와 그에 해당하는 미분 함수 derived_loss를 사용하여 경사하강법을 수행합니다. 최대 반복 횟수 max_iter와 학습률 learning_rate도 설정합니다.
=> 새로운 weight를 계산하고 업데이트하는 과정을 반복 (반복은 다음 조건 중 하나를 만족할 때까지 수행)
=> 미분값이 0이 되는 경우 또는 최대 반복 횟수에 도달한 경우 반복이 종료된다.