< 앙상블(Stacking) >
- 정의 : 여러 개별 모델(Base Model)의 예측값을 최종모델(Meta Model)의 학습데이터로 사용하여 새로운 예측을 수행하는 방법
- 특징
- 이종 모델을 결합한다(여러 개별 모델).
- 최종 모델이 존재한다.
- 핵심 아이디어 : 모델 결합 방식을 '학습' 하는 것. (기본 모델들의 예측값을 입력받아 최적의 조합을 '학습'하여 최종 예측 생성) -> 어떤 모델이 성능이 좋은지 학습을 통해 판단하고 각 개별 모델의 예측값에 가중치(우선순위)를 부여하여 최종 예측을 완성함.
▶ (상식) 전이 학습(Transfer Learning) : 한 영역에서 학습한 지식과 경험을 다른 유사한 영역의 문제를 해결하는데 재사용하는
학습 기법임.
=> 방대한 데이터로 이미 학습된 거대 모델(Pre-trained Model)의 '기반지식'을 가져와서, 내가 해결하고자 하는 특정 문제
(데이터)에 적용함.
▶ (상식) 미세조정(Find tuning) : 이미 방대한 데이터로 사전 학습된 기본 모델의 가중치를 특정 작업이나 데이터셋에 맞게 추가로
학습시켜 업데이트 하는 기법임.
=> 전이 학습이라는 개념을 바탕으로, 실제 모델을 가공할 때는 미세조정 방식을 사용한다고 이해하자!!
★ 하이퍼 파라미터 비교!!
동종 모델 : n_estimators=100 vs 이종 모델 : base_models=[('rf',~~, 'gb', ~~, 'lgbm', ~~]
- 피처와 타겟의 상관관계가 있어야 모델 성능도 나온다 >> 상관관계(히트맵)가 안 좋으면 데이터셋을 폐기하거나 새로운 데이터셋을 수집해야함.
< 하이퍼 파라미터 최적화 >
- HPO, HyperParameter Optimization
- 하이퍼 파라미터 튜닝의 필요성
- 최적의 하이퍼 파라미터 조합을 통한 모델 성능 극대화
- 과적합 및 과소적합 방지
- 모델의 일반화(Generalization) 성능 향상의 필수적
- 가장 단순한 접근 : 수동 탐색(Manual Search)
- 파라미터 개수가 증가하면 사실상 사용 불가능..
- 체계적인 탐색 : 그리드 서치(Grid Search) ~ n차원의 조합(하이퍼 파라미터 개수 : n개)
※ 여기서 차원이라는 용어에 대해 이해하자!
- 흑백 이미지 (2차원: 높이, 너비) : 바둑판 표 위에 픽셀마타 밝기 숫자 1개만 적혀 있는 격자판
- 컬러 이미지 (3차원: 높이, 너비, 채널) : 똑같은 모양의 바툭판 표 3장(Red, Green, Blue)을 겹쳐 놓은 3차원 입체 구조
▶ 여러 장의 이미지의 경우,
- 흑백 이미지 묶음 : 3차원(높이, 너비, 이미지 개수)
- 컬러 이미지 묶음 : 4차원(높이, 너비, 채널, 이미지 개수)
? 그렇다면 동영상의 경우는??
- 1초(4차원)
- 보통 동영상은 1초당 30장~ 60장의 프레임(이미지)으로 이루어져 있음.
- 컬러 이미지 1장(높이 x 너비 x 채널)이 1초라는 짧은 시간 동안 여러 장 쌓여 있으므로, "1초 분량의 영상 데이터 = 4차원"
- 동영상 1개 전체(5차원)
- 1초짜리 4차원 데이터가 모여 전체 영상 시간(초/분) 흐름으로 한 번 더 확장
- 즉, (전체 재생 시간, 1초당 프레임 수, 높이, 너비, 채널) 처럼 시간에 대한 축이 하나 더 생기거나, 영상 내 구간/클립을 나누는 차원이 추가되어 "전체 동영상 1개 = 5차원"
※ 또 다른 상식, 용어!!
- 모델의 스냅샷, 체크포인트 : 특정 시점에서의 모델의 학습 상태(가중치와 편향값)를 사진 찍듯 그대로 저장해 둔 파일을 의미함. >> 한 줄 비유 : 게임을 플레이하다가 중요한 구간 앞에서 **'중간 저장(Save Point)'** 을 해두는 것과 같음.
- 더 현명한 접근 : 랜덤 서치(Random Search)
- 그리드 서치는, 차원의 저주로 속도가 느려지고 하이퍼 파라미터 스케일을 지정하는 어려움 등을 극복하기 위해 랜덤 서치 사용!
- 그리드 서치처럼 모든 조합을 탐색하는 대신, 지정된 횟수(n_iter)만큼 하이퍼 파라미터 조합을 랜덤으로 샘플링하여 탐색
- 각 하이퍼 파라미터의 후보 값을 특정 분포(균등분포, 정규분포)에서 추출 -> 초기 Weight 도 처음엔 랜덤으로 찾지만 이것도 어떤 분포 내에서 찾으면 성능이 더 좋아진다는 연구 결과가 있었음. => Xavier(재비어/자비에, Glorot) , He(허) 초기값 : 초기 weight 설정 기법
=> 설정 목록 : 1. 지정 횟수 2. 후보값 범위 3. 지정 횟수
-> 랜덤 서치는 비효율적인 무작위성을 가지고 있기 때문에 이를 똑똑하게 개선한 Optuna(베이지안 최적화)를사용
- Optuna(베이지안 최적화 기반) : 지능형 탐색 : 이전 시도들의 결과를 기록하고 분석하여 "어? 이 범위 근처로 하이퍼 파라미터를 설정했을 때, 점수가 잘 나오네? 그럼 다음엔 이 근처를 더 집중적으로 찾아봐야겠다!" 하고 확률적으로 가장 유망한 영역을 찾아감.