프로그래머는 어떤 분야의 전문가를 통해 전문 지식을 학습하고 알고리즘화할 수 있는 그 분야의 지식을 프로그래밍한다. 그런데 어떤 분야(음성 인식, 영상 인식)의 지식은 규칙성을 쉽게 찾을 수 없어 알고리즘화 할 수 없는 경우도 있다. 이런 경우, 과학적인 접근법을 취하는데, 먼저 많은 수의 데이터로 시작해서 데이터의 규칙성을 찾는다. 일정한 규칙성이 발견되면 가설(알고리즘)을 세우고 검증한다. 그리고 검증된 이론으로 새로운 현상을 예측한다.
음성인식, 영상인식 등은 사람이 직접 가설을 세우고 검증하기 어려운 분야로, 머신러닝이 필연적으로 등장한다. 머신러닝은 데이터를 학습해 알고리즘을 찾는다. 신경망은 데이터를 학습해 매개변수 값을 조정함으로 스스로 프로그램을 짜고 검증한다.
< 딥러닝의 특징 >
학습이란 데이터로부터 가중치 매개변수의 최적값을 결정한다는 뜻이다.
ex) 예상되는 시험점수 = 공부시간 데이터 * (매개변수 최적값) + 기타 변수
딥러닝은 end to end 머신러닝이라고 한다. end to end는 '처음부터 끝까지'라는 의미로 데이터(입력)에서 목표한 결과(출력)을 사람의 개입 없이 얻는다는 뜻을 담고있다.
머신러닝 문제는 데이터를 훈련데이터와 시험데이터로 나눠 학습과 실험을 수행하는 것이 일반적이다. 우선 훈련데이터만 사용해 학습하면서 최적의 매개변수를 찾는다. 그런 다음 시험데이터를 사용하여 앞서 훈련한 모델의 실력을 평가하는 것이다.
손실 함수는 일반적으로 평균제곱오차와 교차엔트로피오차를 사용한다.
데이터셋의 데이터 수가 매우 큰 경우 모든 데이터를 대상으로 손실함수의 합을 구하는 것은 비현실적이다. 데이터 일부를 무작위로 추려 전체의 근사치로 이용할 수 있다. 이 일부를 미니배치(mini-batch)라고 한다.
신경망의 어느 한 가중치 매개변수에 주목한다고 하자. 이때 그 가중치 매개변수의 손실함수의 미분이란 '가중치 매개변수의 값을 아주 조금 변화시켰을 때, 손실함수가 어떻게 변하나'라는 의미이다. 만약 이 미분값이 음수면 그 가중치 매개변수를 양의 방향으로 변화시켜 손실함수의 값을 줄이고, 반대로 양수면 음의방향으로 변화시켜 손실함수의 값을 줄일 수 있다. 미분값이 0이면 가중치 매개변수를 어느쪽으로 움직여도 손실함수 값은 달라지지 않는다. 가중치 매개변수의 갱신은 거기서 멈춘다.
변수가 여럿인 함수에 대한 미분을 편미분이라고 한다.
모든 변수의 편미분을 벡터로 정리한 것을 기울기라고 한다.
기울기는 각 지점에서 낮아지는 방향을 가리킨다. 더 정확히 말하자면 기울기가 가리키는 쪽은 각 장소에서 함수의 출력값을 줄이는 방향이다. 기울기를 잘 이용해 함수의 최솟값을 찾으려는 것이 경사법이다.
경사법은 현 위치에서 기울어진 방향으로 일정 거리만큼 이동한다. 그런 다음 이동한 곳에서도 마찬가지로 기울기를 구하고, 또 그 기울어진 방향으로 나아가기를 반복한다. 이렇게 해서 함수의 값을 점차 줄이는 것이 경사법이다.
신경망 학습에서도 기울기를 구해야한다. 기울기는 가중치 매개변수에 대한 손실함수의 기울기이다.
확률적으로 무작위로 골라낸 데이터에 대해 경사 하강법을 확률적 경사 하강법(Stockastic Gradient Descent, SGD)라고 한다.
에폭은 하나의 단위이다. 1에폭은 학습에서 훈련 데이터를 모두 소진했을 때의 횟수에 해당한다. 예컨대 훈련 데이터 10,000개를 100개의 미니배치로 학습할 경우, 확률적 경사 하강법을 100회 반복하면 모든 훈련 데이터를 소진한게 된다. 이 경우 100회가 1에폭이 된다.