[혼자 공부하는 머신러닝 + 딥러닝] 10강_확률적 경사 하강법 알아보기
10강_확률적 경사 하강법 알아보기
- 경사 하강법 알고리즘을 이해하고 대량의 데이터에서 분류 모델을 훈련하는 방법을 배움.
- <혼자 공부하는 머신러닝+딥러닝>의 코드 저장소
점진적인 학습
- 앞서 훈련한 모델을 버리지 않고 새로운 데이터에 대해서만 조금씩 더 훈련하는 방법 (온라인 학습)
- 대표적인 점진적 학습 알고리즘은 확률적 경사 하강법
확률적 경사 하강법
- 훈련 세트에서 랜덤하게 하나의 샘플을 고르는 것
- 가장 가파른 길을 찾아 내려오지만 조금씩 내려오는 것이 중요 (모델 훈련)
- 확률적
- 전체 샘플을 사용하지 않고 딱 하나의 샘플을 훈련 세트에서 랜덤하게 골라 가장 가파른 길을 찾음.
- 에포크
- 훈련 세트를 한 번 모두 사용하는 과정
- 미니배치 경사 하강법
- 여러 개의 샘플을 사용해 경사 하강법을 수행하는 방식
- 배치 경사 하강법
- 극단적으로 한 번 경사로를 따라 이동하기 위해 전체 샘플을 사용하는 것.
- 가장 안정적인 방법이나 컴퓨터 자원을 많이 사용함.
- 신경망 모델이 확률적 경사 하강법이나 미니배치 경사 하강법을 사용함.
손실함수
- 어떤 문제에서 머신러닝 알고리즘이 얼마나 엉터리인지를 측정하는 기준
- 손실함수와 비용함수
- 손실 함수는 샘플 하나에 대한 손실을 정의하고 비용 함수는 훈련 세트에 있는 모든 샘플에 대한 손실 함수의 합을 말함.
- 손실함수는 미분 가능해야함.
- 로지스틱 회귀 모델의 확률 출력
로지스틱 손실 함수 (이진 크로스엔트로피 손실 함수)
- 양성 클래스(타깃 = 1)일 때 손실은 -log(예측 확률)로 계산
- 확률이 1에서 멀어질수록 손실은 아주 큰 양수가 됨.
- 음성 클래스(타깃 = 0)일 때 손실은 -log(1-예측확률)로 계산
- 이 예측 확률이 0에서 멀어질수록 손실은 아주 큰 양수가 됨.
- 이진 분류는 로지스틱 손실 함수를 사용하고 다중 분류는 크로스엔트로피 손실 함수를 사용.
- 회귀는 어떤 손실함수를 사용하나? '평균 절댓값 오차' 또는 '평균 제곱 오차'
SGDClassifier
- 일정 에포크 동안 성능이 향상되지 않으면 더 훈련하지 않고 자동으로 멈춤.
- train_test_split()
- 훈련, 테스트 세트 나눔
- 특성 표준화 전처리
- 훈련 세트에서 학습한 통계 값으로 테스트 세트도 변환해야 함.
- SGDClassifier - sklearn.linear_model
- 사이킷런에서 확률적 경사 하강법을 제공하는 대표적인 분류용 클래스
- loss = 'log'
- 로지스틱 손실 함수 지정
- 기본값은 hinge : 힌지 손실은 서포트 벡터 머신(널리 사용하는 머신러닝 알고리즘 중 하나) 이라 불리는 또 다른 머신러닝 알고리즘을 위한 손실 함수.
- max_iter
- 수행 할 에포크 횟수 지정
- OvR(One versus Rest)
- 다중 분류일 경우 SGDClassifier 에 loss='log'로 지정하면 클래스마다 이진 분류 모델을 만듬.
- partial_fit()
- 모델을 이어서 훈련할때 사용하는 메서드
- 호출할 떄마다 1에포크씩 이어서 훈련할 수 있음.
- SGDClassifier는 여러 종류의 손실 함수를 loss 매개변수에 지정하여 다양한 머신러닝 알고리즘을 지원함.
에포크와 과대/과소적합
- 에포크 횟수가 적으면 모델이 훈련 세트를 덜 학습함 (과소적합)
- 에포크 횟수가 많으면 훈련 세트르르 완전히 학습할 것. (과대적합)
- 조기종료
- 과대적합이 시작하기 전에 훈련을 멈추는 것
- partial_fit()
- 훈련 세트에 있는 전체 클래스의 레이블을 전달해주어야 함
- np.unique()
- 목록만듬
점진적 학습을 위한 확률적 경사 하강법
- 실시간 학습을 위한 새로운 머신러닝 모델 -> 확률적 경사 하강법을 사용해 점진적으로 학습하는 로지스틱 회귀 모델을 훈련
- 확률적 경사 하강법은 훈련 세트에서 높은 점수를 얻는 모델을 만들 수 있지만 훈련을 반복할수록 어느 순간 과대적합되고 테스트 세트의 정확도가 줄어듬
- 대량의 데이터를 처리할수있는 좋은 학습 방법
키워드로 끝내는 핵심 포인트
- 확률적 경사 하강법
- 훈련 세트에서 샘플 하나씩 꺼내 손실 함수의 경사를 따라 최적의 모델을 찾는 알고리즘.
- 샘플을 하나씩 사용하지 않고 여러 개를 사용하면 미니배치 경사 하강법이 됨.
- 한 번에 전체 샘플을 사용하면 배치 경사 하강법
- 손실 함수
- 확률적 경사 하강법이 최적화할 대상.
- 대부분의 문제에 잘 맞는 손실 함수가 이미 정의되어있음.
- 이진 분류에는 로지스틱 회귀(또는 이진 크로스엔트로피) 손실 함수를 사용함.
- 다중 분류에는 크로스엔트로피 손실 함수를 사용함.
- 회귀 문제에는 평균 제곱 오차 손실 함수를 사용함
- 에포크
- 확률적 경사 하강법에서 전체 샘플을 모두 사용하는 한 번 반복을 의미함.
- 일반적으로 경사 하강법 알고리즘은 수십에서 수백 번의 에포크를 반복함.
핵심 패키지와 함수
- scikit-learn
- SGDClassifier
- 확률적 경사 하강법을 사용한 분류 모델을 만듬
- loss / penalty / max_iter / tol
- SGDRegressor
- 확률적 경사 하강법을 사용한 회귀 모델
확인 문제
- 다음 중 표준화 같은 데이터 전처리를 수행하지 않아도 되는 방식으로 구현된 클래스는 무엇인가요?
- LinearRegression
- 경사 하강법 알고리즘의 하나로 훈련 세트에서 몇 개의 샘플을 뽑아서 훈련하는 방식은 무엇인가요?
- 미니배치 경사 하강법
댓글
댓글 쓰기