목차
핵심 한 줄 정리
Generative model은 data를 만든 probability distribution을 학습하는 model이며, autoregressive model은 chain rule로 exact likelihood를 계산하고 VAE는 latent variable과 ELBO를 도입해 tractable한 lower bound로 학습한다.
반드시 기억할 개념
Supervised learning과 unsupervised learning
Supervised learning에서는 input과 target의 pair가 주어진다.
목표는 training set에서 관찰한 mapping을 학습하고 새로운 input에도 일반화하는 것이다. Image classification, captioning, object detection, semantic segmentation이 이에 해당한다.
Unsupervised learning에서는 label 없이 sample 만 주어진다.
이때는 data의 cluster, low-dimensional structure, representation, probability density처럼 직접 관찰되지 않은 structure를 찾는다. K-means clustering, PCA, density estimation이 대표적인 예이다.
Supervised와 unsupervised는 label을 사용하는지에 관한 구분이다. Discriminative와 generative는 어떤 probability distribution을 modeling하는지에 관한 구분이다. 두 기준은 서로 다른 축이므로 같은 의미로 섞어 쓰면 안 된다.
Probability distribution의 normalization
Continuous variable 의 probability density 는 다음 조건을 만족한다.
Discrete variable이라면 integral 대신 모든 값에 대한 sum이 1이다.
전체 probability mass는 1로 고정되어 있다. 어떤 영역의 probability를 높이면 다른 영역에 배분할 mass는 줄어든다. 결국 probabilistic modeling은 어떤 값들이 서로 probability mass를 놓고 경쟁하는지를 정하는 문제이기도 하다.
Discriminative model
Discriminative model은 input 가 주어졌을 때 target 의 conditional distribution을 학습한다.
Image classification에서는 각 image마다 class label들이 probability mass를 놓고 경쟁한다.
Image가 바뀌면 별개의 class distribution이 만들어진다. 서로 다른 image끼리는 probability mass를 경쟁하지 않는다.
Label space가 cat과 dog뿐이라면 input이 monkey나 abstract art여도 model은 cat과 dog의 probability를 합해 1로 만들어야 한다. Standard discriminative classifier는 input 자체가 training distribution 밖이라는 사실을 표현하기 어렵다. 높은 softmax probability가 곧 input이 in-distribution임을 의미하지는 않는다.
Unconditional generative model
Unconditional generative model은 data 자체의 distribution을 학습한다.
Image model이라면 가능한 모든 image 가 같은 probability mass를 놓고 경쟁한다. Training data와 비슷한 plausible image에는 높은 density를, data distribution에서 벗어난 image에는 낮은 density를 부여해야 한다.
예를 들어 zoo animal image를 modeling한다면 일반적인 animal image에는 상대적으로 높은 density가 필요하고, abstract art에는 낮은 density가 필요하다. 세 다리인 dog와 세 팔인 monkey처럼 둘 다 드문 image라도 실제 세계에서 어느 쪽이 더 plausible한지 반영하려면 object와 world structure를 폭넓게 학습해야 한다.
Unconditional model로 할 수 있는 일은 다음과 같다.
- 새로운 sample 를 생성한다.
- Input의 density를 이용해 outlier를 탐지한다.
- Label 없이 data structure와 representation을 학습한다.
다만 sampling 결과를 직접 제어할 conditioning signal이 없으므로 실제 생성 application에서는 conditional model이 더 유용한 경우가 많다.
Conditional generative model
Conditional generative model은 condition 가 주어졌을 때 가능한 output 의 distribution을 학습한다.
는 category label, text prompt, 다른 image, audio, video frame처럼 다양한 정보가 될 수 있다. 각 condition마다 모든 output 가 probability mass를 놓고 경쟁한다.
Text prompt가 person teaching a class on generative models in front of a whiteboard라면 이를 만족하는 image는 하나가 아니다. 사람의 모습, 교실, camera angle, 조명 등이 다른 수많은 image가 가능하다. Conditional generative model은 하나의 deterministic answer가 아니라 가능한 output 전체의 distribution을 나타낸다.
이 관점은 여러 task에 그대로 적용된다.
- Text-to-text는 prompt에 맞는 여러 문장이나 poem 중 하나를 생성한다.
- Text-to-image는 같은 description을 만족하는 여러 image를 생성한다.
- Image-to-video는 한 image 뒤에 이어질 여러 plausible future를 생성한다.
Output에 ambiguity가 존재하고 그 다양성을 보존해야 할 때 generative model이 필요하다. 반대로 정답이 사실상 하나인 task라면 deterministic discriminative model로 충분할 수 있다.
세 probability model의 관계
Discriminative model, unconditional generative model, conditional generative model은 Bayes’ rule로 연결된다.
이론적으로 , , 를 알면 를 얻을 수 있다. 반대로 식을 재배열하면 다른 conditional distribution도 계산할 수 있다.
실제로는 여러 model을 조합해 매번 Bayes’ rule을 계산하기보다 원하는 conditional distribution을 neural network로 직접 학습하는 경우가 많다. 다만 diffusion model의 classifier guidance나 classifier-free guidance처럼 conditional과 unconditional signal을 함께 사용하는 방법도 있다.
Generative model의 taxonomy
Generative model은 density를 직접 계산할 수 있는지, sample을 어떤 방식으로 만드는지에 따라 나눌 수 있다.
| 계열 | Density 평가 | Sampling | 대표 방법 |
|---|---|---|---|
| Explicit, exact density | Exact 계산 가능 | 대개 순차적이거나 구조에 의존 | Autoregressive model |
| Explicit, approximate density | 의 bound 또는 approximation 계산 | Latent에서 직접 생성 가능 | VAE |
| Implicit, direct sampling | 계산 불가 | 한 번의 generator forward | GAN |
| Implicit, iterative sampling | 를 직접 사용하지 않거나 계산이 복잡함 | 여러 refinement step 필요 | Diffusion model |
Explicit density model은 주어진 sample의 likelihood를 평가할 수 있다는 장점이 있다. 그러나 exact density를 쉽게 계산하는 구조가 sampling 속도나 model architecture를 제한할 수 있다.
Implicit model은 density 값보다 realistic sample 생성에 집중한다. GAN은 latent sample을 generator에 한 번 통과시켜 output을 만들고, diffusion model은 noise에서 시작해 여러 denoising step을 반복한다.
이 분류는 각 방법의 핵심 차이를 보는 틀이다. 실제 model은 conditional generation을 추가하거나 latent token을 사용하는 등 여러 계열의 아이디어를 결합할 수 있다.
%% title: Generative Model Taxonomy
%% caption: Density를 얼마나 직접 다룰 수 있는지와 sample을 한 번에 만드는지 반복적으로 만드는지에 따라 대표 계열이 나뉩다.
flowchart TB
gm["Generative Models"]
gm --> explicit["Explicit Density"]
gm --> implicit["Implicit / Sample-Based"]
explicit --> exact["Exact Likelihood<br/>Autoregressive"]
explicit --> approx["Approximate Likelihood<br/>VAE / ELBO"]
implicit --> direct["Direct Sampling<br/>GAN"]
implicit --> iterative["Iterative Sampling<br/>Diffusion / Flow"]
exact --> trade1["likelihood 정확<br/>sampling 순차적"]
approx --> trade2["latent sampling<br/>bound로 학습"]
direct --> trade3["sampling 빠름<br/>density 없음"]
iterative --> trade4["training 안정적<br/>sampling 반복"]
Maximum likelihood estimation
관찰한 data는 알 수 없는 true distribution 에서 독립적으로 sampling되었다고 가정한다.
Model distribution을 라고 하자. Parameter 를 바꾸어 fixed training samples가 가장 높은 density를 갖도록 만드는 것이 maximum likelihood estimation, MLE이다.
Sample이 independent하다는 가정을 사용하면 joint likelihood를 곱으로 분해할 수 있다.
Likelihood와 probability는 식의 모양은 같아도 무엇을 고정하고 변화시키는지가 다르다.
- Probability는 distribution parameter 를 고정하고 에 따라 값이 어떻게 달라지는지 본다.
- Likelihood는 관찰한 를 고정하고 에 따라 값이 어떻게 달라지는지 본다.
Log-likelihood와 negative log-likelihood
Probability의 곱은 매우 작은 수가 되어 underflow가 발생하기 쉽다. Log는 monotonic function이므로 likelihood를 최대화하는 parameter와 log-likelihood를 최대화하는 parameter가 같다.
Optimization에서는 loss를 최소화하는 convention을 사용하므로 negative log-likelihood, NLL을 사용한다.
Dataset 크기에 관계없이 loss scale을 유지하려면 평균을 사용할 수 있다.
Categorical distribution에서 NLL은 cross entropy와 같은 형태가 된다. 따라서 language model의 next-token cross entropy도 autoregressive generative model의 maximum likelihood objective이다.
Autoregressive factorization
하나의 data sample 를 순서가 있는 개 component로 나눌 수 있다고 하자.
여기서 subscript 는 한 sample 안의 component 위치이고, superscript 는 dataset의 서로 다른 sample을 나타낸다.
Probability chain rule을 사용하면 joint distribution을 conditional distribution의 곱으로 정확하게 분해할 수 있다.
는 을 뜻한다. Log-likelihood는 다음과 같이 각 step의 합이 된다.
이 factorization에는 independence assumption이 추가되지 않는다. 모든 joint distribution에 성립하는 chain rule이다. Model이 해야 할 일은 전체 sequence의 모든 조합을 한 번에 modeling하는 대신, prefix가 주어졌을 때 next component의 distribution을 예측하는 것이다.
Vocabulary size가 인 길이 의 discrete sequence는 가능한 조합이 다음만큼 존재한다.
Autoregressive factorization은 개 joint outcome을 table로 직접 저장하지 않고 매 step 개 category에 대한 conditional distribution을 예측하게 한다.
%% title: Autoregressive Factorization의 Training과 Sampling
%% caption: Training에서는 causal mask로 모든 next-token loss를 병렬 계산할 수 있지만, sampling은 새 token을 이전 prefix에 붙여 순차적으로 반복해야 한다.
flowchart TB
sequence["Sequence x₁, x₂, …, xᵀ"] --> factor["p(x) = Π p(xₜ | x<ₜ)"]
factor --> train["Training<br/>ground-truth sequence + causal mask"]
train --> parallel["All Position Losses<br/>parallel computation"]
factor --> sample["Sampling"]
sample --> t1["sample x₁"]
t1 --> t2["sample x₂ | x₁"]
t2 --> t3["sample x₃ | x₁,x₂"]
t3 --> more["… repeat until xᵀ"]
RNN과 causal Transformer
RNN hidden state 는 prefix 의 정보를 요약한다.
Hidden state에서 다음 token의 distribution을 예측할 수 있다.
Causal Transformer는 attention mask로 position 가 future token을 보지 못하게 한다.
Training에서는 ground-truth sequence 전체를 한 번에 넣고 모든 position의 next-token loss를 parallel하게 계산할 수 있다. 각 output은 causal mask 때문에 prefix에만 의존한다.
Sampling에서는 아직 생성하지 않은 future token을 input으로 사용할 수 없다. 첫 token부터 하나씩 sampling하고 다시 model에 넣어 다음 token을 생성해야 하므로 sequence length 방향으로 순차적이다.
Autoregressive model의 exact likelihood
주어진 complete sequence 를 model에 넣으면 각 position에서 실제 next token에 부여한 probability를 얻는다. 이를 모두 곱하면 sample의 exact model likelihood가 된다.
실제 구현에서는 probability를 직접 곱하지 않고 log space에서 더한다.
Autoregressive model이 explicit exact-density model로 분류되는 이유이다. Model architecture와 parameter가 정해지면 임의의 sequence에 대한 normalized likelihood를 계산할 수 있다.
Image를 autoregressive sequence로 만들기
Text는 token의 1D sequence이고 각 token이 discrete vocabulary에 속하므로 autoregressive modeling과 자연스럽게 맞는다. Image는 2D이고 pixel intensity를 continuous value로 볼 수 있어 순서를 정하고 output distribution을 선택해야 한다.
8-bit RGB image는 각 channel 값이 부터 까지의 integer이다. Raster scan 순서로 pixel과 channel을 펼치면 discrete sequence로 바꿀 수 있다.
RGB image를 channel 단위로 펼치면 sequence length는 다음과 같다.
각 position에서 256-way softmax로 다음 channel 값을 예측할 수 있다. PixelRNN이나 PixelCNN 계열은 이 원리를 image에 적용한다.
문제는 sequence가 지나치게 길어진다는 점이다. Training computation이 크고 sampling은 수백만 step을 순차적으로 실행해야 한다. 또한 raster order는 image의 2D structure를 자연스럽게 반영하는 유일한 순서가 아니다.
최근에는 raw pixel보다 압축된 latent token이나 discrete visual token을 autoregressive하게 modeling한다. Sequence가 짧아지고 high-level structure를 token 단위로 다룰 수 있지만, image를 token으로 바꾸는 별도의 encoder나 tokenizer가 필요하다.
Autoregressive model의 장단점
장점은 다음과 같다.
- Probability chain rule에 기반해 exact normalized likelihood를 계산한다.
- NLL이라는 명확하고 안정적인 objective로 학습한다.
- RNN과 causal Transformer를 그대로 사용할 수 있다.
- Text처럼 순서와 discrete vocabulary가 자연스러운 data에 잘 맞는다.
한계는 다음과 같다.
- Sampling이 sequence length에 대해 순차적이다.
- Image처럼 순서가 명확하지 않은 data에는 ordering을 인위적으로 정해야 한다.
- Raw pixel sequence는 너무 길어 고해상도 생성 비용이 크다.
- Likelihood가 높다는 것과 사람이 느끼는 perceptual quality가 항상 일치하지는 않는다.
Deterministic autoencoder
Autoencoder는 encoder가 input 를 latent code 로 압축하고 decoder가 이를 다시 reconstruction 로 복원한다.
대표적인 reconstruction objective는 L2 loss이다.
Encoder와 decoder의 capacity가 충분하고 가 크면 identity function을 그대로 학습할 수 있다. 유용한 structure를 학습하게 하려면 bottleneck이나 noise 같은 constraint가 필요하다.
예를 들어 RGB image는 약 300만 개 channel 값을 가지지만 를 128-dimensional vector로 제한할 수 있다. Model은 모든 pixel을 그대로 전달할 수 없으므로 reconstruction에 중요한 information을 latent code에 압축해야 한다.
Representation learning에는 encoder와 를 사용할 수 있다. 그러나 deterministic autoencoder만으로 generation을 하기는 어렵다. Training sample이 latent space 어디에 mapping되는지는 알 수 있지만, valid sample을 만드는 새로운 를 어떤 distribution에서 뽑아야 하는지는 정의되지 않기 때문이다.
VAE의 latent-variable model
Variational Autoencoder, VAE는 latent code에 known probability distribution을 부여한다. Generative process는 먼저 prior에서 latent 를 뽑고, decoder distribution에서 data 를 뽑는 과정이다.
가장 흔한 prior는 standard Gaussian이다.
Joint distribution은 다음과 같다.
Training data에서는 만 관찰할 수 있고 이를 생성한 는 관찰할 수 없다. 는 latent variable이다.
Marginal likelihood가 어려운 이유
Maximum likelihood로 decoder 를 학습하려면 latent variable을 모두 marginalize해야 한다.
Decoder가 neural network이면 는 에 대한 복잡한 nonlinear function이다. High-dimensional latent space 전체를 정확히 적분하는 것은 일반적으로 불가능하다.
Bayes’ rule로 true posterior를 쓰면 다음과 같다.
분모의 가 바로 계산하기 어려운 marginal likelihood이므로 true posterior도 tractable하지 않다.
Approximate posterior와 encoder
VAE는 true posterior 를 직접 계산하는 대신 encoder network로 approximate posterior를 학습한다.
Encoder는 latent vector 하나를 직접 출력하지 않고 Gaussian distribution의 parameter를 출력한다.
차원 latent라면 encoder는 차원의 mean vector와 차원의 variance 또는 log-variance vector를 출력한다. Full covariance는 개 값을 필요로 하므로 diagonal covariance를 사용한다.
Variance는 항상 양수여야 한다. 실제 구현에서는 unconstrained 를 출력하고 exponentiation해 variance를 얻는 방식이 흔하다.
Decoder likelihood와 reconstruction loss
Continuous image를 modeling하는 단순한 VAE에서는 decoder likelihood를 fixed variance를 가진 diagonal Gaussian으로 둘 수 있다.
Decoder network는 mean image 를 출력하고 는 constant로 둔다. 이 Gaussian의 negative log-likelihood는 constant를 제외하면 squared error와 같다.
따라서 fixed-variance Gaussian likelihood를 최대화하는 것은 L2 reconstruction error를 최소화하는 것과 같다. Pixel별 independent Gaussian은 multimodal한 image detail을 평균내기 때문에 reconstruction과 sample이 흐릿해질 수 있다.
Evidence Lower Bound
VAE는 직접 계산하기 어려운 대신 Evidence Lower Bound, ELBO를 최대화한다.
KL divergence는 항상 0 이상이므로 ELBO는 log-likelihood의 lower bound이다.
ELBO는 다음 두 term으로 이루어진다.
첫 번째 term은 sampled latent 에서 original 를 높은 likelihood로 복원하게 한다. 두 번째 term은 encoder가 예측한 latent distribution을 chosen prior 에 가깝게 만든다.
Loss를 최소화하는 형태로 쓰면 부호가 바뀐다.
즉 VAE loss는 reconstruction loss와 latent prior regularization의 합이다.
Gaussian KL divergence
Approximate posterior가 diagonal Gaussian이고 prior가 이면 KL term을 sampling 없이 정확히 계산할 수 있다.
이 term은 mean을 0에 가깝게, variance를 1에 가깝게 유도한다. 모든 sample의 posterior가 prior와 완전히 같아져야 한다는 뜻은 아니며, reconstruction objective와 균형을 이루며 latent space를 regularize한다.
Reparameterization trick
Encoder distribution에서 직접 sampling하는 operation은 일반적인 deterministic computation graph처럼 미분할 수 없다.
Sampling noise를 parameter와 분리하면 다음과 같이 다시 쓸 수 있다.
Randomness는 에만 있고, 는 와 에 대한 differentiable function이 된다. 따라서 decoder의 reconstruction gradient가 를 거쳐 encoder의 mean과 variance parameter까지 전달된다.
VAE training 과정
한 minibatch의 training 과정은 다음과 같다.
- Encoder에 를 넣어 와 를 계산한다.
- 를 sampling한다.
- 으로 latent sample을 만든다.
- Decoder가 의 parameter를 출력한다.
- Reconstruction negative log-likelihood를 계산한다.
- 와 사이의 KL divergence를 계산한다.
- 두 loss의 합을 encoder와 decoder 전체로 backpropagation한다.
Expectation은 보통 training sample마다 하나 또는 소수의 sample로 Monte Carlo approximation한다. Reparameterization 덕분에 이 stochastic estimate로도 end-to-end gradient를 계산할 수 있다.
%% title: VAE의 End-to-End Training 경로
%% caption: Encoder가 approximate posterior의 μ와 σ를 만들고, reparameterization으로 latent z를 sample한 뒤 decoder가 x를 복원한다. Reconstruction NLL과 prior KL을 함께 최소화한다.
flowchart LR
x["Input x"] --> encoder["Encoder qφ(z|x)"]
encoder --> mu["μφ(x)"]
encoder --> sigma["σφ(x)"]
eps["ε ~ N(0,I)"] --> reparam["z = μ + σ ⊙ ε"]
mu --> reparam
sigma --> reparam
reparam --> decoder["Decoder pθ(x|z)"]
decoder --> recon["Reconstruction NLL"]
x --> recon
mu --> kl["KL(qφ(z|x) || N(0,I))"]
sigma --> kl
recon --> elbo["Negative ELBO"]
kl --> elbo
elbo -. "backpropagation" .-> encoder
elbo -. "backpropagation" .-> decoder
Reconstruction과 prior의 trade-off
VAE의 두 objective는 latent space에 서로 다른 요구를 한다.
Reconstruction term은 각 input을 정확히 구분하려 한다. 이를 위해 각 의 mean은 서로 멀리 떨어지고 variance는 0에 가까워지는 편이 유리하다.
KL term은 모든 approximate posterior가 standard Gaussian prior에 가까워지도록 한다.
Reconstruction만 사용하면 training sample은 잘 복원해도 latent space 사이에 빈 영역이 생겨 prior sampling이 실패할 수 있다. KL만 지나치게 강하면 encoder가 input 정보를 무시하고 항상 prior와 비슷한 posterior를 내는 posterior collapse가 생길 수 있다.
VAE는 두 term 사이의 균형을 통해 reconstruction이 가능하면서 prior에서 sampling할 수 있는 smooth latent space를 학습한다.
VAE sampling과 latent interpolation
Training 이후 새 sample을 만들 때는 encoder가 필요하지 않다.
실제 image output으로는 decoder likelihood의 mean 를 사용하는 경우가 많다.
Prior regularization으로 latent space가 연속적이므로 두 latent code 사이를 interpolation하면 output도 비교적 부드럽게 변한다.
Handwritten digit VAE에서 latent dimension을 움직이면 한 digit이 다른 digit으로 부드럽게 변하는 모습을 볼 수 있다.
Diagonal Gaussian assumption은 안에서 latent component의 conditional covariance를 0으로 제한한다. 그러나 각 dimension이 반드시 독립적인 semantic factor를 표현하거나 disentanglement가 자동으로 보장되는 것은 아니다.
%% title: VAE의 생성과 Latent Interpolation
%% caption: 새 sample을 만들 때는 encoder를 사용하지 않고 prior에서 z를 뽑아 decoder에 넣는다. 두 latent 사이를 이동하면 decoder output의 연속적인 변화를 볼 수 있다.
flowchart LR
prior["Prior<br/>z ~ N(0,I)"] --> decoder["VAE Decoder<br/>pθ(x|z)"]
decoder --> sample["Generated Sample x"]
za["Latent z_a"] --> interp["z(α) = (1-α)z_a + αz_b"]
zb["Latent z_b"] --> interp
interp --> shared["Same Decoder"]
shared --> path["Smooth Output Path<br/>x(0) … x(1)"]
Autoregressive model과 VAE 비교
| 항목 | Autoregressive model | VAE |
|---|---|---|
| Density | Exact normalized likelihood | ELBO로 log-likelihood를 lower-bound |
| Structure | Sequence factorization | Latent-variable model |
| Training | Next-token NLL | Reconstruction NLL + KL |
| Sampling | Token을 순서대로 생성 | Prior 를 뽑아 decoder forward |
| Latent representation | 명시적인 global latent가 필수는 아님 | Encoder가 제공 |
| 장점 | Stable MLE, exact likelihood | Smooth latent space, fast generation |
| 한계 | Sequential sampling | Approximate likelihood, blurry output 가능 |
Autoregressive model은 exact density를 위해 sequence ordering과 sequential sampling을 받아들인다. VAE는 exact likelihood를 포기하고 tractable lower bound를 사용하지만, inference와 generation에 유용한 latent representation을 얻는다.
과제에서 확인할 것
Autoregressive objective
- Input과 target sequence가 한 position만큼 shift되어 있는지 확인한다.
- Causal mask 때문에 position 가 future token을 참조하지 않는지 확인한다.
- Padding token이 NLL 평균에 포함되지 않도록 mask하는지 확인한다.
- Probability를 직접 곱하지 않고 log-probability를 합산하는지 확인한다.
- Training은 position 방향으로 병렬화할 수 있지만 sampling은 순차적이라는 차이를 확인한다.
VAE parameterization
- Encoder가 latent vector 자체가 아니라 와 를 출력하는지 확인한다.
- Standard deviation을 계산할 때 를 사용하는지 확인한다.
- Reparameterization이 형태인지 확인한다.
- KL divergence를 batch와 latent dimension 중 어느 축으로 sum 또는 mean하는지 확인한다.
- Reconstruction term과 KL term의 reduction 방식이 달라 loss scale이 의도치 않게 치우치지 않는지 확인한다.
VAE loss 해석
- Reconstruction term의 부호가 negative log-likelihood에 맞는지 확인한다.
- ELBO를 maximize하는 식과 negative ELBO를 minimize하는 식을 구분한다.
- Gaussian decoder에서 fixed variance NLL이 L2 loss와 같아지는 이유를 확인한다.
- KL term이 mean을 0, variance를 1로 유도하는지 closed-form 식으로 확인한다.
- KL이 지나치게 작아지는 posterior collapse와 지나치게 큰 reconstruction error를 함께 관찰한다.
Generation
- Reconstruction에서는 를 사용하고, 새 sample 생성에서는 를 사용한다.
- Deterministic autoencoder의 임의 latent와 VAE prior에서 뽑은 latent가 다른 의미임을 확인한다.
- Latent interpolation이 data manifold를 따라 부드럽게 변하는지 시각화한다.
- Likelihood, reconstruction quality, sample quality가 서로 같은 metric이 아님을 구분한다.