scikit-learn 호환이라 fit()·predict()로 바로 쓸 수 있고, JAX 원본과 PyTorch 이식본 두 백엔드를 함께 제공한다.
(저장소: google-research/tabfm · Apache-2.0 · 최초 릴리스 v1.0.0 (2026-06-29) · ★542 · TrendShift Monthly 6위)
이 저장소가 대체 무엇인가.
여러분이 엑셀 표를 하나 갖고 있다고 하자. 왼쪽에는 나이·직업·소득 같은 특성(feature) 열들이 있고, 맨 오른쪽엔 "고위험/저위험" 같은 정답(label) 열이 있다. 보통은 이 표로 XGBoost 같은 모델을 몇 분~몇 시간 학습시켜야 예측기가 만들어진다.
TabFM은 다르다. 이미 방대한 합성 표 데이터로 딱 한 번 사전학습된 하나의 모델이, 여러분의 훈련 행들을 그냥 "예시 문맥"으로 읽고 곧바로 테스트 행의 답을 내놓는다. 여러분 데이터에 대한 추가 학습(파라미터 업데이트)이 전혀 없다. 비유하면 — XGBoost = 매번 새로 교육시키는 신입, TabFM = 표 읽는 법을 이미 통달해서 예시만 슥 보면 바로 답하는 베테랑이다.
README의 자기소개는 이렇다: "TabFM is a scikit-learn compatible tabular foundation model. It allows you to perform zero-shot classification and regression on tabular datasets with mixed column types out-of-the-box."
풀어 쓰면 — (1) scikit-learn 호환이라 익숙한 fit/predict/predict_proba를 그대로 쓰고, (2) 숫자·범주가 섞인 혼합형 열을 별도 원-핫 인코딩 없이 바로 먹으며, (3) 제로샷(zero-shot) — 즉 사용자 데이터로 재학습하지 않고 예측한다는 뜻이다.
README는 그 원리를 한 문장으로 요약한다: "At inference time, TabFM does not require training parameters on your dataset; instead, it leverages in-context learning by reading your training data as 'context' to make instant predictions on new test samples." 이 문장이 이 프로젝트의 전부다. 추론 시점에 학습 파라미터가 필요 없고, 훈련 데이터를 문맥으로 읽어 즉시 예측한다.
README에 "This is not an officially supported Google product."라고 명시돼 있다. 구글 리서치 조직(google-research)이 공개한 연구 결과물이며, 상용 SLA·지원이 붙는 정식 제품은 아니라는 뜻이다. 최초 릴리스 v1.0.0이 2026-06-29에 올라온 갓 나온 코드이고, GitHub Releases 탭에는 아직 배포 노트가 비어 있다(태그만 존재). 학습·실험용으로 보는 게 맞다.
빅테크가 "표 파운데이션 모델" 경쟁에 정식 진입 · 학습 0초 · sklearn 드롭인 · 이중 백엔드.
표(tabular) 데이터는 여전히 산업 현장 ML의 8할이다. 은행 신용평가, 이탈 예측, 수요 예측, 의료 위험도 — 대부분 행·열로 된 표다. 그리고 이 영역의 오랜 왕은 딥러닝이 아니라 XGBoost·LightGBM 같은 그래디언트 부스팅 트리(GBDT)였다. 그런데 2022년 TabPFN이라는 논문이 "트랜스포머로 표를 인컨텍스트 러닝하면 학습 없이도 작은 표에서 GBDT를 능가한다"는 걸 보이며 판을 흔들었다. TabFM은 바로 그 흐름에 구글 리서치가 정식으로 뛰어든 결과물이다.
| 비교 축 | XGBoost / LightGBM (GBDT) | TabFM (표 파운데이션 모델) |
|---|---|---|
| 새 데이터셋에 쓰려면 | 매번 처음부터 학습 (수초~수시간) | 학습 0 — 훈련 행을 문맥으로 읽고 즉시 예측 |
| 동작 원리 | 결정 트리를 순차적으로 쌓아 오차 보정 | 트랜스포머의 인컨텍스트 러닝 (1회 forward pass) |
| 하이퍼파라미터 튜닝 | 보통 필수 (학습률·깊이·규제…) | 기본값으로 바로 — 튜닝 부담 낮음 |
| 혼합형 열(숫자+범주) | 전처리·인코딩 손이 감 | out-of-the-box (내부에서 처리) |
| 강한 구간 | 크고 복잡한 표, 대용량 | 작은~중간 표, 빠른 베이스라인 |
GBDT는 "요리 학원"이고, TabFM은 "레시피를 통째로 외운 요리사"다. 새 요리(데이터셋)를 낼 때 GBDT는 매번 학원에 등록해 처음부터 배워야(학습) 한다. TabFM은 이미 수천 가지 요리를 익혀 둔 요리사라, 여러분이 냉장고 속 재료 몇 개(훈련 행)를 보여 주면 그 자리에서 새 요리를 만들어 낸다 — 다시 학원 갈 필요 없이.
주목도를 끌어올린 구체적 요인은 다음과 같다.
① 출신과 타이밍. google-research 조직 계정에서, 표 파운데이션 모델을 학습 코드가 아니라 "쓸 수 있는 라이브러리 + 사전학습 가중치" 형태로 냈다. 2026-06-29 릴리스 직후 월간 트렌딩에 진입한 따끈한 프로젝트다.
② scikit-learn 드롭인. TabFMClassifier(model).fit(X, y).predict(X_test) — 파이썬 데이터 분석가에게 학습 곡선이 거의 0이다.
③ 이중 백엔드 + HF 가중치. 구글 내부 스택인 JAX/Flax 원본과, 커뮤니티가 쓰기 편한 PyTorch 이식본을 모두 제공하고, 가중치는 Hugging Face Hub(google/tabfm-1.0.0-jax, -pytorch)에 올려 자동 다운로드된다.
④ 코드가 곧 교과서. 뒤에서 보겠지만 PyTorch 이식본(model.py, 약 19KB)은 RoPE·RMSNorm·SwiGLU·Set Transformer 같은 최신 트랜스포머 부품이 한 파일에 응축된 훌륭한 학습 자료다.
Python 하나로 통일 · JAX 원본과 PyTorch 이식본의 이중 구조 · Bazel + flit 이중 빌드.
이 저장소는 언어 구성이 단순하다 — Python 98.7%, 나머지는 Bazel 빌드 파일(Starlark) 1.3%다. 하지만 그 안에는 "같은 모델을 두 딥러닝 프레임워크로 구현"하는 흥미로운 이중 구조가 들어 있다. 아래 지도를 보자.
| 영역 | 도구 | 역할 |
|---|---|---|
| 런타임 | Python ≥ 3.11 | flax.nnx가 3.11+를 요구 → 하한선이 높음 |
| 데이터 | numpy · pandas · scipy | 표를 배열/데이터프레임으로 다룸 |
| ML API | scikit-learn 1.6 | estimator 인터페이스(fit/predict) + 전처리·지표 |
| 타입 안전 | jaxtyping <0.3 · typeguard <3 | 배열 shape/dtype을 타입으로 검증(런타임) |
| 가중치 배포 | huggingface-hub | 사전학습 가중치 자동 다운로드 |
| 로깅/유틸 | absl-py | 구글 표준 로깅·플래그 |
| 도구 | 버전 | 역할 |
|---|---|---|
| jax · jaxlib | 0.10.1 | 수치 연산 + JIT 컴파일 + 자동미분 |
| flax (nnx API) | 0.12.7 | 신경망 정의 — 모던 nnx 사용(구 linen 아님) |
| optax | 0.2.8 | 옵티마이저(학습용) |
| orbax-checkpoint | 0.12.0 | 대규모 체크포인트 저장/복원 |
| chex · einops | — | 테스트 유틸 · 텐서 축 재배열 |
| jax[cuda12] | (옵션) | pip install tabfm[cuda] 시 GPU 실행 |
| 도구 | 버전 | 역할 |
|---|---|---|
| torch | 2.12.1 | 추론 전용 포트 — 단 하나의 의존성 |
PyTorch 쪽 의존성이 torch 하나뿐인 게 핵심이다. 학습 스택(optax·orbax…)이 전혀 필요 없다 — 추론만 하기 때문이다. 가중치는 JAX에서 학습된 것을 변환해서 가져온다.
| flit | PyPI 패키징 백엔드(pyproject.toml). __version__을 자동으로 버전에 반영 |
| Bazel | MODULE.bazel·WORKSPACE·BUILD — 구글 내부 표준 빌드. bazel test //...로 전체 테스트 |
| pip-compile | requirements.txt를 핀 고정 락파일로 자동 생성(재현 가능한 환경) |
| pyink · pylint | 구글 스타일 코드 포매터(들여쓰기 2칸, 80열) · 린터 |
| pytest / unittest | 파이썬 unittest과 Bazel 양쪽으로 테스트 실행 가능 |
구글 리서치의 학습 인프라는 JAX/Flax + TPU다. 그래서 실제 사전학습이 일어난 진짜 모델(원본)은 JAX이고, jax/model.py는 89KB로 학습·추론·flash attention 옵션까지 다 들어 있다. 반면 바깥세상의 대다수 실무자는 PyTorch를 쓴다. 그래서 팀은 pytorch/model.py(19KB)라는 추론 전용 이식본을 따로 손으로 짜서, 두 구현이 ~1e-6(float32) 오차 내로 일치하도록 맞췄다. 가중치는 JAX에서 학습 → 변환 스크립트로 PyTorch state_dict로 바꿔 HF에 업로드한다. "한 모델, 두 생태계"를 지원하는 정석적 방법이다.
표를 2차원 격자로 보고, "열 방향 ↔ 행 방향" 어텐션을 번갈아 → 마지막에 인컨텍스트 예측.
TabFM의 forward pass를 이해하는 열쇠는 "표는 2차원이다"라는 관찰이다. 글(LLM)은 토큰의 1차원 시퀀스지만, 표는 행(샘플) × 열(특성)의 격자다. TabFM은 이 두 축 각각에 어텐션을 걸어 번갈아 정보를 섞는다. 전체 흐름은 이렇다.
열 방향에는 Set Transformer를 쓴다. 이유가 중요하다: 표에서 열의 순서는 의미가 없다(나이·소득 순서를 바꿔도 같은 표). 그래서 순서에 불변인(permutation invariant) Set Transformer가 적합하다. 반대로 행 방향엔 RoPE를 쓴 일반 Encoder를 써서 샘플 간 상호작용을 학습한다.
# pytorch/model.py — ISAB 한 눈에 보기
class InducedSelfAttentionBlock(nn.Module):
def forward(self, src, attn_mask=None):
ind = self.ind_vectors.expand(src.shape[0], -1, -1) # 유도점 256개
hidden = self.mab1(ind, src, src, attn_mask=attn_mask) # 원소→요약점 (n→m)
return self.mab2(src, hidden, hidden) # 요약점→원소 (m→n)
어텐션 블록 하나에 요즘 LLM에서 검증된 부품이 알뜰히 박혀 있다.
| 부품 | 무엇 / 왜 |
|---|---|
| RoPE | 회전 위치 인코딩(interleaved). 행 축의 "순서/거리"를 어텐션에 주입 |
| RMSNorm | LayerNorm의 경량판. float32로 계산해 정밀도 확보 |
| SwiGLU | 게이트가 달린 FFN. silu(gate(x)) * lin(x) — 표현력↑ |
| QK-RMSNorm | query·key에 정규화를 걸어 어텐션 안정화 |
| PerDimScale | 차원별 학습 스케일(softplus). 스케일드 닷프로덕트에 scale=1.0으로 흡수 |
숫자값 하나(예: 소득 85000)를 그냥 넣으면 신경망이 크기 차이를 다루기 어렵다. TabFM은 값을 여러 주파수의 sin/cos로 펼치는 Fourier 특징(주파수 32개)으로 바꾼다. 또 feature grouping(오프셋 2^i−1로 이웃 열을 묶기)으로 열 간 상호작용의 단서를 준다. 이 sin/cos 계산은 값이 커지면 오차가 누적되므로 반드시 float32로 돌린다.
PyTorch 이식본의 주석들은 그 자체로 교육적이다. 예컨대 RoPE 주파수(freqs)를 공식으로 다시 계산하지 않고 체크포인트에서 로드하는데, 이유가 적혀 있다 — "train 시 bf16으로 만든 값을 fp32로 재계산하면 ~1e-3 차이가 나고, 시퀀스가 길수록 오차가 커진다." RMSNorm과 Fourier도 float32로 고정한다. 이런 규율 덕에 트랜스포머 수학이 ~1e-6(float32)로 패리티 검증된다. "두 프레임워크에서 같은 결과"를 지키는 실전 노하우가 코드에 박제돼 있다.
큰 표는 어텐션 중간 텐서가 폭발한다. 그래서 곳곳에 청킹(chunking) 옵션(ffn_chunk_size, row_chunk_size, col_chunk_size)과 전용 memory_efficient_attention.py가 있다. 또 데이터셋마다 특성 수가 다르므로, 실제 특성 수 d를 기준으로 패딩된 열을 어텐션에서 제외하는 마스킹이 세심하게 들어간다.
| 파라미터 | 값 | 의미 |
|---|---|---|
| embed_dim | 256 | 기본 임베딩 차원 |
| max_classes | 10 | 분류 시 최대 클래스 수 |
| col (열) | 3블록 · 4헤드 · 유도점 256 | ColEmbedding Set Transformer |
| row (행) | 3블록 · 8헤드 · CLS 8 · RoPE base 1e5 | RowInteraction Encoder |
| icl | 24블록 · 8헤드 | 인컨텍스트 예측기 — 가장 깊음 |
| ff_factor | 4 | FFN 확장 배수 |
| activation | swiglu | FFN 활성화 |
| feature_group_size | 3 | 특성 묶음 크기 |
| fourier freq | 32 | Fourier 주파수 개수 |
| use_bias | false | 선형층 바이어스 제거 |
분류/회귀는 이 설정을 공유하되 y 인코딩·디코더·손실만 바뀐다. 분류는 y를 원-핫→선형(OneHotAndLinear)으로 인코딩하고 max_classes 로짓을 내며 손실은 cross_entropy. 회귀는 스칼라 y를 작은 MLP로 인코딩하고 값 하나를 내며 손실은 rmse다.
"공통 sklearn 래퍼 하나 + JAX/PyTorch 두 백엔드 + HF 변환기"의 3분할.
세 덩어리로 나눠 읽으면 명료하다.
① 공통 진입점 classifier_and_regressor.py(116KB). 가장 큰 파일이자 사용자가 실제로 만나는 지점이다. TabFMClassifier·TabFMRegressor가 여기 있고, scikit-learn 규약대로 fit()이 순서형 인코더(범주→정수)·수치 스케일러를 준비하고, predict()/predict_proba()가 표를 모델이 먹는 텐서로 변환→모델 호출→후처리한다. 큰 표를 나눠 넣고 여러 예측을 합치는 앙상블·청킹 조율도 이 파일 몫이다.
② 두 백엔드 jax/·pytorch/. 구조가 데칼코마니다 — 양쪽 다 model.py(신경망)와 tabfm_v1_0_0.py(설정 + HF 로더)를 갖는다. 다만 JAX 쪽이 89KB로 훨씬 크다(학습 로직·flash attention 선택지 포함). PyTorch 쪽은 19KB로 추론 경로만 담아 담백하다.
③ 변환기 hugging_face/. JAX에서 학습된 Orbax 체크포인트를 PyTorch state_dict로 옮기고 Hub에 올리는 스크립트다. PyTorch model.py의 모듈·파라미터 이름을 JAX와 똑같이 지은 이유가 여기서 드러난다 — 이름이 같아야 변환이 "기계적"으로 된다.
{이름: 텐서} 딕셔너리로 저장하는 표준 방식. Orbax는 JAX 생태계의 체크포인트 라이브러리로, TPU·대규모 분산 학습에 맞춰 설계됐다. TabFM은 학습(JAX/Orbax) → 변환 → 배포(양쪽 포맷 모두 HF에 업로드)라는 파이프라인을 갖는다. 그래서 사용자는 huggingface_hub.snapshot_download로 자기 백엔드에 맞는 가중치를 자동으로 받는다.이 저장소에서 "무엇을 배울 수 있는가" — 개념 → 코드 위치 → 실습 아이디어.
"학습 없이 표를 예측한다"는 패러다임 자체가 최신 연구 주제다. TabFM으로 왜 이게 가능한지(합성 데이터로 사전학습 → 문맥으로 일반화)를 체감하고, 원조 격인 TabPFN 논문으로 이어 가면 개념이 단단해진다.
실습: 같은 데이터셋에서 TabFM(학습 0)과 XGBoost(학습 필요)의 정확도·소요 시간을 나란히 재 보기.
pytorch/model.py(19KB)는 RoPE·RMSNorm·SwiGLU·QK-norm·PerDimScale·SDPA가 응축된 보기 드문 "요약 교과서"다. 거대 LLM 코드는 방대해 엄두가 안 나지만, 여기선 각 부품이 20~40줄짜리 작은 클래스로 나온다.
실습: RMSNorm·RoPE·MultiheadAttention을 한 줄씩 주석 달며 손으로 따라가고, forward에 print(x.shape)를 심어 텐서 모양 변화를 추적.
"열 순서가 바뀌어도 결과가 같아야 한다"는 제약을 어떻게 구조로 보장하는지 배운다. Deep Sets → Set Transformer → 유도점(ISAB)으로 이어지는 흐름은 표·집합·점군(point cloud) 등 여러 도메인에 쓰인다.
실습: 유도점 개수(col_num_inds)를 256→64→512로 바꿔 속도/메모리/정확도 트레이드오프 관찰(개념 재현용 미니 구현으로).
드물게 동일 아키텍처가 두 프레임워크로 병존한다. flax.nnx(모던 JAX API)와 PyTorch의 모듈 정의를 비교하면 두 생태계의 사고방식 차이가 선명하게 보인다.
실습: jax/model.py의 한 블록과 pytorch/model.py의 대응 블록을 나란히 놓고 파라미터 이름이 왜 같은지 확인 → 변환기(torch_convert.py)가 어떻게 이름 매칭으로 동작하는지 추적.
"float32로 정규화", "freqs는 재계산 말고 로드", "bf16 SDPA는 내부 softmax만 fp32" 같은 실전 정밀도 노하우가 주석과 함께 박혀 있다. 두 구현을 1e-6로 맞추는 과정은 그 자체가 훌륭한 사례연구다.
실습: JAX·PyTorch 로더로 같은 입력을 넣고 출력 차이(max abs diff)를 측정 → 어디서 오차가 커지는지 실험.
"모델을 어떻게 친숙한 인터페이스로 포장하는가"를 배운다. fit/predict/predict_proba 규약, 전처리 파이프라인 내장, 그리고 huggingface-hub로 가중치를 자동 다운로드·캐시하는 배포 패턴(ModelHubMixin, snapshot_download)까지.
실습: 최소한의 BaseEstimator 래퍼를 직접 만들어, 내부 텐서 모델을 sklearn Pipeline·cross_val_score에 물려 보기.
학습 인프라가 필요 없다 — 추론만 하므로 노트북 CPU로도 시작 가능.
| 항목 | 요구/권장 |
|---|---|
| Python | ≥ 3.11 (flax.nnx 요구) |
| 백엔드 선택 | pip install -e .[jax] 또는 .[pytorch] — 하나만 있어도 됨 |
| CPU | 작은~중간 표는 CPU로 충분(JAX CPU / torch+cpu). 첫 시작에 권장 |
| GPU | 선택 — pip install tabfm[cuda](CUDA 12). 큰 표·빠른 추론 시 |
| 메모리 | 어텐션이 행²·열²로 커짐 → 큰 표는 *_chunk_size·앙상블로 완화 |
| 인터넷 | 최초 1회 — HF에서 가중치 다운로드(google/tabfm-1.0.0-*) 후 캐시 |
| 디스크 | 가중치 캐시 공간(HF 캐시 디렉토리) |
일반적인 딥러닝 프로젝트는 학습을 위해 GPU와 긴 시간이 든다. TabFM은 사전학습이 이미 끝난 가중치를 내려받아 추론만 하므로, 개인 노트북에서도 작은 표로 바로 실험할 수 있다. 다만 표가 커질수록(수천 행·수백 열) 어텐션 메모리가 부담되니, 그때 GPU와 청킹 옵션을 꺼내면 된다.
기본 설정상 분류는 최대 10클래스(max_classes=10)를 전제로 하고, 매우 크거나 극단적으로 특성이 많은 표에서는 GBDT가 여전히 유리할 수 있다. "작은~중간 표에서 빠르게 강한 베이스라인을 학습 없이 얻는" 도구로 보는 것이 현실적 기대치다. 또한 갓 나온 v1.0.0이라 API·성능이 더 바뀔 수 있다.
난이도별로 손을 움직여 보는 6가지.
PyTorch 백엔드로 설치 후 README의 분류 예제를 그대로 실행한다.
# 설치
git clone https://github.com/google-research/tabfm.git
cd tabfm && pip install -e .[pytorch]
# 실행 (examples/)
python examples/classification_example.py
predict_proba()가 내놓는 클래스별 확률을 관찰하고, 훈련 행을 몇 개 지워 보며 예측이 어떻게 흔들리는지 감을 잡는다("문맥이 곧 학습"임을 체감).
숫자·범주가 섞인 내 데이터(또는 OpenML 데이터)를 TabFMClassifier에 fit/predict하고, 같은 데이터로 XGBoost를 학습해 정확도와 총 소요 시간을 비교한다. "학습 0"의 위력(또는 한계)을 직접 확인.
JAX 로더와 PyTorch 로더로 동일한 입력을 넣고 출력 로짓의 max|Δ|를 잰다. README의 백엔드 전환 주석(OPTION A/B)을 활용. 이론상 ~1e-6인지 눈으로 확인하고, dtype을 bf16↔fp32로 바꿔 오차가 어떻게 변하는지 실험.
pytorch/model.py를 위에서 아래로 읽으며 RMSNorm → RoPE → MultiheadAttention → MAB → ISAB → SetTransformer → Encoder → CellEmbedder → ICLearning → TabFM 순으로 각 클래스의 입력/출력 텐서 모양을 표로 정리한다. forward에 shape 프린트를 심어 실제와 대조.
행·열을 점점 키우며 어텐션 메모리가 어떻게 폭증하는지 측정하고, row_chunk_size·col_chunk_size·ffn_chunk_size를 설정해 피크 메모리 vs 속도 곡선을 그린다. 청킹이 결과값은 바꾸지 않고 메모리만 줄이는지 검증.
순수 PyTorch로 ISAB 블록을 60줄 안에 재구현하고, 유도점 수 m을 바꿔 가며 O(n²) 풀 어텐션과 속도·근사 품질을 비교한다. "왜 표에 순열 불변 구조가 필요한가"를 토이 데이터로 실증.
표 ML 기초에서 시작해 "미니 표 ICL 모델"까지 8주.
| 주차 | 주제 | 핵심 질문 / 산출물 |
|---|---|---|
| 1주 | 표 데이터 ML 기초 | scikit-learn·XGBoost·LightGBM 훑기. "왜 표는 오랫동안 딥러닝이 약했나?" |
| 2주 | Transformer & Attention | self-attention·multi-head 직접 구현. Q·K·V가 뭔지 손으로 |
| 3주 | 인컨텍스트 러닝 & TabPFN | TabPFN 논문 정독. "학습 없이 예측"의 메커니즘 이해 |
| 4주 | Set Transformer / ISAB | Deep Sets → 순열 불변성 → 유도점. 왜 열에 쓰는가 |
| 5주 | 모던 LLM 부품 | RoPE·RMSNorm·SwiGLU·Flash Attention 논문+구현 |
| 6주 | JAX/Flax nnx 입문 | PyTorch와 대조하며 같은 MLP를 양쪽으로 |
| 7주 | 가중치 관리·재현성 | Orbax·HF Hub·정밀도(bf16/fp32)·패리티 검증 |
| 8주 | 종합 프로젝트 | 작은 표에 대한 미니 ICL 예측기를 스스로 조립 |
이 로드맵의 3주(TabPFN)와 4주(Set Transformer)가 심장이다. 이 둘을 이해하면 TabFM의 "왜"가 대부분 풀린다. 5주 부품들은 "어떻게"에 해당하니, 코드를 읽다 막힐 때마다 해당 부품 논문으로 잠깐 다녀오는 필요 기반 학습을 추천한다. 전부 선행 학습하려 들면 지친다.
문서에 등장한 용어를 한 곳에.
| 키워드 | 한 줄 뜻 |
|---|---|
| Tabular data | 행(샘플)×열(특성)로 된 표 형식 데이터. 산업 ML의 다수 |
| Foundation Model | 크게 사전학습해 여러 과제에 재사용하는 범용 모델 |
| In-Context Learning | 가중치를 안 바꾸고 입력에 예시를 넣어 과제 수행 |
| Zero-shot | 대상 데이터로 재학습 없이 바로 예측 |
| TabPFN | "트랜스포머로 표를 ICL"의 원조 격 연구. TabFM의 계보 |
| GBDT | 그래디언트 부스팅 결정트리(XGBoost·LightGBM). 표 ML의 전통 강자 |
| Set Transformer | 집합(순서 무관) 입력용 트랜스포머. 열 축에 사용 |
| ISAB / 유도점 | 학습되는 요약점 m개로 어텐션 비용 O(n²)→O(n·m) |
| Permutation invariance | 입력 순서를 바꿔도 출력 동일 — 열 순서 무관성 보장 |
| RoPE | 회전 위치 인코딩. 행 축의 위치/거리를 주입 |
| RMSNorm | 경량 정규화층. 여기선 float32로 계산해 정밀도 확보 |
| SwiGLU | 게이트 달린 FFN 활성화. 표현력↑ |
| QK-norm / PerDimScale | 어텐션 안정화용 정규화·차원별 스케일(softplus) |
| Fourier features | 숫자값을 여러 주파수 sin/cos로 펼쳐 인코딩 |
| SDPA | Scaled Dot-Product Attention(PyTorch 내장, flash 백엔드 활용) |
| JAX / Flax nnx | 구글의 수치연산+신경망 프레임워크. 학습 원본 |
| Orbax | JAX 생태계의 대규모 체크포인트 라이브러리 |
| Hugging Face Hub | 사전학습 가중치를 올리고 자동 다운로드하는 허브 |
| state_dict | PyTorch의 {이름:텐서} 가중치 저장 표준 |
| Bazel / flit | 구글식 빌드 시스템 / 파이썬 PyPI 패키징 백엔드 |
원본과 배경 지식.
· GitHub: github.com/google-research/tabfm (Apache-2.0, v1.0.0 · 2026-06-29)
· 가중치(JAX): huggingface.co/google/tabfm-1.0.0-jax
· 가중치(PyTorch): huggingface.co/google/tabfm-1.0.0-pytorch
· 예제: examples/classification_example.py · examples/regression_example.py
· TabPFN — "A Transformer That Solves Small Tabular Classification Problems in a Second"(ICLR 2023) / 후속 Nature 2025
· Set Transformer — Lee et al., 2019 (ISAB·유도점)
· Deep Sets — Zaheer et al., 2017 (순열 불변성)
· RoPE — RoFormer(Su et al.) · RMSNorm(Zhang & Sennrich) · SwiGLU(Shazeer, "GLU Variants")
· Flax nnx 문서(모던 JAX 신경망 API) · Orbax 체크포인트 · Hugging Face Hub(ModelHubMixin)
· scikit-learn "Developing scikit-learn estimators"(BaseEstimator 규약)