[혼자 공부하는 머신러닝 + 딥러닝] 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
  • 경사 하강법 알고리즘의 하나로 훈련 세트에서 몇 개의 샘플을 뽑아서 훈련하는 방식은 무엇인가요?
    • 미니배치 경사 하강법



댓글

이 블로그의 인기 게시물

[혼자 공부하는 머신러닝 + 딥러닝] 17강_인공 신경망: 간단한 인공 신경망 모델 만들기

[솔트룩스] 새싹 인공지능 응용 SW 개발자 양성과정 | 24일차 | 5. 머신러닝 (2)