데이터에서 학습한다!


신경망의 특징은 데이터를 보고 학습할 수 있다는 점이다.

데이터에서 학습한다는 것은 가중치 매개변수의 값을 데이터를 보고 자동으로 결정된다는 뜻이다.

기계학습의 중심에는 데이터가 존재한다. 이미지에서 특징을 추출하고 그 특징의 패턴을 기계학습 기술로 학습하는 방법이 있다. 여기서 특징은 입력 데이터(입력 이미지)에서 본질적인 데이터(중요한 데이터)를 정확하게 추출할 수 있도록 설계된 변환기를 가리킨다.

컴퓨터 비전 분야에서는 SIFT, SURF, HOG 등의 특징을 많이 사용한다. 이러한 특징을 사용하여 이미지 데이터를 벡터로 변환하고, 변환된 벡터를 갖고 지도 학습 방식의 대표 분류 기법인 SVM, KNN 등으로 학습할 수 있다.

신경망은 이미지를 ‘있는 그대로’ 학습한다. 앞의 방식에서는 특징을 사람이 설계했지만(SIFT, HOG), 신경망은 이미지에 포함된 중요한 특징까지도 ‘기계’가 스스로 학습한다.

신경망은 모든 문제를 주어진 데이터 그대로를 입력 데이터로 활용해 ‘end-to-end’로 학습할 수 있다.

훈련 데이터와 시험 데이터

기계학습 문제는 데이터를 훈련 데이터(training data)와 시험 데이터(test data)로 나눠 학습과 실험을 수행하는 것이 일반적이다. 처음에는 훈련 데이터만 사용하여 학습하면서 최적의 매개변수를 찾고, 그 다음 시험 데이터를 사용하여 앞서 훈련한 모델의 실력을 평가한다.

훈련 데이터와 시험 데이터를 나누는 이유는 아직 보지 못한 데이터로도 문제를 올바르게 풀어내는 범용 능력을 제대로 평가하기 위해 훈련 데이터와 시험 데이터를 분리하는 것이다.

손실 함수


손실 함수는 신경망 학습에서 사용하는 지표로 현재 신경망이 훈련 데이터를 얼마나 잘 처리하는지 못하는지를 나타낸다.

오차제곱합

가장 많이 쓰이는 손실 함수는 **오차제곱합(sum of squares for error, SSE)**이다.

image.png

y𝘬는 신경망의 출력(신경망이 추정한 값), t𝘬는 정답 레이블, 𝘬는 데이터의 차원 수를 나타낸다.

오차제곱합을 구현하면 다음과 같다.

import numpy as np

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

y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0] # 한 원소를 1 나머지는 0으로 하는 것을 원-핫 인코딩이라고 한다.

sum_squares_error(np.array(y), np.array(t)) # 0.09750000000000003