그런데 왜 굳이 손실 함수를 사용해야 하는 걸까?
예컨대 숫자 인식의 경우도 우리의 궁극적인 목표는 높은 “ 정확도 “ 를 끌어내는 매개변수 값을 찾는 것이다.
그렇다면 “ 정확도 “ 라는 지표를 놔두고 “ 손실 함수의 값 “ 이라는 우회적인 방법을 택하는 이유는 뭘까?
이 의문은 신경망 학습에서의 “ 미분 “ 의 역할에 주목한다면 해결 된다.
신경망 학습에서는 최적의 매개변수 ( 가중치와 편향 ) 를 탐색할 때 손실 함수의 값을 가능한 한 작게 하는 매개변수 값을 찾게 된다.
이때 매개변수의 미분 ( 기울기 ) 를 계산하고, 그 미분 값을 단서로 매개변수의 값을 서서히 갱신하는 과정을 반복한다.
가령 가상의 신경망이 있다고 가정하고, 그 신경망의 어느 한 가중치 매개변수에 주목한다고 하자.
이때 그 가중치 매개변수의 손실 함수의 미분이란, “ 가중치 매개변수의 값을 아주 조금 변화 시켰을 때, 손실 함수가 어떻게 변하는가? “
만약 이 미분값이 음수라면 매개변수를 양의 방향으로 변화 시키고,
미분값이 양수라면 매개변수를 음의 방향으로 변화 시켜 손실함수의 값을 줄일 수 있다.
그러나 미분 값이 0이면 가중치 매개변수를 어느 쪽으로 움직여도 손실 함수의 값은 달라지지 않는다. 그 이후로 가중치 매개변수의 갱신은 멈추게 된다.
정확도를 지표로 삼아서 안 되는 이유는 미분 값이 대부분의 장소에서 0이 되어 매개변수를 갱신할 수 없기 때문이다.
정확도를 지표로 삼으면 매개변수의 미분이 대부분의 장소에서 0이 되는 이유는 무엇일까?
예를 들어 한 신경망이 100장의 훈 데이터 중 32장을 올바로 인식한다고 하자.
그렇다면 정확도는 32%이다. 만약 정확도가 지표였다면 가중치 매개변수의 값을 조금 바꾼다고 해도 정확도는 그대로 32%이다.
즉, 매개변수를 약간만 조정해서는 정확도가 개선되지 않고 일정하게 유지 된다.
혹, 정확도가 개선된다 하더라도 그 값은 32.0123%와 같은 연속적인 변화보다는 33%나 34% 처럼 불연속적인 띄엄띄엄한 값으로 변경되기 마련이다.
한편, 손실 함수를 지표로 삼았다면 어떨까?
현재의 손실 함수의 값은 0.92543…. 같은 수치로 나타난다. 그리고 매개변수의 값이 조금 변하면 그에 반응하여 손실 함수의 값도 0.93432…. 처럼 연속적으로 변화하는 것이다
정확도는 매개변수의 미소한 변화에는 거의 반응을 보이지 않고, 반응이 있더라도 그 값이 불연속적으로 갑자기 변화한다.
이는 “ 계단 함수 “ 를 활성화 함수로 사용하지 않는 이유와도 들어 맞는다.
만약 활성화 함수로 계단 함수를 사용하면 지금까지 설명한 것과 같은 이유로 신경망 학습이 잘 이뤄지지 않는다.
계단 함수의 미분은 대부분의 장소 ( 0 이외의 곳 ) 에서 0이다. 그 결과, 계단 함수를 이용하면 손실 함수를 지표로 삼는게 아무 의미가 없게 된다. 매개 변수의 작은 변화가 주는 파장을
계단 함수가 말살하여 손실 함수의 값에는 아무런 변화가 나타나지 않기 때문이다.
계단 함수는 한순간만 변화를 일으키지만, 시그모이드 함수의 미분은 출력이 연속적으로 변하고 곡선의 기울기도 연속저으로 변한다.
즉 시그모이드 함수의 미분은 어느 장소라도 0이 되지 않는다. 이는 신경망 학습에서 중요한 성질로, 기울기가 0이 되지 않는 덕분에 신경망이 올바르게 학습할 수 있는 것이다.
계단 함수
시그모이드 함수
'머신러닝, 딥러닝' 카테고리의 다른 글
편미분 (0) | 2020.01.20 |
---|---|
수치 미분 ( numerical differentiation ) (0) | 2020.01.20 |
미니 배치 학습 (0) | 2020.01.20 |
교차 엔트로피 오차 ( Cross Entropy Error, CEE ) (0) | 2020.01.20 |
tensorflow CNN (합성곱) 에서의 conv2d (0) | 2020.01.20 |