Machine Learning Pipeline: Re-Fit Structure
How to optimize model parameters and hyper-parameters
안녕하세요. 이번 포스트에서는 데이터의 크기가 작을 때, 효율적으로 머신러닝 모형을 학습하는 방법에 대하여 다룹니다.
서울대학교 통계학과 박태성교수님의 2025-s 회귀분석 및 실습 강의 내용에서 다룬 내용들을 차용하였습니다.
딥러닝 분야에서는 충분한 데이터셋이 주어지므로, 주로 mini-batch와 epoch을 정한 후 분할하여 학습합니다.
그러나 기존 머신러닝 분야에서는, 데이터셋의 한계가 존재하므로, 데이터셋이 클수록 통계적으로 일치함을 사용합니다.:
\[ \text{Consistency}:\quad\hat{\theta}_n \xrightarrow{p} \theta \]
따라서 title에 언급된 Re-Fit Structure는, test set과 다른 데이터셋을 구분하면서도, 가능한 큰 데이터셋을 사용하여 model training을 하려는 작업입니다.
1 Re-Fit Structure
1.1 Dataset Split
가장 먼저, 주어진 dataset \(\mathcal{D}\)를 6:2:2 정도로 분할합니다. (7:2:1 등 여러 variation이 가능합니다.)
따라서 3개의 dataset을 가지게 되며, 각 dataset은 서로 overlap이 없어야 합니다.
\[ \mathcal{D}_{\text{train}}, \quad \mathcal{D}_{\text{valid}},\quad \mathcal{D}_{\text{test}} \]
1.2 Model Selection
이후, 분석의 목적과 데이터의 특성에 맞는 모형을 선택합니다. 예를 들어, features 수에 비하여 sample size가 작은 경우, Overfitting을 방지하기 위한 Lasso model을 사용할 수 있습니다.
Lasso의 경우 모두 아시다시피, \(L_1\) penalty를 사용하여 feature selection 사용이 가능합니다.
본문의 Re-Fit Structure를 더 효과적으로 다루기 위하여, 두 가지 종류의 모수를 소개하고자 합니다.
- Model parameter set (weights): \(\Theta = \left\{\theta^{(1)},\ldots, \theta^{(p)}\right\}\)
- Hyper-parameter set: \(\Lambda = \left\{\lambda^{(1)},\ldots \lambda^{(q)}\right\}\)
Hyper-Parameter은 heuristic way로 정해지는 parameter이기 때문에, 여러 값을 가지고 검증해야 합니다.
아래에서 더 자세히 다루겠습니다.
1.3 Fitting: \(\mathcal{D}_{\text{train}} \to \mathcal{D}_{\text{valid}} \to \mathcal{D}_{\text{train}} \to \mathcal{D}_{\text{valid}} \to \ldots\)
Train set: Model Parameter set \(\Theta\) Optimization
Validation set: Hyper-Parameter set \(\Lambda\) Optimization
- Hyper-Parameter의 후보 집합인 Candidate Set \(\mathcal{S}_\Lambda\)을 설정합니다.
- 이후 \(\Lambda_1\)을 사용하여, Train set에서 optimal model parameter \(\hat{\Theta}_1\left(\Lambda_1\right)\)를 계산합니다.
- 또한 \(\hat{\Theta}_1\)를 사용하여, Validation set에서 \(\mathcal{L}_{valid}\left(\hat{\Theta}_1\left(\Lambda_1\right), \Lambda_1\right)\)을 계산합니다.
- 그 다음, 두 번째 \(\Lambda_2\)을 사용하여, Train set에서 optimal model parameter \(\hat{\Theta}_2\left(\Lambda_2\right)\)를 계산합니다.
- 마찬가지로 \(\hat{\Theta}_2\)를 사용하여, Validation set에서 \(\mathcal{L}_{valid}\left(\hat{\Theta}_2\left(\Lambda_2\right), \Lambda_2\right)\)을 계산합니다.
- \(\ldots\)
- (Grid-Search) 위 과정을 모든 \(\Lambda \in \mathcal{S}_\Lambda\)에 대하여 반복합니다.
- 모든 \(\mathcal{L}_{valid}\left(\hat{\Theta}_j\left(\Lambda_j\right), \Lambda_j\right)\)가 최소가 되는 Optimal \(\Lambda = \Lambda^*\)를 도출합니다.
전체 과정은 아래의 pseudo code에 정리하였습니다.
1.3.1 Loop
- Setting for Grid Search
- \(\mathcal{S}_\Lambda\): Candidate set of hyper-parameter set
- \(\mathcal{L}\): Loss function for residuals
- For \(\Lambda \in \mathcal{S}_\Lambda\) do:
- Initialize
- \(\Theta \leftarrow \Theta_0\)
- Step 1. Train set optimization
- Compute \(\mathcal{L}_{train}\left(\Theta, \Lambda\right)\)
- \(\hat{\Theta}\left(\Lambda\right) = \arg\min_{\Theta} \mathcal{L}_{train}\left(\Theta, \Lambda\right)\)
- Step 2. Validation set evaluation
- Compute \(\mathcal{L}_{valid}\left(\hat{\Theta}\left(\Lambda\right), \Lambda\right)\)
- Initialize
- For \(\Lambda \in \mathcal{S}_\Lambda\) do:
- Compare \(\mathcal{L}_{valid}\left(\hat{\Theta}\left(\Lambda\right), \Lambda\right)\)
- \(\Lambda^* = \arg\min_{\Lambda} \mathcal{L}_{valid}\left(\hat{\Theta}\left(\Lambda\right), \Lambda\right)\)
- Return \(\Lambda^*\)
1.4 Re-fit: \(\mathcal{D}_{\text{model}} = \mathcal{D}_{\text{train}} + \mathcal{D}_{\text{valid}}\)
Optimal Hyper-Parameter \(\Lambda^*\)가 결정되었다면, 이제 Model Parameter \(\Theta^*\)를 구할 단계입니다.
통계학에서 sample size가 클 수록 parameter estimates \(\hat{\Theta} \xrightarrow{p} \Theta\)로 가는 Consistency가 성립하므로, \(\mathcal{D}_{\text{test}}\)을 제외한 모든 sample에서 학습을 진행하여야 합니다.
이러한 과정을 Re-fit이라 부르고, \(\mathcal{D}_{\text{model}} = \mathcal{D}_{\text{train}} + \mathcal{D}_{\text{valid}}\)에서 model parameter 학습을 진행하게 됩니다.
따라서 Above에서 결정된 \(\Lambda^*\)에 대하여, 1회에 한하여 model parameter을 구합니다.
\[ \Theta^* = \arg\min_{\Theta} \mathcal{L}_{model}\left(\Theta, \Lambda^*\right) \]
Fitting에서 도출한 hyper-parameter \(\Lambda^*\)을 다시 최적화하지 않습니다. 오직 model parameter \(\Theta\)만 optimization합니다.
1.5 Test set: Model Evaluation
도출한 두 optimal \(\Theta^*, \Lambda^*\)을 사용하여, Model의 performance를 측정합니다.
\[ \text{Performance} = \text{Metric}_{\text{test}}\left[\text{Model}\left(\Theta^*, \Lambda^*\right)\right] \]
Model Performance의 측정은 \(\mathcal{D}_{\text{test}}\)에서만 진행하게 됩니다.