바뀜

1,984 바이트 추가됨 ,  2021년 12월 29일 (수) 13:20
잔글
1번째 줄: 1번째 줄:  
== 개요 ==
 
== 개요 ==
 
딥러닝을 통해 어떤 현상을 예측하고 나면 그 예측의 정확도에 따라 다시 학습을 해주어야 한다. 손실함수는 그 오차를 이전의 가중치들에 전달하며 가중치를 조절하는 데 쓰인다. 딥러닝의 목표는 이 손실함수를 작게 만드는 것이 목표라 보아도 무방하다.
 
딥러닝을 통해 어떤 현상을 예측하고 나면 그 예측의 정확도에 따라 다시 학습을 해주어야 한다. 손실함수는 그 오차를 이전의 가중치들에 전달하며 가중치를 조절하는 데 쓰인다. 딥러닝의 목표는 이 손실함수를 작게 만드는 것이 목표라 보아도 무방하다.
 +
 +
== 오차제곱합 ==
 +
Sum of Squares for Error. SSE. 신경망의 출력값과 실제 값의 오차를 제곱한 후 이들을 합한 것이다. <math>E = \frac{1}{2}\sum_{k}(y_k - t_k)^2</math>
 +
 +
=== 구현 ===
 +
<syntaxhighlight lang="python">
 +
def sum_squares_error(y, t):  # 참 값을 t에 넣고, 추정값을 y에 넣어 구하자.
 +
    return 0.5 * np.sum((y-t)**2)
 +
</syntaxhighlight>
 +
 +
== 평균제곱오차 ==
 +
Mean Squared Error. MSE. 출력값과 실제 값의 차를 제곱한 후 더하고 관측값으로 나눈 것. <math>MSE = \frac{1}{N}\sum_{i=1}^N(y_i - t_i)^2</math>
 +
 +
RMSE는 위 오차에 루트를 씌워준 것.
 +
 +
== 교차 엔트로피 오차 ==
 +
cross entropy error. CEE. 오차제곱합에선 정답에 대한 정보 외에 정답이 아닌 것에 대한 오차도 들어간다. 이런 정보는 사실상 쓸데 없다고 할 수 있지 않을까. 때문에 답이 아닌 다른 추측에 대한 정보를 제거하기 위해 연산값에 <math>t_k</math>를 곱하는 형태를 취하고, 정답에서 벗어난 답을 낼수록 더 큰 값을 갖게 하기 위해 로그를 사용한다.(얼추 맞으면 그닥 교육이 이루어지지 않게끔 하기 위해.)
 +
 +
<math>E = -\sum_{k}t_k \ln{y_k}</math> 밑이 e인 자연로그를 사용한 방식이다. 해당 답에 1이라는 결과를 내면 오차는 없고, 0에 가까울수록 무한대로 큰 값을 갖는다.<syntaxhighlight lang="python">
 +
def cross_entropy_error(y, t):  # 참 값을 t에 넣고, 추정값을 y에 넣어 구하자.
 +
    delta = 1e-7  # 작아질 수 있는 최소값을 지정하기 위해 아주 작은 수를 더한다.
 +
    return -np.sum(t * np.log(y+delta) )  # y=0이 되더라도 delta에 의해 무한대의 값을 갖진 않는다.
 +
</syntaxhighlight>y가 0에 가까워질수록 급격하게 무한대에 가까워지는데, 곧잘 컴퓨터에서 다룰 수 있는 수치를 넘어선다. 때문에 실질적으로 그닥 영향을 미치지 않을 delta를 더해준다.
 
[[분류:딥러닝 이론]]
 
[[분류:딥러닝 이론]]