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