신경망 학습

IKNOW·2024년 10월 24일

이번에는 신경망 학습에 대해 정리한다.

학습(training)은 훈련데이터를 사용해 가중치(W)의 최적값을 자동으로 획득하는 것을 의미한다.

데이터를 이용한 학습

신경망은 데이터를 이용해 학습한다. 만약 직접 신경망의 가중치를 수동으로 결정해야 한다면, 신경망은 발전하지 못했을 것이다. 예를들어 이전에 학습했던 퍼셉트론에서는 3개의 가중치로 퍼셉트론을 만들었지만, 요즘 유행하는 딥러닝에 사용되는 매개 변수는 수 억에서 수십, 수백 억까지 된다.

이 매개변수를 수동으로 설정하는 것은 사실상 불가능하다.

기계학습은 데이터가 가장 중요하다. 답과 패턴은 데이터에 있다.

사람은 어떤 문제를 해결할 때, 생각하고 답을 찾지만, 머신러닝에서는 사람의 개입은 최소화하고, 데이터로부터 패턴을 찾는다.

훈련과 시험(training and test)

머신러닝은 훈련데이터와 시험 데이터로 나눠서 학습과 시험을 수행한다. 시험데이터를 따로 분리하는 이유는 궁극적으로 머신러닝을 통해 학습하지 않은(훈련데이터에 포함되지 않은) 문제를 풀어내는 것이기 때문이다.

만약 훈련한 데이터를 시험 데이터로서 사용한다면 학습 모델에 대한 올바른 평가를 할 수 없다. 훈련에 사용된 데이터는 시험에서 높은 정답을 맞출수도 있지만, 새로운 데이터에서는 전혀 맞지 않을 수 있다.

손실함수

신경망에서는 학습하는 동안 최적의 매개변수 값을 탐색하는데, 이때 최적을 판단하는 지표가 손실함수(loss function)이다. 일반적으로는 오차제곱합 또는 교차 엔트로피 오차를 사용한다.

오차제곱합 sum of squares for error, SSE

가장 많이 사용되는 손실함수는 SSE이다.

수식으로는 아래와 같이 표현된다.

E=12k(yktk)2E = {1 \over 2} \sum_k (y_k-t_k)^2

yky_k는 신경망이 추정한 값, tkt_k는 정답 레이블, kk는 데이터의 차원 수이다.

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

교차 엔트로피 오차 cross entropy error, CEE

정답일 때의 추정의 자연로그

E=ktklogykE = - \sum_kt_k\log{y_k}
def cross_entropy_error(y, t, delta=1e-7):
    return -np.sum(t*np.log(y+delta))

손실함수를 사용하는 이유

신경망 학습에서는 최적의 매개변수를 구하는 과정에서 손실함수의 값을 가능한 작게하는 매개변수를 탐색한다. 이때 매개변수의 미분의 계산하고, 그 미분값을 사용하여, 매개변수의 값을 갱신하는 과정을 반복한다.

여기서 매개변수의 미분이란 가중치를 아주 조금만 변화시켰을때, 손실함수가 변하는 값을 의미한다.

만약 미분 값이 음수라면 매개변수를 양의 방향으로 변화시키고, 반대로 양수라면, 음의 방향으로 변화시켜 손실함수를 줄일 수 있다.

이때 미분값이 0이라면, 가중치 매개변수를 움직여도 손실함수는 변하지 않기 때문에 더이상 매개변수가 갱신되지 않는다.

정확도를 매개변수로 사용하지않는 이유는 정확도의 경우, 100개의 훈련 데이터중 30개를 맞춘다고 했을때, 아마 매개변수를 조금만 변화시키다고 하더라도 31개 혹은 29개를 맞추진 않을것이기 때문에 매개 변수가 갱신되지 않는 경우가 생긴다.

profile
조금씩,하지만,자주

0개의 댓글