David의 개발 이야기!

신경망 학습에 대해 알아보자 본문

밑바닥부터 시작하는 딥러닝

신경망 학습에 대해 알아보자

david.kim2028 2022. 5. 15. 17:58
반응형

1. 데이터 주도 학습 

 

2. 훈련데이터와 시험 데이터 

 

기계학습 문제는 데이터를 훈련데이터와 시험데이터로 나누어서 학습과 실험을 수행한다. 훈련데이터만 사용해서 최적의 매개변수를 찾고, 시험데이터를 사용해 앞서 훈련한 모델의 실력을 평가한다. 이러한 방법을 사용하는 이유는, overfitting 문제를 피하기 위해서다.

overfitting 문제는, 한 데이터셋에저만 지나치게 최적화된 상태를 의미한다.(과대적합) 

 

 

3. 미니 배치 

미니 배치를 이용하는 이유는 컴퓨터의 정보처리 효율성 때문이다. 

컴퓨터는 10000개의 데이터를 1개씩 10000번 연산하는 것보다, batch_size 단위(100개 ) 의 데이터를 100번에 연산할때 보다 더 계산량이나 속도에 있어 효율적이다.

 

책에 따르면, 이미지 1장당 처리시간을 대폭 줄여주고, 커다란 신경망에서는 데이터 전송이 병목으로 작용하는 경우가 자주있는데, 배치처리를 함으로써 버스에 주는 부하를 줄인다고 한다. (정확히는 느린 I/O를 통해 데이터를 읽는 횟수가 줄어, 빠른 CPU나 GPU로 순수 계산을 수행하는 비율이 높아진다 )

 

4. 손실함수 Loss function

손실함수는 신경망 성능의 '나쁨'을 나타내는 지표로 현재의 신경망이 훈련데이터를 얼마나 잘 처리하지 못하냐를 나타낸다. 

 

 

 

4-1. SSE ( Sum of Squares for Error, 오차제곱합 ) 

tk 는 정답레이블, k 는 데이터의 차원수, yk 는 신경망의 출력(신경망이 추정한 값을 의미함) 

def sum_squares_error(y, t):
	return 0.5 * np.sum((y-t)**2)

SSE 가 작을수록 정답에 더 가까울 것으로 판단한다. 

 

4-2. CEE ( Cross Entropy Error, 교차 엔트로피 오차) 

tk 는 정답레이블, k 는 데이터의 차원수, yk 는 신경망의 출력(신경망이 추정한 값을 의미함) 

def cross_entropy_error(y, t):
	delta = 1e-7
    return -np.sum(t * np.log(y +delta))

delta를 더해주는 이유는 마이너스 무한대가 발생하지 않도록 하기 위함임. 

CEE 도 SSE 와 마찬가지로, 오차값이 작을 수록 정답이라고 추정함. 

 

5. 그렇다면 손실함수를 왜 설정하는가? 

숫자 인식의 경우도 결국 높은 '정확도 accuracy'를 끌어내는 매개변수를 찾는 것이다. 그렇다면 '정확도 accuracy' 를 두고 손실함수의 값이라는 우회적인 방법을 택하는 이유는 무엇일까?

 

신경망학습에서는 최적의 매개변수( 가중치와 편향 ) 을 탐색할때 손실 함수의 값을 가능한 작게하는 매개변수 값을 찾는다. 이 때 매개변수의 미분을 계산하고, 그 미분 값을 단서로 매개변수의 값을 서서히 갱신하는 과정을 반복한다. 

 

가상의 신경망이 있다고하고, 그 신경망의 어느 한 가중치 매개변수를 보면, 이 때 그 가중치 매개변수의 손실함수의 미분이란 " 가중치 매개변수의 값을 아주 조금 변화시켰을때, 손실함수가 어떻게 변화냐 " 라는 의미이다. 만약, 이 미분 값이 음수면 그 가중치 매개변수를 음의 방향으로 변화시켜 손실함수의 값을 줄일수 있다. 그러나 미분 값이 0이면 가중치 매개변수를 어느쪽으로 움직여도 손실함수의 값은 줄어들지 않는다. 그래서 가중치 매개변수의 갱신은 거기서 멈춘다.

 

정확도 accuracy 를 지표로 삼아서는 안 되는 이유는, 미분 값이 대부분의 장소에서 0이 되어 매개변수를 갱신할 수 없기 때문이다. 

 

구체적인 예로, 100장의 훈련데이터중 32장만이 올바로 인식한다고 하면 정확도는 32%이다. 만약 정확도가 지표였다면 가중치 매개변수를 조금 바꾼다고 해도 정확도는 그대로 32$일것이다. 즉, 매개변수를 약간만 조정해서는 정확도가 개선되지 않고 일정하게 유지된다. 정확도가 개선된다하더라도 그 값은 3%, 34%처럼 불연속한 띄엄띄엄한 값으로 바뀌어버린다. 

 

loss function과 accuracy 를 비교해보면, 

loss function 은 예측값과 참값의 차이를 바탕으로 계산되지만, accuracy 는 참이냐 아니냐만을 기반으로 계산된다.

따라서, loss function 이 더 연속적이고 민감하게 성과 향상을 측정하는데 활용될 수 있다!!

 

6. 경사법 ( 경사 하강법 ) 

기계학습 문제 대부분은 학습 단계에서 최적의 매개변수를 찾아낸다. 신경망 역시 최적의 매개변수(가중치와 편향)를 학습시에 찾아야한다. 여기에서 최적이란, 손실함수가 최솟값이 될때의 매개변수 값이다. 그러나, 일반적인 문제의 손실함수는 매우 복잡하고, 매개변수 공간이 광대하여 어디가 최솟값이 되는 곳인지를 짐작할 수 없다. 이런 상황에서 기울기를 잘 이용해 함수의 최솟값을 찾으려는 것이 경사법이다. 

 

기울어진 방향이 꼭 최솟값을 가리키는 것은 아니다. 그러나 그 방향으로 가야 함수의 값을 줄일수 있다. 그래서 최솟값이 되는 장소를 찾는 문제 에서는 기울기 정보를 단서로 나아갈 방향을 정해야한다. 

 

경사법은 현 위치에서 기울어진 방향으로 일정거리 만큼 이동한다. 그런 다음 이동한 곳에서도 마찬가지로 기울기를 구하고 또 기울어진 방향으로 나아가기를 반복한다. 

 

eta는 갱신하는 양을 나타내며, 신경망 학습에서는 학습률이라고 한다. 한번의 학습으로 얼마만큼 학습해야할지, 매개변수 값을 얼마나 갱신하느냐를 정하는 것이 학습률이다. 

 

 

 

 

신경망에서의 기울기 -> 편미분을 통해 구한다. 

반응형
Comments