NN Learning
학습
신경망 학습에서 학습이란 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것을 뜻한다. 학습의 지표중 하나인 손실 함수의 결과값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표이고, 그 방법으로는 경사법을 사용한다.
데이터 주도 학습
기계학습의 중심에는 데이터가 존재한다. 데이터에서 답을 찾고 데이터에서 패턴을 발견하고 데이터로 무언갈 해내는 것이 기계학습이다. 그러나 보통 어떤 문제를 해결할 때 사람은 경험과 직관을 근거로 해답을 찾아내지만, 기계학습에서는 사람의 개입을 최소화 하고 데이터로부터 패턴을 찾으려 시도한다. 그런 방법의 하나로, 특징을 추출하고 그 패턴을 기계학습 기술로 학습하는 방법이 있다.
이와 같은 기계학습에서는 모아진 데이터로부터 규칙을 찾아내는 역할을 기계가 담당한다. 다만 여전히 ‘특징’은 사람이 설계하기에 문제에 적합한 특징을 설계하지 않으면 바라는 결과를 얻을 수 없다.
기계학습 문제는 데이터를 훈련 데이터와 시험 데이터로 나눠 학습과 시험을 수행하는 것이 일반적이다. 데이터를 이렇게 두 가지로 나누는 이유는 아직 보지 못한 데이터로도 문제를 올바르게 풀어내는 능력을 제대로 평가하기 위해 훈련 데이터와 시험 데이터로 데이터를 분리하는 것이다.
손실 함수
신경망 학습에서는 현재의 상태를 ‘하나의 지표’로 표현한다. 그리고 그 지표는 손실 함수loss function라고 한다.손실 함수는 일반적으로 오차제곱합과 교차 엔트로피 오차를 사용한다
오차제곱합sum of squares for error ,SSE
오차제곱합의 수식은 다음과 같다. \(E = \frac{1}{2}\sum _k (y_k-t_k)^2\) 여기서 $y_k, t_k, k$는 각각 신경망의 출력, 정답 레이블, 데이터의 차원 수를 나타낸다. 오차제곱합은 각 원소의 출력과 정답 레이블의 차를 제곱한 후 그 총합을 구한다.
def sum_squares_error(y, t):
return 0.5 * np.sum((y-t)**2)
교차 엔트로피 오차cross entropy error, CEE
교차 엔트로피 오차의 수식은 다음과 같다. \(E=-\sum_kt_k\log y_k\) $y_k, t_k$는 각각 신경망의 출력, 정답 레이블이다. 정답 레이블에서 정답에 해당하는 인덱스의 원소만 1이며, 나머지는 0이다(원-핫 인코딩). 따라서 교차 엔트로피 오차는 실질적으로 정답일 때의 추정($t_k$가 1 일때의 $y_k$)의 자연로그를 계산하는 식이 된다. 즉, 교차 엔트로피 오차는 정답일 때의 출력이 전체 값을 정하게 된다.
로그의 성질에 따라 정답에 해당하는 출력이 커질수록 0에 다가가다가, 그 출력이 1일때 0이 된다.
def cross_entropy_error(y, t):
delta = 1e-7
return -np.sum(t*np.log(y+delta))
미니배치 학습
훈련 데이터에 대한 손실 함수의 값을 구하고, 그 값을 최대한 줄여주는 매개변수를 찾기 위해선 모든 훈련 데이터를 대상으로 손실 함수 값을 구해야 한다. \(E=-\frac{1}{2}\sum_n\sum_kt_{nk}\log y_{nk}\) 단순히 교차 엔트로피 오차의 범위를 N개의 데이터로 확장한 식이다. 다만 N으로 나누어 정규화 함으로써 평균 손실 함수를 구한다.
그러나 데이터의 수가 클 경우 데이터 일부를 추려 전체의 ‘근사치’로 이용하고 , 이 일부를 미니배치라고 한다. 또한, 이러한 학습 방법을 미니배치 학습이라고 한다.
손실 함수를 정의하는 이유
머신러닝의 목표는 높은 ‘정확도’를 만들어 내는 매개변수를 찾는 것인데 어째서 정확도가 아닌 ‘손실 함수의 값’이라는 지표를 선택할까?
신경망 학습에서는 최적의 매개변수를 탐색할 때 손실 함수의 값을 가능한 한 작게 하는 매개변수 값을 찾는다. 이때 매개변수의 미분을 계산하고, 그 값을 단서로 매개변수의 값을 서서히 갱신하는 과정을 반복한다.
이때 그 가중치 매개변수의 손실 함수의 미분이란 가중치 매개변수의 값을 아주 조금 변화시켰을 때, 손실 함수가 어떻게 변하는가라는 의미이다. 다시 돌아와서 정확도를 지표로 삼아서는 안되는 이유는 미분 값이 대부분의 장소에서 0이 되기에 매개변수를 갱신할 수 없기 때문이다.
Enjoy Reading This Article?
Here are some more articles you might like to read next: