4장은 앞 장에서 블랙박스처럼 취급되었던 머신러닝 모델과 훈련 알고리즘에 대한 내용이다.
이 장에서 언급하는 대부분의 주제는 신경망을 이해하고 구축하고 훈련시키는데 필수이다.
4.1 선형 회귀
우선, 가장 간단한 모델 중 하나인 선형 회귀 모델을 훈련시키는 두 가지 방법을 소개하고 있다.
- 직접 계산할 수 있는 공식을 사용하여 훈련 세트에 가장 잘 맞는 모델 파라미터를 해석적으로 구함
- 경사 하강법이라 불리는 반복적인 최적화 방식을 사용하여 모델 파라미터를 조금씩 바꾸면서 비용 함수를 훈련 세트에 최소화 시키는 방법(위 방법과 동일한 파라미터로 수렴)
4.2 경사 하강법
- 여러 종류의 문제에서 최적 해법을 찾을 수 있는 일반적인 최적화 알고리즘
- 비용 함수를 최소화하기 위해 반복해서 파라미터 조정해감
* 산속에서 길을 잃어 지면의 기울기만 느낄 수 있을 때,
빨리 골짜기로 내려가는 좋은 방법은 가장 가파른 길을 따라 아래로 내려가는 것
경사 하강법의 원리와 같음
파라미터 벡터 θ에 대해 비용 함수의 현재 그래디언트를 계산, 그래디언트가 감소하는 방향으로 진행
-> 그래디언트가 0이 되면 최솟값에 도달한 것
θ를 임의의 값으로 시작해서(무작위 초기화)
한 번에 조금씩 비용함수(ex. MSE)가 감소되는 방향으로 진행하여
알고리즘이 최솟값에 수렴할 때까지 점진적으로 향상
경사 하강법에서 가장 중요한 파라미터는 step의 크기로,
learning rate(학습률) 하이퍼파라미터로 결정됨
- learning rate(학습률)가 너무 작으면 알고리즘이 수렴하기 위해 반복을 많이 진행해 오래 걸림
- learning rate가 너무 크면 골짜기를 가로질러 반대편으로 건너뛰게 되어 이전보다 더 높은 곳으로 올라가게 될 수 있음, 알고리즘을 더 큰 값으로 발산하게 만들어 적절한 해법을 찾지 못함
모든 비용 함수가 매끈하지 않기 때문에 최솟값으로 수렴하기 매우 어려운 경우가 있을 수 있음
- 무작위 초기화 때문에 알고리즘이 왼쪽에서 시작하면
전역 최솟값보다 덜 좋은 지역 최솟값에 수렴
- 오른쪽에서 시작하면 평탄한 지역을 지나기 위해 시간이 오래걸리고 일찍 멈추게 되어
전역 최솟값에 도달하지 못함
선형 회귀를 위한 MSE 비용 함수는 곡선에서 어떤 두 점을 선택해 선을 그어도
곡선을 가로지르지 않은 볼록 함수
-> 지역 최솟값이 없고 하나의 전역 최솟값만 있음
-> 연속된 함수이고 기울기가 갑자기 변하지 X
=> 따라서 경사하강법이 전역 최솟값에 가깝게 접근할 수 있음을 보장
(학습률이 너무 높지않고 충분한 시간이 주어지면)
경사 하강법을 사용할 때는 반드시 모든 특성이 같은 스케일을 갖도록 만들어야 함
- 그렇지 않으면 수렴하는데 훨씬 오래 걸림
아래 그림은
- 왼쪽 : 특성 1과 특성 2의 스케일이 같은 훈련 세트
- 오른쪽 : 특성 1이 특성 2보다 더 작은 훈련 세트 대한 경사 하강법
- 왼쪽의 경사 하강법 알고리즘이 최솟값으로 곧장 진행하고 있어 빠르게 도달
- 오른쪽은 전역 최솟값의 방향에 직각으로 향하다가 돌아가 나감
=> 모델 훈련이 비용 함수를 최소화하는 모델 파라미터의 조합을 찾는 일임
- 이를 모델의 파라미터 공간에서 찾는다고 말함
(모델 파라미터가 많을 수록 이 공간의 차원이 더 커지고 검색이 어려워짐)
4.2.1 배치 경사 하강법
경사 하강법 구현시 각 모델 파라미터 θj에 대해 비용 함수의 그레디언트를 계산해야함
(θj가 조금 변경될 때, 비용 함수가 얼마나 바뀌는지)
이를 편도함수라고 함.
다음 식을 통해 비용 함수의 편도함수를 모두 담아 한꺼번에 계산할 수 있다.
위 공식은 매 경사 하강법 스텝에서 전체 훈련 세트 X에 대해 계산
즉, 매 스텝에서 훈련 데이터 전체를 사용
=> 이 알고리즘을 배치 경사 하강법 이라고 함
- 매우 큰 훈련 세트에서는 느리지만
- 경사 하강법은 특성 수에 민감하지 않아 수만개의 특성에서는 빠름
배치 경사 하강법을 다시 정리하자면,
전체 학습 데이터를 하나의 배치로(배치 크기가 n) 묶어 학습시키는 경사 하강법이다.
전체 데이터에 대한 모델의 오차의 평균을 구한 후,
이를 이용해 미분을 통해 경사를 산출, 최적화를 진행한다.
배치 경사 하강법의 특징은
- 전체 데이터를 통해 학습시키기 때문에, 가장 업데이트 횟수가 적음
(1epoch 당 1회 업데이트)
- 한 스텝에 모든 데이터를 사용하기 때문에 학습이 오래 걸림
- 전체 데이터를 모두 한 번에 처리하기 때문에, 메모리가 많이 필요함
- 항상 같은 데이터(전체 데이터)에 대해 경사를 구하기 때문에, 수렴이 안정적임
(수렴이 안정적인 것은 장점이자 단점이다. 지역 최적화에 빠질 수 있다.)
※ 적절한 학습률?
학습률이 너무 낮으면 시간이 오래 걸리고, 너무 높으면 스템마다 최적점에서 멀어져 발산할 수 있다.
적절한 학습률을 찾으려면 그리드 탐색을 이용하면 되는데,
수렴하는 데 너무 오래 걸리는 모델을 막기 위해 반복 횟수를 제한해야함
반복 횟수는 너무 작으면 최적점에 도달하기 전에 알고리즘이 멈추고,
너무 크면 모델 파라미터가 더는 변하지 않는 채로 시간이 낭비된다.
=> 반복 횟수를 아주 크게 지정하고, 그래디언트 벡터가 아주 작아지면
(벡터의 노름이 어떤 값(허용오차)보다 작아지면)
경사 하강법이 거의 최솟값에 도달한 것이므로 알고리즘을 중지하게끔 한다.
4.2.2 확률적 경사 하강법
확률적 경사 하강법은 배치 경사 하강법과 반대로
매 스텝에서 한 개의 샘플을 무작위로 선택하고, 그 하나의 샘플에 대한 그래디언트를 계산
- 매 반복에서 다뤄야 할 데이터가 매우 적어 훨씬 빠름
- 매 반복에서 하나의 샘플만 메모리에 있으면 되므로 매우 큰 훈련 세트도 훈련 가능
- 확률적(무작위)이기 때문에 배치 경사 하강법보다 불안정
비용 함수가 최솟값에 다다를 때까지 위아래로 요동치면서 평균적으로 감소
-> 시간이 지나면 최솟값에 근접하지만, 요동이 지속되면서 최솟값에 안착하진 못함
즉, 최적치는 아님
- 비용 함수가 매우 불규칙할 경우 알고리즘이 지역 최솟값을 건너뛰도록 도와주므로
배치 경사 하강법보다 전역 최솟값을 찾을 가능성이 높음
즉, 무작위 성은 지역 최솟값에서 탈출시켜주지만, 전역 최솟값에 다다르지 못하게 한다는 단점이 있음
이를 해결하는 방법은 학습률을 점진적으로 감소시키는 것.
-> 시작할 때는 학습률을 크게 하여 지역 최솟값에 빠지지 않게 하고,
점차 작게 줄여 전역 최솟값에 도달하게 한다.
이 때, 매 반복에서 학습률을 결정하는 함수를 학습 스케줄이라고 함
4.2.3 미니배치 경사 하강법
각 스텝에서 전체 훈련 세트나 하나의 샘플을 기반으로 그래디언트를 계산하지 않고,
미니배치라 부르는 임의의 작은 샘플 세트에 대해 그래디언트를 계산
- 행렬 연산에 최적화된 하드웨어, GPU를 사용해 성능 향상
- 미니배치를 어느 정도 크게 하면, 이 알고리즘은 파라미터 공간에서 SGD보다 덜 불규칙하게 움직임
(SGD보다 최솟값에 더 가까이 도달하게 될 것)
- BGD보다 계산량이 적음(batch size에 따라 계산량 조절 가능)
- 지역 최솟값에서 빠져나오기 힘들 수 있음
※ 예를 들어, 전체 데이터가 1000개인 데이터를 학습시킬 때,
batch_size가 100이라면, 전체를 100개씩 총 10묶음의 배치로 나누어
1epoch 당 10번의 경사하강법을 진행
※ batch size는 학습데이터 갯수에 나누어 떨어지게 지정한다.
만약 마지막 남은 배치가 다른 사이즈이면, 해당 배치의 데이터가 학습에 더 큰 비중을 갖게 된다.
예를 들어, 950개 데이터를 100 batch size로 학습한다면,
각 배치의 속 데이터는 1/100 만큼의 영향력을 갖지만,
마지막 배치는 1/50 만큼의 영향력을 가지므로, 과평가되는 경향이 있다.
만약 이러한 경우, 마지막 배치를 버리는 방법을 사용한다.
※ SGD를 최근에는 대부분 이 방법을 의미한다.
4.3 다항 회귀
- 비선형 데이터를 학습하는 데 선형 모델을 사용
- 각 특성의 거듭제곱을 새로운 특성으로 추가하고, 이 확장된 특성을 포함한
데이터셋에 선형 모델을 훈련시키는 방법
4.4 학습 곡선
-얼마나 복잡한 모델을 사용할지,
모델이 데이터에 과대적합 또는 과소적합 되었는지 등
모델의 일반화 성능을 추정하기 위함
- 2장에서는 모델의 일반화 성능을 추정하기 위해 교차 검증 사용
-훈련 데이터에서 성능이 좋지만 교차 검증 점수가 나쁘다면 모델이 과대적합된 것
-반면 양쪽 모두 좋지 않으면 과소적합된 것
- 또 다른 방법이 학습 곡선
- 이 그래프는 훈련 세트와 검증 세트의 모델 성능을 훈련 세트 크기의 함수로 나타냄
- 이를 위해 단순히 훈련세트에서 크기가 다른 서브 세트를 만들어 모델을 여러 번 훈련시킴
* 단순 선형회귀 모델(직선)의 학습 곡선
- 훈련 세트에 샘플이 추가됨에 따라 잡음도 있고 비선형이므로 모델이
훈련 데이터를 완벽히 학습하는 것은 불가능=> 오차가 어느정도 계속 상승
- 검증 데이터에 대한 성능은, 모델이 훈련 샘플이 추가됨에 따라
학습이 되기 때문에 검증 오차가 서서히 감소
- 하지만 선형 회귀의 직선은 데이터를 잘 모델링할 수 없으므로 오차의 감소가 완만해짐
=> 두 곡선이 수평한 구간을 만들고 꽤 높은 오차에서 매우 가까이 근접
=> 전형적인 과소적합 모델의 모습
* 10차 다항 회귀 모델의 학습 곡선
- 훈련 데이터의 오차가 선형 회귀 모델보다 훨씬 낮음
- 두 곡선 사이에 공간이 있음
=> 훈련 데이터에서의 모델 성능이 검증 데이터에서보다 훨씬 낫다는 뜻
=> 과대 적합 모델의 특징
(더 큰 훈련 세트 사용시 두 곡선이 점점 가까워짐)
※ 편향/분산 트레이드오프
편향
- 잘못된 가정으로 인한 것
- 데이터가 실제로는 2차인데 선형으로 가정하는 경우
- 편향이 큰 모델은 훈련 데이터에 과소적합되기 쉬움
분산
- 훈련 데이터에 있는 작은 변동에 과도하게 민감하기 때문에 나타냄
- 자유도가 높은 모델(ex. 고차 다항 회귀 모델)은 높은 분산을 가지기 쉬워
훈련 데이터에 과대적합되는 경향이 있음
줄일 수 없는 오차
- 데이터 자체에 있는 잡음 때문에 발생
- 이 오차를 줄이려면 데이터에서 잡음을 제거하는 것
모델의 복잡도가 커지면 통상적으로 분산↑ 편향은↓
반대로 모델의 복잡도가 줄어들면 분산↓ 편향↑
4.5 규제가 있는 선형 모델
과대적합을 감소시키는 좋은 방법은 모델을 규제하는 것 (모델 제한)
- 자유도를 줄이면 데이터에 과대적합되기 어려움
- 다항 회귀 모델을 규제하는 간단한 방법은 다항식의 차수를 감소시킴
선형 회귀 모델에서는 모델의 가중치를 제한함으로써 규제를 가함
-> 가중치를 제한하는 방법 릿지 회귀, 라쏘 회귀, 엘라스틱넷
4.5.1 릿지 회귀 Ridge Regression
릿지 회귀(또는 티호노프 규제)는 규제가 추가된 선형 회귀 버전
- 선형 회귀 모델에 L2 규제가 추가된 모델
- 학습 알고리즘을 데이터에 맞출 뿐 아니라 모델의 가중치가 가능한 한 작게 유지되도록함
- 규제항은 훈련하는 동안에만 비용 함수에 추가됨
- 모델 훈련이 끝나면 모델의 성능을 규제가 없는 성능 지표로 평가
* 릿지 회귀의 비용함수
- 하이퍼파라미터 α는 모델을 얼마나 많이 규제할지 조절
α=0이면 릿지 회귀는 선형 회귀와 같아짐
α가 아주 크면 모든 가중치가 거의 0에 가까워지고 결국 데이터의
평균을 지나는 수평선이 됨
(α가 무한대면 비용 함수식이 매우 커지게 되고, 회귀 계수 theta값을
0으로 만들어야 cost가 최소화되는 비용 함수 목표를 달성할 수 있기 때문)
- α를 증가시킬수록 직선에 가까워짐
즉, 모델의 분산은 줄지만 편향은 커짐
- 릿지 회귀는 입력 특성의 스케일에 민감하므로, 수행 전 데이터의 스케일을
맞춰주는 작업이 중요
(이는 규제가 있는 모델들에 대해서 일반적으로 진행해주는 작업)
- 릿지 회귀를 계산하기 위해 정규방정식 또는 경사 하강법을 사용할 수 있음
4.5.2 라쏘 회귀 Lasso Regression
선형 회귀 모델에 L1규제가 추가된 모델
- L2 노름의 제곱을 2로 나눈 것 대신 가중치 벡터의 L1 노름 사용
라쏘 회귀는 덜 중요한 특성의 가중치를 제거하려고 함(가중치가 0이 됨)
- 오른쪽 그래프에서 초록색 점선은 2차방정식처럼 보이며 거의 선형적임
즉, 차수가 높은 다항 특성의 가중치가 모두 0이 됨
- 라쏘 회귀는 자동으로 특성 선택을 하고 희소 모델을 만듬(0이 아닌 특성의 가중치가 적음)
※라쏘 회귀 vs 릿지 회귀
라쏘의 페널티를 보면
여기서 의미있는 gradient는 하나의 파라미터만 두고
나머지 파라미터를 버리는 경향을 보임
- 규제를 가하면 등고선이 변형됨
리쏘의 경우 같이 가져가려는 원형 등고선의 형태를 보임
4.5.3 엘라스틱넷
릿지 회귀와 라쏘 회귀를 절충한 모델
- L2 규제와 L1 규제를 결합한 회귀 모델
- 규제항은 릿지와 라쏘의 규제항을 단순하 더해서 사용하며,
혼합 정도는 혼합 비율 r을 사용해서 조절
※ 선형 회귀(규제가 없는 모델), 릿지, 라쏘, 엘라스틱넷을 언제 사용해야 할까?
- 규제가 약간 있는 것이 대부분 좋으므로 평범한 선형 회귀는 피해야 함
- 릿지가 기본이 되지만 쓰이는 특성이 몇 개뿐이라고 의심되면 라쏘나 엘라스틱넷이 나음
(불필요한 특성의 가중치를 0으로 만들기 때문)
- 특성 수가 훈련 샘플 수보다 많거나 특성 몇개가 강하게 연관되어 있으면
라쏘가 문제를 일으키므로 엘라스틱넷을 선호
4.5.4 조기 종료
경사 하강법과 같은 반복적인 학습 알고리즘을 규제하는 다른 방식은
검증 에러가 최솟값에 도달하면 훈련을 중지시키는 것
epoch이 진행됨에 따라 알고리즘이 점차 학습되어
훈련 세트에 대한 예측 에러와 검증 세트에 대한 예측에러가 줄어듬
- 그러나 감소하던 검증 에러가 멈추었다가 다시 상승되는데,
이는 모델이 훈련 데이터에 과대적합되기 시작함을 의미
=> 조기 종료는 검증에러가 최소에 도달하는 즉시 훈련을 멈춤
- 매우 효과적이며 간단함
4.6 로지스틱 회귀
샘플이 특정 클래스에 속할 확률을 추정하는데 사용
즉, 타겟 변수가 범주형인 경우 사용하는 모델
ex) 이 이메일이 스팸일 확률은 얼마인가?
- 추정 확률이 50%가 넘으면 모델은 그 샘플이 해당 클래스에 속한다고 예측(레이블이 1인 양성 클래스),
아니면 클래스에 속하지 않는다고 예측(레이블이 0인 음성 클래스)
- 이를 이진 분류기라고 함
4.6.1 확률 추정
선형 회귀 모델과 같이 로지스틱 회귀 모델은 입력 특성의 가중치 합을 계산
(그리고 편향을 더함)
대신, 선형 회귀처럼 바로 결과를 출력하지 않고 결과값의 로지스틱을 출력함
로지스틱은 0과 1 사이의 값을 출력하는 시그모이드 함수(로지스틱 함수)
- p hat = 샘플 x가 양성 클래스에 속할 확률
4.6.2 훈련과 비용 함수
로지스틱 회귀 모델 훈련의 목적은
양성 샘플(y=1)에 대해서는 높은 확률을 추정하고
음성 샘플(y=0)에 대해서는 낮은 확률을 추정하는 모델의 파라미터 벡터 θ를 찾는 것
- t가 0에 가까워지면 -log(t)가 매우 커지고,
1에 가까우면 -log(t)는 0에 가까워지므로 타당한 비용 함수
- 모델이 양성 샘플을 0에 가까운 확률로 추정하거나
음성 샘플을 1에 가까운 확률로 추정하면 비용이 증가함
- 반대로, 기대한 대로 음성 샘플의 확률을 0에 가깝게 추정하거나
양성 샘플의 확률을 1에 가깝게 추정하면 비용은 0에 가까워짐
- 전체 훈련 세트에 대한 비용 함수는 모든 훈련 샘플의 비용을 평균한 것
-> 이를 로그 손실이라고 부름
- 이 비용 함수의 최솟값을 계산하는 알려진 해는 없음(정규방정식 같은 것이 없음)
- 대신 이 비용함수는 볼록 함수이므로 경사하강법이 전역 최솟값을 찾는 것을 보장함
(학습률이 너무 크지 않고 충분히 기다린다면)
4.6.3 결정 경계
양쪽의 확률이 똑같이 50%가 되는 1.6cm 근방에서 결정 경계가 만들어짐
※ 로지스틱 회귀 모델도 다른 선형 모델처럼 L1, L2 페널티를 사용해 규제할 수 있다
사이킷런은 L2 패널티를 기본으로 함
4.6.4 소프트맥스 회귀
로지스틱 회귀 모델은 여러 개의 이진 분류기를 훈련시켜 연결하지 않고
직접 다중 클래스를 지원하도록 일반화 될 수 있음
-> 이를 소프트맥스 회귀 또는 다항 로지스틱 회귀라고 함
샘플 x가 주어지면 먼저 소프트맥스 회귀 모델이 각 클래스 k에 대한 점수를 계산하고,
그 점수에 소프트맥스 함수(또는 정규화된 지수 함수)를 적용하여 각 클래스의 확률을 추정
각 클래스는 자신만의 파라미터 벡터 θ(k)가 있음
- 이 벡터들은 파라미터 행렬 θ에 행으로 저장됨
- 샘플 x에 대해 각 클래스 점수가 계산되면, 소프트맥스 함수를 통과시켜
클래스 k에 속할 확률을 추정할 수 있음
- 이 함수는 각 점수에 지수 함수를 적용한 후 정규화함
(모든 지수 함수 결과의 합으로 나눔)
- 로지스틱 회귀 분류기와 마찬가지로 추정 확률이 가장 높은 클래스를 선택
(가장 높은 점수를 가진 클래스 선택)
모델이 타깃 클래스에 대해서 높은 확률을 추정하도록 만드는 것이 목적
- 크로스 엔트로피 비용 함수를 최소화해서, 타깃 클래스에 대해 낮은 확률을 예측하는 모델을
억제시켜야함
- 크로스 엔트로피는 추정된 클래스의 확률이 타깃 클래스에 얼마나 잘 맞는지 측정하는 용도로 사용
- 딱 두개의 클래스가 있을 때(K=2) 이 비용 함수는 로지스틱 회귀의 비용 함수와 같음
'AI > Hands-on ML' 카테고리의 다른 글
[핸즈온 머신러닝] 핸즈온 머신러닝2 정오표 (0) | 2021.01.22 |
---|---|
[핸즈온 머신러닝] 7장 - 앙상블 학습과 랜덤 포레스트 (0) | 2021.01.19 |
[핸즈온 머신러닝] 6장 - 결정 트리 (0) | 2021.01.03 |
[핸즈온 머신러닝] 5장 - 서포트 벡터 머신 (0) | 2021.01.03 |
[핸즈온 머신러닝] 3장 - Classification (0) | 2020.11.23 |