initial commit FESurrogateModelTutorial
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user