손실함수

Sam (토론 | 기여)님의 2021년 9월 8일 (수) 23:55 판

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 교차 엔트로피 오차

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를 더해준다.