initial commit FESurrogateModelTutorial

This commit is contained in:
김경종
2026-05-21 17:03:51 +09:00
parent 93665d9ee6
commit 43b86669fa
122 changed files with 7929 additions and 0 deletions
@@ -0,0 +1,98 @@
# FEM 구조해석을 위한 Surrogate Modeling 개요
## 목적
Surrogate model은 계산 비용이 큰 해석 모델을 반복 호출하기 어려울 때, 입력 변수와 출력 응답 사이의 관계를 데이터 기반으로 근사하는 모델이다. FEM 구조해석에서는 설계변수 변화에 따른 변위, 응력, 질량, compliance 같은 응답을 빠르게 예측하기 위해 사용한다.
이 튜토리얼의 surrogate는 고충실도 산업용 solver를 대체하는 범용 도구가 아니라, 제한된 입력 범위 안에서 반복 설계 탐색과 모델 비교를 학습하기 위한 교육용 근사 모델이다.
## 문제 정의
FEM 해석 모델을 다음 함수로 본다.
```text
y = f(x)
```
- `x`: 설계변수 벡터. 예: beam 길이 `L`, 폭 `b`, 높이 `h`, 탄성계수 `E`, 하중 `P`.
- `f`: FEM solver. 이 튜토리얼에서는 2D Euler-Bernoulli beam/frame solver.
- `y`: 응답. 예: tip displacement, maximum bending stress, mass, compliance.
Surrogate model은 해석 데이터 `{x_i, y_i}`를 이용해 `f`를 근사하는 `\hat{f}`를 만든다.
```text
\hat{y} = \hat{f}(x)
```
좋은 surrogate는 빠른 예측뿐 아니라, 어떤 영역에서 믿을 수 있고 어떤 영역에서 위험한지도 설명할 수 있어야 한다.
## 왜 FEM에서 필요한가
구조해석에서는 다음 작업이 반복 평가를 요구한다.
- 설계변수 sweep.
- 민감도 분석.
- 최적화.
- 불확실성 전파.
- 신뢰성 분석.
- inverse problem 또는 model calibration.
Queipo et al.은 surrogate-based analysis and optimization이 비싼 high-fidelity model의 계산 부담을 줄이고 민감도/최적화 연구를 가능하게 한다고 정리한다. Forrester와 Keane도 긴 계산 시간이 필요한 aerospace design evaluation에서 surrogate 기반 방법이 효율적 최적화를 가능하게 하는 배경을 설명한다.
## 전체 workflow
```text
1. 해석 문제 정의
2. 입력 변수와 범위 설정
3. DOE로 샘플 생성
4. FEM batch 해석
5. 데이터 정리와 train/test split
6. surrogate 모델 학습
7. 검증과 진단
8. 모델 비교
9. 설계 탐색 또는 최적화에 활용
```
이 workflow에서 가장 중요한 판단은 데이터의 범위다. Surrogate는 학습한 입력 영역 안에서만 신뢰할 수 있다. 학습 범위를 벗어난 외삽은 모델별로 다르게 실패하며, 예측값이 그럴듯해 보여도 구조적으로 틀릴 수 있다.
## 이 튜토리얼의 FEM 모델
기준 해석 모델은 2D Euler-Bernoulli beam/frame element이다.
- 노드당 자유도: `ux`, `uy`, `rz`.
- 요소: 축방향 변형과 굽힘 변형을 포함한 2-node frame element.
- 해석: 선형 정적 해석.
- solver: sparse global stiffness matrix를 조립하고 `scipy.sparse.linalg.spsolve`로 선형 시스템을 푼다.
- 검증: cantilever beam tip displacement 해석해 `P L^3 / (3 E I)`와 비교한다.
이 선택은 학습 목적에 맞다. Beam 요소는 수식이 충분히 작아 직접 구현할 수 있고, 단면 형상과 하중 변화가 변위/응력에 비선형적인 영향을 주므로 surrogate 비교에도 적합하다.
## 모델 비교 관점
이 튜토리얼은 다음 질문에 답하도록 설계한다.
| 모델 | 핵심 질문 |
| --- | --- |
| Response Surface | 낮은 차수 다항식으로 구조 응답을 충분히 설명할 수 있는가? |
| Gaussian Process/Kriging | 적은 데이터에서 예측 불확실성을 함께 얻을 수 있는가? |
| Random Forest | 비선형성과 변수 상호작용을 튼튼하게 포착하는가? |
| Gradient Boosting | 작은 tree를 순차적으로 더해 높은 정확도를 얻는가? |
| MLP | scaling과 충분한 데이터가 있을 때 매끄러운 비선형 근사가 가능한가? |
## 검증 원칙
Surrogate 검증은 단순히 test R2 하나로 끝내지 않는다.
- Train/test split은 고정 seed로 재현한다.
- K-fold cross validation으로 표본 의존성을 확인한다.
- RMSE, MAE, R2를 함께 본다.
- Parity plot으로 편향과 outlier를 본다.
- Residual plot으로 입력 영역별 오류 구조를 본다.
- 모델별 uncertainty 또는 feature importance를 해석한다.
- 해석 데이터의 물리 단위와 target 정의를 metadata에 남긴다.
## 실패 모드
- 학습 영역 밖에서 외삽한다.
- 입력 변수 범위가 물리적으로 의미 없는 조합을 포함한다.
- 응력처럼 국소적이고 비선형적인 응답을 너무 단순한 모델로 근사한다.
- train/test split이 샘플링 편향을 숨긴다.
- feature scaling을 하지 않아 MLP나 GPR 학습이 불안정하다.
- 예측 정확도만 보고 물리 제약을 확인하지 않는다.
## References
- Queipo, N. V. et al. (2005), "Surrogate-based analysis and optimization", Progress in Aerospace Sciences. https://doi.org/10.1016/j.paerosci.2005.02.001
- Forrester, A. I. J. and Keane, A. J. (2009), "Recent advances in surrogate-based optimization", Progress in Aerospace Sciences. https://doi.org/10.1016/j.paerosci.2008.11.001
- SciPy `spsolve` documentation. https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html
@@ -0,0 +1,114 @@
# DOE, Sampling, Validation
## 목적
Surrogate model의 품질은 모델 종류만큼이나 데이터 설계에 좌우된다. FEM surrogate에서는 입력 변수 범위, 샘플링 방법, train/test split, 검증 지표가 모두 모델 해석에 영향을 준다.
## 입력 공간 정의
이 튜토리얼의 기본 입력 변수는 다음과 같다.
| 변수 | 의미 | 단위 | 예시 범위 |
| --- | --- | --- | --- |
| `L_m` | beam length | m | 1.0-3.0 |
| `b_m` | rectangular section width | m | 0.02-0.08 |
| `h_m` | rectangular section height | m | 0.04-0.16 |
| `E_pa` | Young's modulus | Pa | 100e9-220e9 |
| `P_n` | tip point load magnitude | N | 100-2000 |
파생 변수는 FEM 해석 직전에 계산한다.
```text
A = b h
I = b h^3 / 12
```
`h`는 bending stiffness에 세제곱으로 들어가므로, tip displacement와 bending stress에 큰 영향을 준다. 이런 구조적 비선형성 때문에 단순 선형 회귀보다 다양한 surrogate 비교가 의미를 가진다.
## Latin Hypercube Sampling
Latin Hypercube Sampling(LHS)은 각 입력 변수의 marginal distribution을 층화하여, 적은 샘플에서도 각 변수 범위를 비교적 고르게 덮도록 설계한다. McKay, Beckman, Conover의 1979년 논문은 computer code output 분석에서 sampling plan을 비교한 고전적 출처다.
SciPy의 `scipy.stats.qmc.LatinHypercube``[0, 1)^d` 단위 hypercube에 샘플을 만들고, 이후 사용자가 물리 범위로 scaling한다.
```text
u ~ LHS([0,1)^d)
x_j = lower_j + u_j (upper_j - lower_j)
```
이 튜토리얼은 다음을 기본값으로 사용한다.
- `n_samples = 300`
- `seed = 20260521`
- `target = tip_uy_m`
- 동일 dataset과 동일 split을 모든 model notebook에서 사용
## Train/Test Split
단일 test set만으로 모델을 판단하면 샘플 배치에 민감할 수 있다. 따라서 다음 두 가지를 함께 사용한다.
- Hold-out test set: 최종 성능 비교용.
- K-fold cross validation: 학습 데이터 안에서 모델 안정성 확인용.
추천 기본값:
```text
test_size = 0.2
cv_folds = 5
random_state = 20260521
```
## 평가 지표
### RMSE
큰 오차에 민감하다. 구조해석 surrogate에서 위험한 outlier를 확인하는 데 유용하다.
```text
RMSE = sqrt(mean((y - y_hat)^2))
```
### MAE
평균적인 절대 오차를 직관적으로 보여준다.
```text
MAE = mean(abs(y - y_hat))
```
### R2
분산 설명력을 나타낸다. 다만 target scale이나 test set 분포에 따라 해석이 왜곡될 수 있으므로 RMSE/MAE와 함께 본다.
```text
R2 = 1 - sum((y - y_hat)^2) / sum((y - mean(y))^2)
```
## Plot 기반 진단
- Parity plot: 예측값과 실제값이 `y=x` 선 주변에 있는지 확인.
- Residual plot: 예측값 또는 주요 입력 변수에 따른 오차 패턴 확인.
- Error histogram: 오차 분포와 outlier 확인.
- Model comparison bar plot: RMSE, MAE, R2, 학습 시간, 예측 시간 비교.
## Dataset Metadata
CSV만으로는 dataset의 생성 조건을 알기 어렵다. 따라서 metadata JSON을 함께 저장한다.
```json
{
"dataset_name": "beam2d_lhs_300",
"sample_count": 300,
"random_seed": 20260521,
"unit_system": "SI",
"fea_model": "2D Euler-Bernoulli beam/frame, linear static",
"target_columns": [
"tip_uy_m",
"max_abs_bending_stress_pa",
"mass_kg",
"compliance_j"
]
}
```
## 주의점
- DOE 범위는 surrogate의 유효 영역이다. 범위 밖 예측은 별도 경고를 둔다.
- 물리적으로 불가능한 조합을 허용하지 않는다.
- FEM solver 실패 케이스는 조용히 버리지 말고 metadata에 기록한다.
- 단위가 섞이면 모델 비교가 무의미해진다.
- 동일 데이터셋을 쓰지 않으면 모델별 비교가 공정하지 않다.
## References
- McKay, M. D., Beckman, R. J., and Conover, W. J. (1979), "Comparison of Three Methods for Selecting Values of Input Variables in the Analysis of Output from a Computer Code", Technometrics. https://doi.org/10.1080/00401706.1979.10489755
- OSTI bibliographic record for McKay et al. https://www.osti.gov/biblio/5236110
- SciPy `LatinHypercube` documentation. https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.qmc.LatinHypercube.html
@@ -0,0 +1,77 @@
# Response Surface Methodology
## 핵심 아이디어
Response Surface Methodology(RSM)는 입력 변수와 응답 사이의 관계를 낮은 차수 다항식으로 근사한다. 구조해석 surrogate에서는 물리 응답이 충분히 매끄럽고 입력 범위가 좁을 때 강력한 기준선이 된다.
기본 2차 response surface는 다음 형태다.
```text
y = beta_0 + sum beta_i x_i + sum beta_ii x_i^2 + sum beta_ij x_i x_j + epsilon
```
- `x_i`: scaling된 설계변수.
- `beta`: 회귀 계수.
- `x_i x_j`: 변수 상호작용.
- `epsilon`: 모델이 설명하지 못한 잔차.
## FEM surrogate에서의 의미
Beam 문제에서는 `I = b h^3 / 12` 때문에 응답이 입력 변수에 대해 비선형이다. 낮은 차수 다항식은 이 관계를 완벽히 재현하지 못할 수 있지만, 다음 장점이 있다.
- 빠르다.
- 계수 해석이 가능하다.
- 적은 데이터에서도 안정적이다.
- 복잡한 모델의 baseline으로 적합하다.
RSM은 특히 설계변수 범위가 좁고 응답이 단조롭고 매끄러울 때 유용하다.
## 구현 선택
이 튜토리얼에서는 scikit-learn의 `PolynomialFeatures``Ridge`를 조합한다.
```text
StandardScaler
-> PolynomialFeatures(degree=2, include_bias=False)
-> Ridge(alpha=...)
```
`PolynomialFeatures`는 입력 변수의 다항 조합을 만들고, `Ridge`는 L2 regularization으로 계수 크기를 제어한다. 일반 선형회귀 대신 Ridge를 쓰는 이유는 다항 feature가 늘어나면 feature 간 상관성이 커지고 계수가 불안정해질 수 있기 때문이다.
## Notebook 실습 포인트
`notebooks/01_response_surface_surrogate.ipynb`는 다음을 보여준다.
1. 동일 FEM dataset 로드.
2. target `tip_uy_m` 선택.
3. degree 1, 2, 3 비교.
4. Ridge `alpha` 변화에 따른 train/test error 비교.
5. parity plot과 residual plot.
6. 다항 feature 이름과 계수 크기 해석.
## 장점
- 학습과 예측이 매우 빠르다.
- 작은 데이터에서 baseline으로 좋다.
- 변수 간 interaction을 명시적으로 볼 수 있다.
- extrapolation이 tree model보다 연속적이다.
## 한계와 실패 모드
- 실제 응답이 강하게 비선형이면 낮은 차수 다항식으로 부족하다.
- 높은 차수는 과적합과 수치 불안정을 만든다.
- 입력 scaling 없이 다항 feature를 만들면 큰 단위의 변수가 학습을 지배할 수 있다.
- 설계공간 경계 밖에서는 다항식이 물리적으로 말이 안 되는 큰 값을 낼 수 있다.
## 구조해석 해석 기준
RSM이 좋은 선택인 경우:
- 설계변수 수가 적다.
- 입력 범위가 좁다.
- 응답이 매끄럽고 단조적이다.
- 설명 가능한 surrogate가 중요하다.
RSM을 피해야 하는 경우:
- 응답에 threshold, discontinuity, contact-like behavior가 있다.
- 입력 범위가 넓고 상호작용이 복잡하다.
- 국소 응력 peak처럼 고차 비선형성이 크다.
## References
- Box, G. E. P. and Wilson, K. B. (1951), "On the Experimental Attainment of Optimum Conditions", Journal of the Royal Statistical Society Series B. https://doi.org/10.1111/j.2517-6161.1951.tb00067.x
- scikit-learn `PolynomialFeatures` documentation. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html
- scikit-learn `Ridge` documentation. https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html
@@ -0,0 +1,86 @@
# Gaussian Process Regression and Kriging
## 핵심 아이디어
Gaussian Process Regression(GPR)은 함수값을 확률변수로 보고, 입력 위치 사이의 상관관계를 kernel로 정의한다. Engineering design 분야에서는 Kriging이라는 이름으로 널리 사용된다.
GPR은 예측 평균뿐 아니라 예측 표준편차를 제공한다.
```text
y(x) ~ GP(m(x), k(x, x'))
```
- `m(x)`: mean function.
- `k(x, x')`: covariance function 또는 kernel.
- 예측 결과: `mean`, `standard deviation`.
## FEM surrogate에서의 의미
FEM 해석 데이터는 deterministic한 computer experiment인 경우가 많다. 같은 입력을 넣으면 같은 출력이 나온다. 이런 상황에서 GPR/Kriging은 적은 해석점으로 매끄러운 응답면을 만들고, 학습점에서 먼 영역의 불확실성을 크게 줄 수 있어 surrogate 신뢰도 설명에 유리하다.
Sacks et al.의 computer experiment 연구는 계산 모델 입력과 출력 사이의 응답을 stochastic process로 모델링하는 관점을 제시했다. Rasmussen과 Williams의 GPML은 Gaussian process의 수학적 기반과 kernel 관점을 체계적으로 설명한다.
## 구현 선택
이 튜토리얼에서는 다음 kernel을 기본으로 사용한다.
```text
ConstantKernel * RBF + WhiteKernel
```
- `ConstantKernel`: 응답 scale.
- `RBF`: 입력 공간에서 가까운 점은 비슷한 응답을 가진다는 smoothness 가정.
- `WhiteKernel`: 수치 noise 또는 모델 불일치 허용.
Notebook pipeline:
```text
StandardScaler
-> GaussianProcessRegressor(kernel=..., normalize_y=True)
```
## Hyperparameter 의미
- `length_scale`: 각 입력 방향에서 함수가 얼마나 빨리 변하는지 나타낸다.
- `noise_level`: 해석 데이터의 noise 또는 모델 불일치 허용량이다.
- `alpha`: numerical stability를 위한 diagonal jitter로 사용할 수 있다.
- `n_restarts_optimizer`: kernel hyperparameter 최적화의 local optimum 위험을 줄인다.
## Notebook 실습 포인트
`notebooks/02_gaussian_process_kriging_surrogate.ipynb`는 다음을 보여준다.
1. 동일 dataset과 split 로드.
2. RBF kernel 기반 GPR 학습.
3. 예측 평균과 표준편차 계산.
4. parity plot에 uncertainty band 또는 error coloring 추가.
5. 입력 공간에서 학습점과 먼 샘플의 uncertainty 확인.
6. 학습 sample 수 증가에 따른 RMSE와 예측 표준편차 변화.
## 장점
- 작은 데이터에서 강력하다.
- 예측 uncertainty를 제공한다.
- Smooth response surface에 적합하다.
- Bayesian optimization과 active learning으로 확장하기 좋다.
## 한계와 실패 모드
- 기본 exact GPR은 학습 데이터 수가 커지면 계산 비용이 급격히 증가한다.
- Kernel 선택이 성능을 크게 좌우한다.
- 입력 scaling이 중요하다.
- 고차원 입력에서는 length scale 학습이 불안정할 수 있다.
- 예측 표준편차는 모델 가정 하의 불확실성이지, 모든 물리 오류를 보장하지 않는다.
## 구조해석 해석 기준
GPR/Kriging이 좋은 선택인 경우:
- FEM 해석이 비싸고 sample 수가 작다.
- 응답이 매끄럽다.
- uncertainty 기반 추가 샘플링을 설명하고 싶다.
- 설계공간 탐색에서 신뢰도 경고가 필요하다.
주의할 경우:
- sample 수가 수천 개 이상이다.
- 응답이 불연속적이다.
- 입력 차원이 많고 상호작용이 복잡하다.
## References
- Sacks, J., Welch, W. J., Mitchell, T. J., and Wynn, H. P. (1989), "Design and Analysis of Computer Experiments", Statistical Science. https://doi.org/10.1214/ss/1177012413
- Sacks, J., Schiller, S. B., and Welch, W. J. (1989), "Designs for Computer Experiments", Technometrics. https://doi.org/10.1080/00401706.1989.10488474
- Rasmussen, C. E. and Williams, C. K. I. (2006), Gaussian Processes for Machine Learning. https://gaussianprocess.org/gpml/chapters/RW.pdf
- scikit-learn Gaussian Process documentation. https://scikit-learn.org/stable/modules/gaussian_process.html
@@ -0,0 +1,76 @@
# Random Forest Surrogate
## 핵심 아이디어
Random Forest는 여러 decision tree를 bootstrap sample로 학습하고 평균하여 예측하는 ensemble 모델이다. 각 tree는 입력 공간을 여러 영역으로 나누고, 회귀 문제에서는 leaf의 평균값을 예측한다.
```text
\hat{f}(x) = (1 / T) sum_{t=1}^{T} h_t(x)
```
- `T`: tree 개수.
- `h_t`: 개별 regression tree.
Breiman의 2001년 Random Forest 논문은 bagging과 random feature selection을 결합한 ensemble 방법을 제시했다.
## FEM surrogate에서의 의미
Random Forest는 비선형성과 변수 상호작용을 명시적 feature engineering 없이 포착할 수 있다. Beam surrogate에서는 `h`, `b`, `L`, `P`, `E`의 비선형 영향과 interaction을 빠르게 잡는 비교 모델로 좋다.
## 구현 선택
이 튜토리얼에서는 scikit-learn의 `RandomForestRegressor`를 사용한다.
기본 설정 예:
```text
RandomForestRegressor(
n_estimators=300,
max_depth=None,
min_samples_leaf=2,
random_state=20260521,
n_jobs=-1
)
```
Tree model은 feature scaling이 필수는 아니지만, 다른 모델과 공통 전처리 구조를 설명하기 위해 입력 column 관리는 동일하게 유지한다.
## Notebook 실습 포인트
`notebooks/03_random_forest_surrogate.ipynb`는 다음을 보여준다.
1. 동일 dataset과 split 로드.
2. `n_estimators`, `max_depth`, `min_samples_leaf` 영향 비교.
3. test metric 계산.
4. parity plot과 residual plot.
5. permutation importance로 입력 변수 영향 확인.
6. feature importance와 beam 물리 관계 비교.
## 장점
- scaling에 덜 민감하다.
- 비선형성과 interaction을 잘 포착한다.
- outlier에 비교적 튼튼하다.
- feature importance를 계산하기 쉽다.
- 학습이 안정적이고 baseline으로 좋다.
## 한계와 실패 모드
- 예측이 piecewise constant라 매끄러운 응답면이 필요한 경우 부자연스러울 수 있다.
- 학습 데이터 범위 밖으로 외삽하지 못한다.
- 물리적으로 단조여야 하는 관계를 자동으로 보장하지 않는다.
- uncertainty는 GPR처럼 원래 제공되는 개념이 아니다.
- feature importance는 correlated feature에서 오해될 수 있다.
## 구조해석 해석 기준
Random Forest가 좋은 선택인 경우:
- 빠르고 안정적인 비선형 baseline이 필요하다.
- 변수 중요도 분석을 보고 싶다.
- 데이터가 중간 규모 이상이다.
- target이 매끄러운 global response다.
주의할 경우:
- 설계 최적화에서 매끄러운 gradient-like response가 필요하다.
- 외삽이 필요하다.
- 응답면의 국소 smoothness가 중요하다.
## References
- Breiman, L. (2001), "Random Forests", Machine Learning, 45, 5-32. https://doi.org/10.1023/A:1010933404324
- CiNii bibliographic record for Breiman (2001). https://cir.nii.ac.jp/crid/1360574092892023168
- scikit-learn `RandomForestRegressor` documentation. https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html
@@ -0,0 +1,77 @@
# Gradient Boosting Surrogate
## 핵심 아이디어
Gradient Boosting은 약한 예측기, 보통 shallow decision tree를 순차적으로 더해 손실함수를 줄이는 additive model이다. 각 단계의 tree는 이전 모델의 오차를 보정하는 방향으로 학습된다.
```text
F_M(x) = F_0(x) + sum_{m=1}^{M} nu h_m(x)
```
- `F_M`: 최종 모델.
- `h_m`: m번째 weak learner.
- `nu`: learning rate.
Friedman의 2001년 논문은 gradient boosting machine을 함수공간에서의 greedy approximation으로 설명한다.
## FEM surrogate에서의 의미
Gradient Boosting은 Random Forest보다 bias를 더 적극적으로 줄이는 경우가 많다. Beam surrogate에서 낮은 차수 RSM이 놓치는 비선형성을 tree ensemble이 순차적으로 보정할 수 있다.
## 구현 선택
이 튜토리얼에서는 scikit-learn의 `GradientBoostingRegressor`를 사용한다.
기본 설정 예:
```text
GradientBoostingRegressor(
loss="squared_error",
learning_rate=0.05,
n_estimators=300,
max_depth=3,
subsample=0.9,
random_state=20260521
)
```
`learning_rate``n_estimators`는 함께 조정해야 한다. 작은 learning rate는 더 많은 tree를 요구하지만 과적합을 완화할 수 있다.
## Notebook 실습 포인트
`notebooks/04_gradient_boosting_surrogate.ipynb`는 다음을 보여준다.
1. 동일 dataset과 split 로드.
2. `learning_rate``n_estimators` tradeoff.
3. staged prediction으로 train/test error curve 확인.
4. parity plot과 residual plot.
5. permutation importance 또는 built-in feature importance 비교.
6. Random Forest와 오차 패턴 비교.
## 장점
- tabular regression에서 높은 성능을 내기 쉽다.
- 비선형성과 interaction을 잘 포착한다.
- model size와 성능의 tradeoff를 조절하기 쉽다.
- staged prediction으로 과적합 진행을 관찰할 수 있다.
## 한계와 실패 모드
- hyperparameter에 Random Forest보다 민감하다.
- noise가 큰 데이터에서는 오차를 과도하게 따라갈 수 있다.
- tree 기반 모델이므로 외삽은 약하다.
- 학습 순서가 sequential하므로 Random Forest보다 병렬화 이점이 작다.
- 너무 복잡한 설정은 교육용 notebook을 흐리게 만들 수 있다.
## 구조해석 해석 기준
Gradient Boosting이 좋은 선택인 경우:
- 정확도가 중요한 tabular surrogate가 필요하다.
- 입력 변수 수가 적거나 중간 규모다.
- 해석 응답이 비선형이지만 불연속은 아니다.
- 최종 비교에서 강한 classical ML baseline이 필요하다.
주의할 경우:
- uncertainty가 핵심 요구사항이다.
- 모델 해석성이 RSM 수준으로 필요하다.
- 데이터 수가 매우 적다.
## References
- Friedman, J. H. (2001), "Greedy Function Approximation: A Gradient Boosting Machine", The Annals of Statistics. https://doi.org/10.1214/aos/1013203451
- CiNii bibliographic record for Friedman (2001). https://cir.nii.ac.jp/crid/1360292617909870720
- scikit-learn `GradientBoostingRegressor` documentation. https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingRegressor.html
@@ -0,0 +1,90 @@
# MLP Neural Network Surrogate
## 핵심 아이디어
Multi-layer Perceptron(MLP)은 affine transform과 nonlinear activation을 여러 층으로 쌓아 입력과 출력의 비선형 관계를 학습한다.
단일 hidden layer MLP는 다음처럼 표현할 수 있다.
```text
\hat{y} = W_2 phi(W_1 x + b_1) + b_2
```
- `x`: scaling된 입력.
- `phi`: activation function.
- `W`, `b`: 학습되는 weight와 bias.
Cybenko의 universal approximation theorem은 충분한 hidden unit을 가진 신경망이 넓은 함수군을 근사할 수 있음을 보인 고전적 결과다. 다만 "근사 가능하다"는 말이 적은 데이터에서 항상 잘 학습된다는 뜻은 아니다.
## FEM surrogate에서의 의미
MLP는 beam 응답처럼 매끄러운 비선형 함수를 학습할 수 있다. 그러나 데이터 수, scaling, regularization, optimization 설정에 민감하다. 이 튜토리얼에서는 deep learning framework를 도입하지 않고 scikit-learn의 `MLPRegressor`로 작은 neural surrogate의 특성을 보여준다.
## 구현 선택
기본 pipeline:
```text
StandardScaler
-> TransformedTargetRegressor(
regressor=MLPRegressor(...),
transformer=StandardScaler()
)
```
추천 기본 설정:
```text
MLPRegressor(
hidden_layer_sizes=(64, 32),
activation="relu",
solver="adam",
alpha=1e-4,
learning_rate_init=1e-3,
early_stopping=True,
max_iter=2000,
random_state=20260521
)
```
입력뿐 아니라 target scaling도 중요하다. FEM 응답은 단위와 scale이 크게 다를 수 있기 때문이다.
## Notebook 실습 포인트
`notebooks/05_mlp_surrogate.ipynb`는 다음을 보여준다.
1. 동일 dataset과 split 로드.
2. 입력 scaling과 target scaling의 효과.
3. hidden layer 크기 비교.
4. train/test learning curve.
5. parity plot과 residual plot.
6. RSM, GPR, tree ensemble 대비 MLP의 장단점 정리.
## 장점
- 매끄러운 비선형 함수 근사에 적합하다.
- 다중 출력 surrogate로 확장하기 쉽다.
- 충분한 데이터와 tuning이 있으면 복잡한 관계를 학습할 수 있다.
- 동일 pipeline 구조로 다른 neural framework로 확장 가능하다.
## 한계와 실패 모드
- 작은 데이터에서는 과적합하거나 불안정할 수 있다.
- scaling 없이 학습하면 convergence가 나빠질 수 있다.
- hyperparameter 선택이 성능에 큰 영향을 준다.
- GPR처럼 기본 uncertainty를 제공하지 않는다.
- 모델 해석성이 낮다.
## 구조해석 해석 기준
MLP가 좋은 선택인 경우:
- 데이터 수가 충분하다.
- 응답이 매끄럽지만 단순 다항식으로 부족하다.
- 다중 출력 또는 복잡한 feature representation 확장을 고려한다.
- 최종 정확도가 중요하고 해석성 요구가 낮다.
주의할 경우:
- sample 수가 매우 작다.
- 예측 불확실성이 중요하다.
- 실험자가 scaling과 validation을 엄격히 관리하기 어렵다.
## References
- Cybenko, G. (1989), "Approximation by Superpositions of a Sigmoidal Function", Mathematics of Control, Signals, and Systems. https://doi.org/10.1007/BF02551274
- CiNii bibliographic record for Cybenko (1989). https://cir.nii.ac.jp/crid/1361981471344652032
- Glorot, X. and Bengio, Y. (2010), "Understanding the difficulty of training deep feedforward neural networks", AISTATS. https://proceedings.mlr.press/v9/glorot10a.html
- scikit-learn `MLPRegressor` documentation. https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html