Machine Learning & Deep Learning/핸즈온

핸즈온 ch.4 모델 훈련(선형회귀, 경사 하강법) - 미완

유방울 2023. 8. 29. 23:15

실제로 어떻게 작동하는지 모름

이를 알면 적절한 모델, 올바른 훈련 알고리즘, 작업에 맞는 좋은 하이퍼파라미터를 빠르게 찾을 수 있음

작동 원리를 이해하면 디버깅, 에러를 효율적으로 분석하는 데 도움이 됨

 

가장 간단한 모델인 선형 회귀

훈련 시키는 방법

way1 : 직접 계산할 수 있는 공식을 사용해 훈련 세트에 가장 잘 맞는 모델 파라미터 해석적으로 구함

way2 : 경사 하강법이라 불리는 반복적인 최적화 방식 사용해 모델 파라미터를 조금씩 바꾸면서 비용함수를 훈련 세트에 대해 최소화함

결국 동일한 파라미터로 수렴

ex) 배치 경사 하강법, 미니배치 경사 하강법, 확률적 경사 하강법(SGD; stochastic)

 

그 다음 다항회귀, 학습 곡선, 과대적합 감소시키는 규제 기법 알아보기

 

4.1 선형 회귀

 

y 헷

η : 에타 아홉번째 그리스 문자 8를 의미

학습률

θ : 세타 여덟번째 그리스 문자 9를 의미

파라미터

 

 

4.1.1 정규방정식

비용함수를 최소화하는 θ값을 찾기 위한 해석적인 방법이 있음

이를 정규방정식이라고 함

normal equation

유사역행렬

이는 특잇값 분해 SVD(Singular value decomposition)라 부르는 표준 행렬 분해 기법을 사용해 계산

역행이이 없다면 정규방정식이 작동하지 않음 

but 유사역행렬은 항상 구할 수 있음

 

4.1.2 계산 복잡도

 4.2 경사 하강법

일반적인 최적화 알고리즘

비용 함수를 최소화 -> 반복해서 파라미터 조정

짙은 안개 때문에 산속에서 길을 잃었으면 발밑 지면의 기울기만 느낄 수 있다

가장 가파른 길을 따라 아래로 내려가는 것!

파라미터 벡터 세타에 대해 비용 함수의 현재 그레이디언트를 계산함

-> 그레이디언트가 감소하는 방향으로 진행함

0이 되면 최솟값에 도달함!

 

세타를 임의의 값으로 시작(무작위 초기화, random initialization)

한 번에 조금씩 비용함수가 감소되는 방향 -> 알고리즘이 최솟값에 수렴할 때까지 점신적으로 향상!!

경사 하강법에서 중요한 파라미터는 스텝의 크기

-> 학습률 하이퍼파라미터로 결정됨

학습률이 너무 작으면, 스텝의 크기가 너무 작으면

그레디언트 0으로 수렴하기 위해 반복을 많이 진행해야 함 -> 시간이 오래 걸림

학습률이 너무 그면 -> 큰 값으로 발산해버림

 

경사하강법 problem

1. 왼쪽에서 시작하면

global minimum보다 덜 좋은 local minimum 수렴

2. 오른쪽에서 시작

평탄한 지역을 지나기 위해 시간이 오래 걸리고, 일찍 멈추게 되어 global minimum 도달 못함

 

왼쪽 : 스케일 적용 - 최솟값으로 곧장 진행

오른쪽 : 스케일 적용 안 함 - local minimum 방향에 거의 직각으로 향하다가 평면으로 골짜기를 길게 돌아가다가 최솟값 도달 -> 시간 오래 걸림

=> desent gradient 사용시 반드시 모든 특성이 같은 스케일을 갖도록 만들어야 함

그렇지 않으면 수렴하는 데 훨씬 오래 시간이 걸림

 

이처럼 훈련세트에서 비용 함수를 최소화하는 모델 파라미터의 조합을 찾는 것을

-> 파라미터 스패이스에서 찾는다고 함

모델이 가진 파라미터가 많을수록 -> 이 공간은 커지고 검색이 더 어려워짐

4.2.1 배치 경사 하강법

세타j에 대 비용 함수의 그레이디언트를 계산해야 함

즉, 세타j가 조금 변경될 때 비용 함수가 얼마나 바뀌는지 계산!

편도함수 partial derivative

이는 동쪽을 바라봤을 때 발밑에 느껴지는 산의 기울기는 얼마인가?와 같은 질문임

 

이는 batch gradient descent

-> 매 스텝에서 훈련 데이터 전체를 사용함

-> 매우 큰 훈련 세트에서 아주 느림!

위로 향하는 그레이디언트 벡터가 구해지면 -> 반대 방향인 아래로 가야함 

즉, 세타에서 편도미분을 빼야한다는 의미

아래로 가는 스텝의 크기를 결정하기 위해 그레이디언트 벡터랑 학습률을 곱함

왼쪽 : 학습률 너무 낮음, 최적점에 도달하겠지만 시간이 오래 걸림

가운데 : 적당함

오른쪽 : 학습률 너무 높음, 알고리즘 널뛰면서 스텝마다 최적점에서 점점 멀어져서 발산

 

적절한 학습률을 찾으려면 그리드 탐색을 사용함!

BUT 수렴하는 데 너무 오래 걸리는 모델을 막기 위해 반복 횟수 제한해야 함

-> 반복 횟수를 아주 크게 지정하고 그레디언트 벡터가 아주 작아지면, 허용오차 tolerance보다 작아지면 경사 하강법이 최솟값에 도달함 -> 알고리즘 중지!