선형 회귀(Linear Regression)
선형 회귀는 머신러닝 알고리즘 중 가장 간단하면서도 딥러닝의 기초가 되는 개념이다
1차 함수로 이해하는 선형 회귀
$y=ax+b$
: 선형 회귀는 1차 함수로 표현 가능하다. 위와 같이 1차 함수의 기울기(slope)는 a이고, 절편(intercept)은 b이다
선형 회귀는 기울기와 절편을 찾는 것이 목표
고등과정에서 배운 1차 함수의 경우 x에 따른 y값을 찾는데 집중한 반면, 선형 회귀에서는 이와 반대로 x, y가 주어졌을 때 기울기 a와 절편 b를 찾는데 집중한다.
그래프를 통한 선형 회귀의 문제 해결 과정 이해
그래프에 찍힌 (x,y)좌표로 기울기와 절편을 추정하여 1차 함수를 추정해내는 것으로 선형 회귀로 만든 모델 또한 이런 모델을 통해 새로운 점에 대한 예측을 할 수 있음. 즉, 미리 준비한 입력(x: 3,4,5)과 타깃(y: 25,32,39)을 가지고 모델(y = 7x + 4)을 만든 다음 새 입력(x=6)에 대해 어떤 값을 예상한 것, 바로 이 과정이 선형 회귀 모델을 만들어 문제를 해결하는 과정이다
경사 하강법(Gradient descent)
경사하강법이란?
산점도 그래프를 잘 표현하는 직선의 방정식을 찾는 것이 회귀 알고리즘의 목표이다. 경사 하강법은 바로 그 방법 중 하나이다
경사 하강법(gradient descent) 이란, 모델이 데이터를 잘 표현할 수 있도록 기울기(변화율)를 사용하여 모델을 조금씩 조정하는 최적화 알고리즘이다. 이제 경사 하강법을 구현하기 위해 필요한 지식들을 알아보자.
경사하강법을 구현하기 위해 필요한 지식
예측값과 변화율
$ŷ = ωx + b$
딥러닝 분야에서는 기울기 a를 가중치를 의미하는 ω 혹은 계수를 의미하는 θ 로, y는 ŷ (y-hat) 로 표기한다. 여기서 가중치 ω와 절편 b는 알고리즘이 찾는 규칙을 의미하고, ŷ는 우리가 예측한 값을 의미한다.
*예측값이란? : 입력과 출력 데이터를 통해 규칙을 발견하면 모델을 만들었다고 하는데, 그 모델에 대해 새로운 입력값을 넣으면 어떤 출력 값이 나오게 된다. 이 값이 모델을 통해 예측한 값, 즉 예측값이다.
예측값으로 올바른 모델 찾기
앞 식에서 찾아야 할 것은 훈련 데이터(x,y)에 잘 맞는 ω, b이다. ω, b 를 찾기 위한 방법은 아래와 같다
훈련 데이터에 잘 맞는 ω, b를 찾는 방법
1. 무작위로 ω, b를 정한다(무작위로 모델 만들기)
2. x에서 샘플 하나를 선택하여 ŷ을 계산한다(무작위로 모델 예측하기)
3. ŷ과 선택한 샘플의 진짜 y를 비교한다(예측한 값과 진짜 정답 비교하기)
4. ŷ이 y와 더 가까워지도록 ω, b를 조정한다(모델 조정하기)
5. 모든 샘플을 처리할 때까지 다시 2~4항목을 반복한다
- 지금부터는 x,y에 대한 방정식이 아닌 ω, ŷ에 대한 방정식으로 이해해보자.
*선형 회귀의 목표 : y에 가까운 ŷ을 출력하는 모델(ω, b)을 찾아내는 것
- 따라서 지금부터는 ω와 b를 변화율로 업데이트 하는 방법을 알아보자
- $\hat y$이 y에 한참 미치치 못하는 값인 경우 ω, b를 더 큰 폭으로 수정할 수 없다
앞에서 변화율만큼 수정을 했지만 특별한 기준을 정하기가 어렵기 때문
- $\hat y$이 y보다 커지면 $\hat y$을 감소시키지 못한다
세 가지 종류의 경사하강법
1. 배치 경사 하강법 (Batch gradient descent)
경사 하강법이 구현되려면 파라미터 $\theta$ 가 바뀔 때마다 손실함수의 결과값이 얼마나 바뀌는지, *그래디언트 벡터(gradient vector)를 측정해야 한다. 이 그래디언트 벡터가 매우 작아져서 허용오차 범위 내로 들어올 경우 최소값에 거의 도달했다고 판단한다. 배치 경사 하강법의 가장 큰 특징은 매 스텝에서 모든 데이터의 편도 함수를 계산한다.
장점
- 매 스텝에서 모든 데이터를 계산하므로, 다른 하강법보다 엄밀하게 움직여 전역 최소값에 도달하기 쉽다
단점
- 매 스텝에서 모든 데이터의 편도 함수를 계산하므로 전체 훈련 세트가 커지면 계산 속도가 매우 느려진다
* gradient vector란? 파라미터 $\theta$ 에 대한 손실 함수의 편도 함수(partial derivative), 쉽게 말하면 현재 지점에서의 기울기이다. 경사가 높아질 경우 반대 방향으로 가야 할 것이고, 경사가 낮아지는 경우 계속 그 방향으로 가면 높이가 가장 낮은 지점에 도달할 수 있다. 즉 이 그래디언트 벡터가 아주 작아져서 허용오차 범위 내로 들어올 경우 미분계수가 0인 지점, 즉 최소값에 거의 도달했다고 판단한다
2. 확률적 경사 하강법(Stochastic gradient descent)
배치 경사 하강법과 정반대로, 확률적 경사 하강법은 매 스텝에서 무작위로 한 개의 데이터를 선택하고, 그 데이터 값에 대한 그래디언트 벡터만을 계산한다. 매 스텝에서 작은 데이터만 처리하기 때문에 배치 경사 하강법에 비해 계산 속도가 월등히 빠르고, 전체 훈련 세트의 크기가 커져도 비교적 빠른 시간내에 훈련시킬 수 있다. 또한 확률적(무작위적)으로 움직이기 때문에 배치 경사 하강법에 비해 지역 최소값을 피하는데 훨씬 유리하다. 하지만 전역 최소값이 있는 구간에 진입 후 배치 경사 하강법 처럼 엄밀하게 움직이지 않기 때문에 전역 최소값에 도달하기 어려운 단점을 가지고 있다. 이 문제점을 해결하기 위해 초반에는 학습률을 크게 설정해서 지역 최소값에 빠지지 않게 하고, 점진적으로 학습률을 줄여가면서 전역 최소값에 도달하게 하는 방법을 사용하기도 한다
장점
- 매 스텝에서 작은 데이터만 계산하므로, 배치 경사 하강법에 비해 계산 속도가 월등히 빠름
- 전체 훈련 세트의 크기가 커져도 큰 어려움 없이 계산할 수 있음
- 확률적(무작위)으로 움직이므로 배치 경사 하강법에 비해 지역 최소값을 피하는데 훨씬 유리함
단점
- 전역 최소값이 있는 구간에 진입 후 배치 경사 하강법 처럼 엄밀하게 움직이지 않기 때문에 전역 최소값에 도달하기 어려움
3. 미니배치 경사 하강법(Mini-batch gradient descent)
배치 경사 하강법과 확률적 경사 하강법의 장단점을 종합한 방법으로, 실제로 가장 많이 사용되는 방법이다. 전체 훈련 데이터 셋을 등분한 샘플 세트(미니배치)에 대해 그래디언트 벡터를 계산한다. 확률적 경사 하강법은 배치 사이즈가 1인것을 말하기 때문에 보통 미니배치 경사하강법과 확률적 경사하강법을 혼용해서 쓴다.
장점
- 배치 경사 하강법보다는 불규칙하고 확률적 경사하강법 보다는 안정적이기 때문에 시간이 덜 걸리면서도 확률적 경사 하강법보다 정확한 전역 최소값에 도달할 수 있다
단점
- 배치 경사 하강법보다는 지역 최소값에서 빠져나오기 힘들고 확률적 경사 하강법보다는 조금 더 시간이 오래 소요된다
즉, 세가지 방법 모두 장단점을 가지고 있기 때문에 유의해서 세 가지 방법 중 적절한 방법을 상황마다 고르면 된다
오차역전파(Backpropagation)
변화율로 단순히 가중치를 업데이트 할 경우 $\hat y$이 y보다 커질 경우 $\hat y$을 감소시키지 못하는 문제가 생긴다. 이를 해결하기 위해 ω, b를 더 능동적으로 업데이트하는 방법인 오차 역전파에 대해 알아보자
오차역전파란?
y에서 ŷ를 뺀 오차의 양을 변화율에 곱하는 방법으로 ω를 업데이트 하는 방법이다. 이 경우 ŷ이 y보다 많이 작은 경우 ω와 b를 많이 바꿀 수 있으며, 또 ŷ이 y를 지나칠 경우 ω, b의 방향도 바꾸어 줄 수 있다
손실 함수(Loss Function)와 경사 하강법의 관계
경사 하강법을 좀 더 기술적으로 표현하면 '어떤 손실 함수가 정의 되었을 때 손실 함수의 값의 최소가 되는 지점을 찾아가는 방법'이다
*여기서 손실함수란 예상한 값과 실제 타깃값의 차이를 함수로 정의한 것을 말한다
손실함수란?
데이터를 토대로 산출한 모델의 예측값과 실제 값과의 차이를 표현하는 지표로 모델의 성능의 '나쁨'을 나타내는 지표라고 볼 수 있다. 통계학적 모델은 일반적으로 회귀(Regression)과 분류(Classification) 두 가지 종류로 나눠지는데 손실 함수도 그에 따라 두 가지 종류로 나누어 진다
회귀 타입에 쓰이는 손실 함수
1. 평균 절대 오차 (MAE : Mean Absolute Error)
$MAE = \frac{1}{N}\sum_{i=1}^n |\hat y_i - y_i|$
MAE는 예측값과 정답값의 차이에 절댓값을 취하여 그 값들을 전부 더하고, 개수로 나누어 평균을 낸 값이다
장점
- 예측 결과와 정답 결과가 떨어진 정도의 절댓값을 평균 낸 것이므로, 전체 데이터의 학습된 정도를 쉽게 파악할 수 있다
단점
- 절댓값을 취하게 되므로 해당 예측이 어떤 식으로 오차가 발생했는지, 음수/양수를 판단 할 수 없는 단점이 있다
- 최적값에 가까워지더라도 이동거리가 일정하기 때문에 최적 값에 수렴하기 어렵다
2. 평균 제곱 오차 (MSE : Mean Squared Error)
$MSE = \frac{1}{N}\sum_{i=1}^n (\hat y_i - y_i)^2$
MSE는 가장 많이 쓰이는 손실 함수 중 하나이며, 예측값과 실제값 사이의 평균을 제곱하여 평균을 낸 값이다. 차이가 커질수록 제곱 연산으로 인해 값이 뚜렷해지며 제곱으로 인해 오차가 양수이든 음수이든 누적 값을 증가시킨다. 또한 실제 정답에 대한 정답률의 오차 뿐만 아니라 다른 오답들에 대한 정답률 오차 또한 포함시켜 계산하는 것이 특징이다
장점
- MAE와 달리 최적값에 가까워질 경우 이동거리가 다르게 변화하기 때문에 최적 값에 수렴하기 용이하다
단점
- 값을 제곱하므로 1 미만의 값은 더 작아지고, 그 이상의 값은 더 커진다, 즉, 값의 왜곡이 있을 수 있다
3. 평균 제곱근 오차 (RMSE : Root Mean Square Error)
$RMSE = \sqrt{\frac{1}{N}\sum_{i=1}^n (\hat y_i - y_i)^2}$
RMSE는 MSE에 루트를 씌운 지표로 장단점은 MSE와 유사하다. 하지만 제곱된 값에 루트를 씌우기 때문에 값을 제곱해서 생기는 왜곡은 줄어들며, 오차를 보다 직관적으로 보여줄 수 있다
분류에 쓰이는 손실 함수
Cross-entropy : 실제 분포 q를 모델링을 통하여 구한 분포인 p를 통하여 예측하는 것
$H_p(q) = - \sum_{c=1}^C q(y_c)log(p(y_c))$
실제 값과 예측 값이 맞는 경우에 0으로 수렴하고, 값이 틀릴 경우에는 값이 커짐
1. Binary cross-entropy
$BCE = - \frac{1}{N}\sum_{i=0}^N y_i * log(\hat y_i) + (1- \hat y_i) * log(1- \hat y_i)$
BCE는 이진분류에 사용되는 방식으로 예측 값이 0~1 사이의 확률 값으로 나오게 된다. 1에 가까우면 하나의 클래스(True or 양성)일 확률이 큰 것이고, 0에 가까우면 다른 하나의 클래스(False or 음성)일 확률이 큰 것이다
2. Categorical cross-entropy
$CCE = - \frac{1}{N}\sum_{i=0}^N \sum_{j=0}^J y_i * log(\hat y_j) + (1- y_j) * log(1- \hat y_j)$
CCE는 분류해야 할 클래스가 3개 이상인 멀티클래스 분류에 사용된다. 여러 클래스 중 가장 적절한 하나의 클래스를 분류하는 문제의 손실함수로 사용되기에 적합하다
'인공지능(AI) > 머신러닝(ML)' 카테고리의 다른 글
[핸즈온 머신러닝] 6장. 서포트 벡터 머신 (0) | 2021.12.05 |
---|---|
[핸즈온 머신러닝] 4장. 로지스틱 회귀(분류) (0) | 2021.12.03 |
[핸즈온 머신러닝] 3장. 다항 선형 회귀 (0) | 2021.12.01 |
[핸즈온 머신러닝] 2장. 단항 선형 회귀 (0) | 2021.11.18 |
[핸즈온 머신러닝] 1장. 머신러닝 소개 (0) | 2021.11.16 |