간단한 기계 학습의 예
선형 회귀 문제
- 식 y=wx + b 의 직선 모델(가설)을 사용하므로 두 개의 매개변수 θ = (w, b)^T
데이터를 살펴보았으니 이제는 그 데이터를 실제 학습해보자. 회귀라고 하는 것은 실수값인 y를 예측하는 과정이다. 선형회귀는 회귀문제에서 모델을 선형 즉, 직선의 형태로 놓고 문제를 푸는 것이다. 직선 모델은 매개값이 2개이다. 우리가 w,b를 어떻게 설정하느냐에 따라서 우리는 x,y의 상관관계 (규칙)를 명확하게 설명할 수도 있고 실패할 수도 있다.
목적 함수 (또는 비용 함수)
- 아래 식은 선형 회귀를 위한 목적 함수
- 평균 제곱오차(Mean square error function) 라 부름
𝑓θ(𝐱𝑖) 는 예측함수의 예측 출력, yi는 예측함수가 맞추어야 하는 실제 목표치
𝑓θ(𝐱𝑖) - yi는 오차error 혹은 손실loss
처음에는 최적 매개변수 값을 알 수 없으므로 임의의 난수로 θ1 = (𝑤1, 𝑏1)^T 설정
→ θ2 = (𝑤2, 𝑏2)^T 로 개선 → θ3 = (𝑤3, 𝑏3)^T 로 개선 → θ3는 최적해 θ^이때 𝐽 (θ1) > 𝐽 (θ2) > 𝐽 (θ3)
학습에서 목표는 경험 데이터를 통하여 주어져 있는 과업에 대해 성능을 향상 시키는 것이다.
사람이 수학을 학습할 때 수학 문제를 많이 풀어보는 것이 경험이다. 내가 풀어본 문제들의 개수를 카운트해서(성능판단), 많이 맞추었다면 학습이 잘되었다고 생각할 수 있으며 많이 틀렸다면 학습을 잘못했다고 판단해 방법을 바꾸어 새로운 학습을 할 수 있다.
이처럼 성능이 좋다 안좋다를 정량적으로 판단하는 기준이 있어야하는데, 기계학습에서는 그것이 바로 목적함수(비용함수)이다.
다양한 형태로 모델에 의해서 만든 예측값과 실제값의 차이를 정량적으로 판단하는게 목적함수의 목적이다. 예측값과 실제값의 차이를 오차 또는 손실이라고 하며 이 값이 커지면 커질 수록 가설이 제대로 동작을 하지 못하는 것이다. 이 오차가 낮아지도록 가설 혹은 모델의 고도화가 필요하다. 즉, w,b의 값을 재수정하는 과정이 필요하다. 이것이 훈련의 과정이다.
만약 목적함수를 잘못 설정하게 되면, 과업에 대한 이해가 없는 신경망은 단순히 목적함수에 집중해 w,b 값을 찾으려고 할 것이다. 그렇기 때문에 목적함수를 과업에 적절하게 설정하는 것이 중요하다.
- 평균제곱오차 : 우리가 만든 가설에 의해서, 즉 직선에 의해서 만든 예측값을 만들고 그것들이 실제값과 얼마만큼 차이가 나는지 각각의 모든 데이터에 대해서 평균값을 만드는 것이다. 데이터 하나가 아니라 모든 훈련 집합의 데이터에 대해서 잘 맞추는 평균적인 성능이 필요하기 때문에 평균제곱오차를 써서 목적함수를 만든다.
[예제 1-1]
훈련집합
초기 직선의 매개변수 θ1 = (0.1, 4.0)^T라 가정
초기 임의의 값은 난수를 발생시키면 된다.θ1를 개선하여 θ2 = (0.8, 0.0)^T가 되었다고 가정
다음으로 θ2를 개선하여 θ3 = (0.5, 2.0)^T가 되었다고 가정
이때 𝐽 (θ3) = 0.0이 되어 θ3은 최적값 θ^이 됨
선형 회귀 문제와 매개변수 최적화 관계의 예
그렇다면 w,b를 구할 때 어떤 식으로 증가 또는 감소 시켜서 목적함수의 최소값을 가장 효율적으로 찾아낼 수 있을까?
어떤 주어진 조건에 대해 목적함수를 최대/최소화하는 문제를 Optimization 문제(Optimization Programming)이라고 부른다.
Convex Optimization vs Non-Convex Optimization
최적화 이론은 크게 1. Convex Optimization 과 2.Non-Convex Optimization 으로 나눌 수 있다.
회귀문제처럼 딱 보기에도 최적해가 하나인 경우에는 Convex로 Convex Optimizaion으로 해결이 된다. Convex 함수에 대한 경사 하강법은 하나의 최고의 해로 수렴하기 때문이다. 그러나 Non-Convex 함수에서는 그렇지 않다. 최적화가 존재하지 않을 수도 있다는 것이다. Non-Convex 함수는 무한히 넓은 함수 공간에서 여러곳의 지역 최저점을 갖는다. 어디가 전역 최적해인지 알수 없어 최적화를 하기 어렵다. 이를 보안하기 위해 AdaGrad, RMSprop 등 다양한 경사하강법이 연구되었다.- 경사하강법은 매우 일반적이고 단순한 알고리즘이지만 함수의 그래프가 단 한개의 오목한 점을 가질 때 (convex)만 잘 작동을 한다. 함수의 그래프에 오복한 부분이 많은 경우(non-convex) 초기화가 어떻게 되느냐에 따라 지역 최솟값에서 멈출 수 있다.
기계 학습이 할 일을 공식화하면,
→ 기계 학습은 작은 개선을 반복하여 최적의 해를 찾아가는 수치적 방법으로 위의 식을 품
알고리즘 형식으로 쓰면,
주어져 있는 손실 함수를 가장 작게 만드는 전달인자(argument) θ값을 찾아야한다. 성능적 지표가 좋아진다고 하는 것은 오차를 줄이는 것이다. 초기의 임의의 값에서부터 시작을 하더라도 θ값을 조금씩 바꾸면서 최적의 목적함수(𝐽)값을 수치적으로 찾는 것이 일반적인 기계학습이다.
θ값을 수정은 임의적으로 하는 것이 아니라 미분을 통해 이루어진다. 미분은 함수의 주어진 점에서의 접선의 기울기를 구하는 과정이다. 한 점에서 접선의 기울기를 알면 어느 방향으로 움직여야 함수값이 증가/감소하는지 알 수 있다.
미분값을 빼는 것을 경사하강법(gradient descent)라고 하며, 함수의 극소값 위치를 구할 때 사용한다.
1 | θ1에서 미분을 구한다.
2 | 구해진 기울기의 반대 방향(기울기가 +면 음의 방향, -면 양의 방향)으로 얼마간 이동시킨 θ2에서 미분을 구한다.
3 | 위에서 구한 미분 값이 0이 아니면(손실함수가 충분히 작아지는 경우가 아니면) 위 과정을 반복한다.
좀 더 현실적인 상황
- 지금까지는 데이터가 선형을 이루는 아주 단순한 상황을 고려함
- 실제 세계는 선형이 아니며 잡음이 섞임 → 비선형 모델이 필요
참고
'Artificial intelligence' 카테고리의 다른 글
[AI] 기계 학습 유형 (0) | 2021.09.10 |
---|---|
[AI] Convex Optimization (볼록 최적화) / Convex, Non-Convex (0) | 2021.09.08 |
[AI] 데이터에 대한 이해 / 데이터 생성 과정 / 데이터의 중요성 / 데이터베이스 크기와 기계 학습 성능 / 데이터 가시화 (0) | 2021.09.08 |
[AI] 인공지능과 특징공간 / 표현학습과 심층학습 (0) | 2021.09.07 |
[AI] 인공지능과 기계학습 (0) | 2021.09.07 |