본문 바로가기

핸즈온 머신러닝

4.1~4.3

 

4. 모델 훈련

 

(1) 선형 회귀

- 닫힌 형태 방정식(closed form equation) 을 사용하여 훈련 세트에 대해 최적의(손실 함수를 최소화하는) 파라미터를 찾는 방법

- 경사 하강법 (Gradient descent)를 통해 모델 파라미터를 점진적으로 바꾸면서 Cost를 최소화하는 파라미터로 수렴하도록 하는 방식

 

(2) 다항 회귀 

- 비선형, 선형 회귀에 비해 오버피팅되기 쉬움

- 오버피팅 감지, 규제 기법 소개

 

(3) 분류 

- 로지스틱 회귀 / 소프트맥스 회귀

 

 

4.1 선형 회귀

- 일반적으로 입력 특성의 가중치 합과 편향을 더해 예측값을 결정함

- y^: 예측값

- n: 특성의 수

- x^i: i번째 특성값

-  θ^j : j 번째 모델의 파라미터

 

* 선형 회귀의 벡터 표현

- h^ θ(x) : 모델 파라미터 θ를 사용한 가설 함수

- x : 임의의 샘플의 특성 벡터 [x^0, x^1....., x^n]

- θ : 특성 가중치를 담은 모델의 파라미터 벡터 [ θ^0, ... , θ^n]

 

=> 모델이 훈련 데이터를 잘 표현하도록 위의 파라미터들을 설정하는 것을 '모델 훈련' 이라고 함

(EX: RMSE를 성능 측정 지표로 사용한다면 훈련 세트 X에 대해 이 RMSE 값을 최소화하는 θ 를 찾는 것)

4.1.1 정규 방정식

- 정규 방정식: 최적의  θ 값을 바로 얻을 수 있는 수학 공식

- θ^ : 비용 함수를 최소화하는 θ 값

- y : 타깃 벡터 [ y^1,... , y^n ]

 

* 예시

 

y = 4 +3x + 가우스 노이즈

: 정규방정식으로 구한 최적의 θ

=> 상당히 원본 파라미터 (4, 3) 에 가까운 결과 (4.21.. , 2.77...) 을 얻은 것을 확인할 수 있음 

=> 노이즈를 추가했기 때문에 오차 있을 수 있음

 

* 아래와 같이 간단하게 사이킷런에서 선형 회귀를 구현 가능

intercept: 편향 / coef_: 가중치 따로 저장

다음은 θ^ = X^+y를 계산하는 함수 . 

 

유사역행렬 X^+ : 특잇값 분해(SVD)라고 부르는 표준 행렬 분해 기법을 사용해 계산

- 훈련 셋 x를 3개의 행렬로 분할해 계산

- m <n (행보다 열의 수가 많은 경우)나 역행렬이 존재하지 않는 경우 같은 예외 처리 가능

=> 정규방정식보다 효율적

 

4.1.2 계산 복잡도

- 역행렬 계산의 계산 복잡도는 O(n^2.4) ~O(n^3)

- 정규방정식 계산 복잡도는 O(n^2) 

=> 파라미터 수 증가에 따라 계산 시간 제곱배로 증가

 

 

4.2 경사 하강법

- 비용 최소화하기 위해 반복적으로 파라미터를 조정해 나가는 방법

- θ를 랜덤 초기화함

- 조금씩 비용 함수가 감소하는 방향으로 θ 값 업데이트함 

= > 알고리즘이 최솟값에 수렴할 때까지 반복

 

- 하이퍼파라미터 학습률: 비용 함수 그래프 상에서 전역 최솟값을 찾기 위한 경사 하강법 학습 스텝의 크기

- 너무 작으면 수렴하기까지 오랜 시간 걸림

 

- 너무 크면 알고리즘이 일정 값으로 수렴하지 못하고 발산할 수 있음

=> 적절한 학습률 찾는 것이 중요

 

경사 하강법의 문제

1) 랜덤 초기화의 영향으로 전역 최솟값이 아닌 지역 최솟값으로 수렴할 수 있음

* MSE 비용 함수는 볼록 함수라 이와 같은 문제는 없음

 

2) 특성 스케일 문제 : 특성 스케일을 하지 않으면 왼쪽처럼 직선 경로가 아니라 오른쪽처럼 돌아가기 때문에 수렴하기 위해서 더 많은 시간이 걸림

 

4.2.1 배치 경사 하강법

 

편도함수: θ^j가 조금 변경되었을 때 비용 함수가 얼마나 바뀌는 지를 계산하는 것

=> MSE( θ) 를  θ^j로 미분한 값

* 각 파라미터 θ^j에 대한 편도합수 값

*  비용 함수의 그레이디언트 값 [ θ^0, ... θ^n ]

=> 모든 파라미터에 대한 편도함수 값

 

그레이디언트 벡터를 구하면 기존 파라미터에서 구한 그레이디언트 벡터에 학습률 eta를 곱한 값을 뺌

=> 해당 스텝에서 업데이트된 새 파라미터 값

 

- 경사 하강법을 코드로 구현

- 훈련 세트를 한 번 반복하는 것을 에포크라고 함

- 결과는 정규방정식과 동일

- 0.02, 0.1, 0.5 이렇게 총 3가지 학습률에 대해 20번의 반복으로 훈련한 결과를 시각화함

- 0.1의 학습률에서 훈련 결과가 적절하게 수렴한다는 것을 알 수 있음

- 0.5 에서는 발산함

- 0.02에서는 20번의 스텝만으로는 최적에 파라미터에 수렴할 수 없음

 

- 적절한 반복 수는 벡터 값의 변화가 어떤 값 (epsilon) 보다 작아지면 알고리즘을 중지하는 방법으로 결정

 

 

4.2.2 확률적 경사 하강법

- 매 스텝에서 랜덤 샘플 1개 선택해 그 샘플에 대해 그레이디언트 업데이트

- 처리하는 데이터 수 적어서 큰 훈련 데이터에서도 사용 가능

- 불안정함. 비용 함수가 계속 요동치며 최적의 파라미터 찾기는 어려움

- 그림과 같이 지역 최솟값에 수렴할 가능성이 낮다는 장점

- 전역 최솟값에 다다르도록 학습률을 점진적으로 감소시키는 기법 사용

- 담금질 기법과 유사하게 학습률 감소시킴

- 학습률을 결정짓는 것을 학습 스케줄이라고 부름

 

 

eta(학습률) 을 t0 / (t + t1) 이라는 식을 사용. 

이때 t = epoch * 전체 iteration 수 + 현재 iteration

=> 불규칙하지만, 1000번 반복한 배치 경사 하강법에 비해 50번만 반복하고도 비슷하게 좋은 결과에 도달

 

 

4.2.3 미니배치 경사 하강법

- 각 스텝에서 전체 훈련 세트가 아닌 미니배치 (작은 샘플)단위로 그레이디언트를 계산

- 행렬 연산에 최적화된 하드웨어 (GPU) 를 사용하여 성능 향상 가능

- SGD보다 덜 불규칙적, 단 지역 최솟값에서 벗어나기 어려울 수 있음

 

* 경사 하강법 경로 비교

- 배치 경사하강법이 최솟값에 정확히 도달

- 단, 나머지 2가지 방법도 학습률을 조정한다면 상대적으로 적은 비용에 최솟값에 근사할 수 있음

 

 

4.3 다항 회귀

- 각 특성의 거듭제곱을 새로운 특성으로 추가하는 것

- 2차방정식의 경우 다음과 같이 X의 제곱을 X-poly에 포함시킴

- LinearRegression을 적용한 결과

- 위와 같이 훈련 데이터를 비선형으로 표현할 수 있음

- PolynomialFeatures: 특성 간의 모든 교차항도 추가함

degree = d, features = n일 때 특성 수 : (n+d)! / d!n! = (d+n)Cn

 

 

 

 

 

 

 

'핸즈온 머신러닝' 카테고리의 다른 글

2.5 ~3.7  (0) 2025.03.24
1-4~2-4  (0) 2025.03.16