본문 바로가기
HRDI_AI/[AI특화] AI 기반 실시간 객체탐지 모델 구현

MLPClassifier

by Toddler_AD 2025. 12. 16.

 

 

1) 모델 구조 관련

hidden_layer_sizes=(100,)

  • 은닉층(숨겨진 층) 구조를 지정합니다.
  • 튜플의 각 원소가 “해당 은닉층의 뉴런 개수”입니다.
    • (100,) → 은닉층 1개, 뉴런 100개
    • (64, 32) → 은닉층 2개, 첫 층 64개, 둘째 층 32개
  • 일반적으로 층/뉴런을 늘리면 표현력은 좋아질 수 있지만, 과적합·학습시간 증가 가능성이 큽니다.

activation='relu'

  • 은닉층에서 사용하는 활성화 함수입니다.
  • 주요 옵션:
    • 'relu': 기본적으로 많이 쓰임. 빠르고 성능이 좋은 편.
    • 'tanh', 'logistic'(sigmoid): 과거에 많이 사용, 깊은 네트워크에서 기울기 소실 위험 증가
    • 'identity': 선형(사실상 은닉층 의미가 약해짐)
  • 참고: 출력층(분류 확률)은 내부적으로 이진/다중분류에 맞게 sigmoid/softmax에 해당하는 방식으로 처리됩니다(사용자가 activation으로 출력층을 바꾸는 구조는 아님).

2) 최적화(학습) 관련

solver='adam'

  • 가중치를 업데이트하는 최적화 알고리즘입니다.
  • 주요 옵션:
    • 'adam': 보통 가장 무난한 기본값(미니배치 기반, 학습 안정적)
    • 'sgd': 모멘텀 등 직접 튜닝해서 잘 맞추면 좋을 수 있으나 하이퍼파라미터 민감
    • 'lbfgs': 소규모 데이터에 빠르고 성능 좋을 수 있으나 대규모엔 비효율적

batch_size='auto'

  • 한 번의 파라미터 업데이트에 사용하는 미니배치 크기입니다.
  • 'auto'는 보통 min(200, n_samples) 같은 내부 규칙으로 정해집니다.
  • 배치가 너무 작으면 업데이트가 noisy(불안정)할 수 있고, 너무 크면 학습이 느리거나 일반화가 떨어질 수 있습니다.

learning_rate='constant'

  • 학습률 스케줄(시간에 따른 학습률 변화 방식).
  • 옵션:
    • 'constant': 학습 내내 고정
    • 'invscaling': 점점 감소 (learning_rate_init / t^power_t)
    • 'adaptive': 개선이 멈추면 줄임(plateau 기반)
  • solver='adam'에서도 이 값이 적용되지만, 보통은 크게 만지지 않아도 되는 경우가 많습니다.

learning_rate_init=0.001

  • 초기 학습률(기본값 0.001).
  • 너무 크면 발산/진동, 너무 작으면 학습이 느립니다.

power_t=0.5

  • learning_rate='invscaling'일 때만 의미가 있습니다.
  • 'constant'면 사실상 사용되지 않습니다.

3) 규제(과적합 방지) 관련

alpha=0.0001

  • L2 정규화(가중치 감쇠) 강도입니다.
  • 값이 커질수록 가중치를 더 작게 만들며 과적합을 줄일 수 있지만, 너무 크면 과소적합이 될 수 있습니다.

4) 학습 반복/수렴 조건

max_iter=200

  • 학습의 최대 반복 횟수(epochs 개념과 유사)입니다.
  • 충분히 수렴하지 않았는데 max_iter에 걸리면 성능이 덜 나올 수 있습니다.

tol=0.0001

  • “손실 개선이 tol보다 작으면” 수렴했다고 보고 종료할 수 있는 기준입니다.
  • n_iter_no_change와 함께 사용됩니다.

n_iter_no_change=10

  • 성능(손실/검증점수)이 연속 10번 의미 있게 개선되지 않으면 멈추도록 하는 파라미터입니다.
  • early_stopping이 False인 경우에도, 내부적으로 개선이 없으면 조기 종료에 관여할 수 있습니다(설정 조합에 따라).

shuffle=True

  • 각 epoch마다 학습 데이터를 섞습니다.
  • 미니배치 학습에서 보통 True가 일반적입니다.

random_state=None

  • 랜덤 시드입니다.
  • 재현 가능한 결과를 원하면 정수로 지정(예: random_state=42).
  • 가중치 초기화, 데이터 셔플, 검증 분할 등에 영향.

verbose=False

  • 학습 로그를 출력할지 여부입니다.
  • 디버깅/수렴 확인이 필요하면 True로 두고 학습 과정을 확인합니다.

5) 모멘텀/네스테로프 (주로 SGD에서 의미)

momentum=0.9

  • solver='sgd'일 때만 의미가 큽니다.
  • 관성(모멘텀)을 줘서 최적화가 더 빠르고 안정적으로 진행되도록 합니다.

nesterovs_momentum=True

  • solver='sgd' + momentum>0일 때 사용.
  • 네스테로프 모멘텀(lookahead) 적용 여부.

현재 설정은 solver='adam'이라서 momentum, nesterovs_momentum는 사실상 영향이 없습니다.


6) Early Stopping(검증 기반 조기 종료)

early_stopping=False

  • True면 학습 데이터를 내부적으로 train/validation으로 나눠서,
    검증 성능이 개선되지 않으면 조기 종료합니다.

validation_fraction=0.1

  • early_stopping=True일 때만 사용.
  • 학습 데이터의 10%를 검증용으로 떼어냅니다.

7) Adam 전용 파라미터 (solver='adam'일 때 의미)

beta_1=0.9, beta_2=0.999

  • Adam의 1차/2차 모멘트 추정에 쓰이는 지수이동평균 계수입니다.
  • 보통 기본값을 그대로 사용합니다.

epsilon=1e-08

  • 수치 안정성을 위한 작은 값(0으로 나누는 문제 방지).
  • 특수한 수치 문제 없으면 기본값 유지가 일반적입니다.

정리: 현재 코드 조합에서 “실제로 핵심으로 작동하는 것”

  • 구조/표현력: hidden_layer_sizes, activation
  • 학습: solver='adam', learning_rate_init, batch_size, max_iter
  • 과적합: alpha
  • 재현성/수렴: random_state, tol, n_iter_no_change, shuffle

반면,

  • momentum, nesterovs_momentum는 solver='adam'에서는 거의 의미가 없습니다.
  • validation_fraction은 early_stopping=False면 의미가 없습니다.
  • power_t도 learning_rate='constant'면 의미가 없습니다