# 과적합 회피를 위한 규제화(Regularization)

#### 과적합(Overfitting)의 문제

최소제곱법을 이용하여 곡선을 근사할 때, 데이터의 오차를 최소화하는 것만 집중하다 보면 매개변수(또는 계수)가 지나치게 복잡해지는 현상이 나타난다. 이를 과적합이라고 한다. 과적합이 일어나면 모델은 학습 데이터에 대한 오차는 현저히 작아지지만, 새롭게 주어지는 데이터(테스트 데이터)에 대한 예측 성능은 떨어질 수 있다. 즉, 모델이 학습 데이터의 잡음까지도 모델링하려 하여 일반화 능력이 떨어지는 상태다.

최소제곱법으로 계수를 구할 때 $\mathbf{A}$를 설계행렬(design matrix), $\mathbf{x}$를 계수 벡터, $\mathbf{b}$를 관측된 반응 벡터라고 하면, 보통 다음과 같은 형태로 최적화 문제를 정의한다.

$$
\begin{align} \min\_{\mathbf{x}} \ | \mathbf{A}\mathbf{x} - \mathbf{b} |\_2^2 \end{align}
$$

여기서 $| \cdot |\_2$는 유클리드 노름이며, $\mathbf{A}\mathbf{x} - \mathbf{b}$는 예측값과 실제 관측값의 차이를 나타낸다. 데이터가 충분히 많고, 모델이 복잡하지 않다면 위와 같은 문제만으로도 적절한 해를 구하기 쉽다. 그러나 입력 차원이 크거나, 모델이 복잡하거나, 학습에 사용하는 표본 개수가 제한적인 경우에는 과적합을 방지하기 위한 추가적인 조치가 필요해진다.

#### 규제화의 기본 개념

규제화(regularization)는 모델이 가지고 있는 자유도를 의도적으로 제한하여, 과적합을 줄이고 일반화 성능을 향상하려는 기법이다. 최소제곱 문제에서 규제화는 목표함수에 추가적인 제약(패널티 항)을 부과함으로써 계수가 지나치게 복잡해지는 것을 억제한다.

규제화의 핵심은 "해를 구할 때 단지 오차 항만 최소화하는 것이 아니라, 해 자체가 지나치게 큰 값을 갖거나 불필요하게 복잡해지지 않도록 제어하는 패널티 항을 추가한다"는 것이다. 예를 들어, 계수 벡터 $\mathbf{x}$의 크기(노름)에 대한 페널티를 두어, 계수들이 과도하게 커지는 현상을 방지한다. 이렇게 하면 모델이 과하게 학습되지 않도록 억제하여 미래의 새로운 데이터에 대해서도 보다 안정적인 예측을 기대할 수 있다.

모델 복잡도를 제어하는 전형적인 방식으로 $L\_2$-노름(유클리드 노름)이나 $L\_1$-노름(절댓값 노름)을 사용한다. $L\_2$-노름 규제화는 Ridge(티호노프) 규제화라고도 하며, $L\_1$-노름 규제화는 Lasso라고도 한다. 실제로는 $L\_1$과 $L\_2$를 함께 섞은 형태의 Elastic net 기법도 자주 사용된다.

#### Ridge(티호노프) 규제화

티호노프 규제화(Tikhonov regularization) 또는 Ridge 회귀(Ridge regression)는 다음과 같은 형태로 최적화 문제를 다시 정의한다.

$$
\begin{align} \min\_{\mathbf{x}} \ \left{ \ | \mathbf{A}\mathbf{x} - \mathbf{b} |\_2^2 \ + \ \lambda \ |\mathbf{x}|\_2^2 \ \right} \end{align}
$$

여기서 $\lambda$는 규제화의 강도를 조절하는 하이퍼파라미터다. $|\mathbf{x}|\_2^2 = \sum\_j x\_j^2$이므로, $\mathbf{x}$의 각 성분이 크게 증가하는 해를 억제한다. $\lambda$가 커질수록 페널티 항의 상대적 비중이 커져서 계수 벡터가 더 작아지며, 모델 복잡도도 낮아진다. $\lambda$가 너무 크면 모델이 과도하게 단순해져서 과소적합(underfitting) 문제를 일으킬 수 있다. 적절한 $\lambda$를 찾는 것은 실전에서 매우 중요하며, 교차검증(cross-validation) 등을 통해 정한다.

티호노프 규제화는 해를 구하는 선형대수적 관점에서도 직관적 해석을 갖는다. 규제 항이 없는 최소제곱법의 해는 $(\mathbf{A}^T \mathbf{A})^{-1} \mathbf{A}^T \mathbf{b}$이지만, 규제화 항을 추가하면 다음과 같은 수정된 방정식을 풀게 된다.

$$
\begin{align} (\mathbf{A}^T\mathbf{A} + \lambda \mathbf{I}) \mathbf{x} = \mathbf{A}^T \mathbf{b} \end{align}
$$

$\mathbf{I}$는 단위행렬이다. $\lambda \mathbf{I}$가 더해진 만큼 $\mathbf{A}^T\mathbf{A}$의 스펙트럼이 넓어져 역행렬이 안정적으로 존재하기 쉬워진다. 즉, $\mathbf{A}^T\mathbf{A}$가 (거의) 특이행렬(singular)이거나, 일반적인 역행렬이 잘 정의되지 않는 상황에서도 적절한 해를 찾을 수 있게 된다. 이 점 때문에 티호노프 규제화는 역문제를 풀 때도 자주 사용된다.

#### Lasso 규제화

Lasso 규제화는 $L\_1$-노름을 사용하는 방법으로 다음과 같은 형태다.

$$
\begin{align} \min\_{\mathbf{x}} \ \left{ \ | \mathbf{A}\mathbf{x} - \mathbf{b} |\_2^2 \ + \ \lambda \ |\mathbf{x}|\_1 \ \right} \end{align}
$$

여기서 $|\mathbf{x}|\_1 = \sum\_j |x\_j|$이다. $L\_1$-노름 규제화의 중요한 특징 중 하나는 계수의 희소성(sparsity)을 유도한다는 것이다. 즉, 적절한 $\lambda$를 설정하면 일부 계수들($x\_j$)이 정확히 0이 되는 해가 나온다. 이는 불필요한 변수(특성)를 자동으로 제거하는 효과가 있어, 고차원 데이터에서 변수 선택(variable selection) 문제를 해결할 때 널리 활용된다.

그러나 Lasso의 목적함수는 비분리가능(nondifferentiable) 부분이 포함되므로, Ridge에 비해 해석적 닫힌 형태의 해를 구하기 어렵다. 대신 좌표하강법(Coordinate Descent), 근사적 방법(예: proximal gradient), 또는 유한 차분법 등을 이용해 최적해를 구한다. 대규모 문제에서도 좌표하강법이 비교적 빠른 수렴 특성을 보여 자주 사용된다.

#### 그 외 규제화 기법

Elastic net은 $L\_1$ 규제화와 $L\_2$ 규제화를 함께 사용하는 방법이다. 목적함수는 다음과 같이 정의한다.

$$
\begin{align} \min\_{\mathbf{x}} \ \left{ \ | \mathbf{A}\mathbf{x} - \mathbf{b} |\_2^2 \ + \ \alpha \lambda |\mathbf{x}|\_1 \ + \ \frac{1-\alpha}{2} \lambda |\mathbf{x}|\_2^2 \ \right} \end{align}
$$

$0 \leq \alpha \leq 1$ 범위에서 $\alpha$를 조절함으로써 Ridge 규제화와 Lasso 규제화 사이를 자유롭게 조절할 수 있다. $\alpha=1$이면 완전한 Lasso이고, $\alpha=0$이면 완전한 Ridge 규제화가 된다. 이처럼 서로 다른 규제화 방식을 동시에 적용하면 희소성, 계수 크기 억제, 예측 정확도 등을 균형 있게 달성할 수 있다.

그 밖에도 가중치를 다르게 부여하거나, 노름의 형태를 달리하여 문제에 따라 최적화하는 다양한 기법이 제안되고 있다. 예컨대 Group Lasso처럼 변수들을 그룹화하여 특정 그룹 단위로 희소화를 유도하는 방법도 있다. 실전에서는 데이터 구조와 목적에 따라 적절한 규제화 형태를 선택해야 한다.

#### 규제화의 베이지안 해석

규제화는 통계학적 관점에서 베이지안(Bayesian) 사전 분포(prior distribution)와 밀접하게 연관된다. 예를 들어 Ridge 규제화에서 페널티 항이 $|\mathbf{x}|\_2^2$로 주어지면, 이는 계수 벡터 $\mathbf{x}$가 정규분포(가우시안 분포)를 사전 분포로 갖는다는 의미로 해석할 수 있다. 즉

$$
p(\mathbf{x}) \propto \exp \left( -\frac{\lambda}{2} |\mathbf{x}|\_2^2 \right)
$$

형태의 사전 분포를 가정한 것과 동일하다. 이러한 사전 분포 하에서 최우추정(MAP) 문제를 풀면, Ridge 규제화 문제와 동일한 형태가 얻어진다.

Lasso에서도 $|\mathbf{x}|\_1$이 페널티 항이므로, 이는 라플라스(Laplace) 분포

$$
p(\mathbf{x}) \propto \exp \left( - \lambda |\mathbf{x}|\_1 \right)
$$

를 사전 분포로 가정한 것과 동등하게 해석된다. 이런 식으로 규제화 항을 사전 분포로 해석하면, 모델 학습 과정에서 “우리는 계수들이 지나치게 커지지 않는다” 혹은 “많은 계수들이 0에 가깝다고 가정한다”와 같은 사전적 믿음을 반영하는 것으로 볼 수 있다.

이 베이지안 해석은 모델이 고차원으로 확장되더라도, 적절한 사전 분포를 부여함으로써 (비슷한 맥락에서) 과적합을 방지하고 일반화 능력을 높이는 방향으로 자연스럽게 이어진다. 실제로 베이지안 회귀, 베이지안 변수 선택 등의 문제에서 사전 분포 설계는 매우 중요한 역할을 수행한다.

#### 규제화 파라미터 선택

규제화 파라미터($\lambda$)의 선정은 최종 모델의 성능을 좌우하는 결정적 요인이다. $\lambda$ 값에 따라 모델 복잡도가 달라지므로, 이를 적절히 튜닝하지 않으면 과대적합이나 과소적합 문제를 피하기 어렵다.

실전에서는 교차검증(cross-validation) 기법을 활용하여 여러 후보 $\lambda$ 값 중에서 일반화 오차가 최소가 되는 값을 선택한다. 예를 들어 $K$겹 교차검증을 할 때, 전체 데이터를 $K$개의 집합으로 나누어 한 집합을 검증용으로, 나머지를 훈련용으로 사용하여 모델을 학습한다. 이후 검증 데이터에 대한 오차를 측정하여, 이를 모든 분할에서 반복한다. 모든 반복에서의 평균 검증 오차가 최소가 되는 $\lambda$ 값을 선택한다.

이렇게 결정된 $\lambda$는 학습 과정에서 부여되는 페널티 항의 중요도를 결정하므로, 모델의 복잡도와 예측 성능 사이의 균형점을 찾는 핵심 역할을 한다.

#### 규제화와 대역(condition number)

행렬 $\mathbf{A}$가 심각하게 ill-posed(또는 ill-conditioned)한 경우, 최소제곱문제를 직접 풀면 해가 수치적으로 불안정해질 수 있다. 예측값이 극도로 민감하게 변동하거나, 작은 오차가 해에 크게 증폭되는 현상이 발생한다. 이는 $\mathbf{A}^T \mathbf{A}$의 고유값 분포가 극단적으로 치우쳐 있거나(매우 큰 또는 매우 작은 고유값이 존재), 순위(rank) 손실이 나타나는 등 역행렬이 제대로 정의되지 않거나 안정성이 결여된 상황에서 심화된다.

티호노프 규제화는 $\mathbf{A}^T \mathbf{A} + \lambda \mathbf{I}$의 형태를 만들어 주므로, 매우 작은 고유값들을 $\lambda$만큼 인위적으로 증가시켜서 역행렬을 안정화한다. 즉, $\lambda \mathbf{I}$가 추가되어

$$
\mathbf{A}^T\mathbf{A} + \lambda \mathbf{I}
$$

가 보다 well-conditioned 행렬이 되어 수치적 안정성이 크게 개선된다. 이런 관점에서 티호노프 규제화는 단순한 과적합 방지뿐 아니라, ill-posed 문제에서 해를 안정적으로 구하는 핵심 기법이기도 하다.

#### 규제화 기법의 반복해석(Iterative Interpretation)

최소제곱 문제나 규제화 문제를 직접 풀 수도 있지만, 대규모 문제나 제약조건이 많은 경우엔 반복적(Iterative) 접근이 바람직할 때가 많다. 예를 들어, Gradient Descent, Conjugate Gradient, Gauss-Newton, Levenberg–Marquardt 같은 방법을 사용할 때 규제화 항이 포함된 목적함수를 반복적으로 최소화할 수 있다.

Ridge 규제화가 들어간 최소제곱 문제의 경우, 오차항($|\mathbf{A}\mathbf{x}-\mathbf{b}|\_2^2$)의 기울기에 규제화 항($\lambda |\mathbf{x}|\_2^2$)에 대한 기울기를 단순히 더하여 반복 계산하면 된다. 마찬가지로 Lasso 규제화 문제는 미분불가능 영역이 포함되지만, 좌표하강법(Coordinate Descent)이나 Soft-thresholding 기법을 이용해 항별로 최적화를 교대로 진행하면 효율적으로 해를 구할 수 있다.

이러한 반복적 접근은 고차원 데이터나 누락된 데이터가 존재할 때, 또는 문제 크기가 매우 커서 직접 역행렬을 구하기 어렵거나 메모리가 제한적인 상황에서 유리하다. 실제로 기계학습 환경에서 딥러닝 등 대용량 데이터를 다루는 모델에서는 미니배치(mini-batch)를 활용한 Stochastic Gradient Descent(SGD) 방식으로 규제화된 목표함수를 최적화하는 일이 대부분이다.

#### 규제화의 응용

데이터 차원이 매우 크고 관측 데이터의 수가 제한적인 상황에서는, Ridge나 Lasso 같은 규제화 기법 없이 모델을 학습하면 과적합이 일어날 가능성이 매우 높다. 규제화 기법은 이런 문제에서 필수적인 수단이 된다.

특히, Lasso나 Group Lasso를 사용하면 자동으로 변수 선택을 수행하게 되므로, 수많은 특성 중에서 유효한 것만을 남기고 나머지를 제거함으로써 모델 해석이 쉬워지고 계산 효율성도 향상된다. Elastic net 또한 Ridge의 안정성과 Lasso의 희소성을 동시에 살리고자 할 때 유용하다.

이 밖에도 노름(norm) 정의를 다르게 하여, 특정 구조화된 제약조건(예: 핵(norm) 기반의 저랭크 제약, 행렬 완성(matrix completion))을 반영하는 고급 규제화 방법들이 다수 연구되고 있다.

#### Iterative Shrinkage-Thresholding과 Proximal 연산

Lasso나 Elastic net 같이 비매끄러운(nonsmooth) 항을 포함하는 규제화 문제에서는, 좌표하강법(Coordinate Descent) 외에도 Proximal 연산을 활용한 알고리즘들이 널리 사용된다. 이때 Proximal 연산이란, 일반화된 사상(mapping)으로서 다음과 같은 형태로 정의된다.

$$
\begin{align} \mathrm{prox}*{f}(\mathbf{z}) = \arg \min*{\mathbf{x}} \left{ f(\mathbf{x}) + \frac{1}{2}|\mathbf{x} - \mathbf{z}|\_2^2 \right} \end{align}
$$

대략적으로, $\mathbf{z}$에서 $f$에 해당하는 페널티를 반영하여 "가장 가까운" 점 $\mathbf{x}$를 찾는다고 볼 수 있다. 예를 들어, Lasso의 경우 $f(\mathbf{x}) = \lambda |\mathbf{x}|\_1$이므로, 이때의 Proximal 연산은 소위 Soft-thresholding 연산과 동일해진다. 1차원 $x$에 대해서는

$$
\mathrm{prox}\_{\lambda |x|}(z) =  \mathrm{sign}(z),\max(|z|-\lambda, 0)
$$

와 같은 형태를 갖는다. 이를 각 좌표별로 적용하면 다차원 벡터에도 동일하게 확장된다. Iterative Shrinkage-Thresholding Algorithm(ISTA)나 FISTA(Fast ISTA)는 이러한 Soft-thresholding을 반복적으로 적용하면서 오차항( $|\mathbf{A}\mathbf{x} - \mathbf{b}|\_2^2$ )에 대한 경사 정보를 반영하여 해를 갱신하는 방식이다. Lasso형 문제는 경사기반 알고리즘에서 미분불가능 영역을 직접 다루기 어렵지만, Proximal 연산을 도입하면 매 반복에서 한 축 (혹은 전체 좌표)에 대해 단순 기울기 업데이트 후, Soft-thresholding으로 계수들을 희소화하는 과정을 수행할 수 있다.

#### Early Stopping: 간접적 규제화

반복적 기법에서 Early Stopping(조기 종료)은 추가적인 페널티 항을 명시적으로 두지 않고도 과적합을 방지할 수 있는 대표적인 방식이다. 반복 과정이 충분히 진행되기 전에 멈춤으로써, 모델이 잡음까지 과하게 학습하지 못하도록 제어한다.

가령 Gradient Descent를 수행하면서, 검증세트(validation set)의 오차가 어느 시점부터 증가하기 시작하면 더 이상 학습을 진행하지 않고 종료한다. 이 기법은 특히 대규모 데이터나 복잡한 모델(예: 신경망)에서 자주 사용되며, 계산 효율과 간접적 규제화 효과를 동시에 노릴 수 있다.

수치해석 관점에서 살펴보면, Early Stopping은 $(\mathbf{A}^T \mathbf{A} + \lambda \mathbf{I}) \mathbf{x} = \mathbf{A}^T \mathbf{b}$ 와 같은 식에 도달하기 전에, 잔차를 완벽히 줄이는 대신 중간 단계에서 해를 가까스로 얻어내는 것과 유사하다. 실제로 재귀형 최소제곱(Recursive Least Squares) 방정식을 풀이할 때도 업데이트 횟수를 제한하거나, 가중치 추정의 "학습률"을 조절하여 과적합을 억제하는 방식이 흔히 사용된다.

#### Spectral Filtering 해석

규제화 문제를 고유분해(spectral decomposition) 관점에서 해석하는 방법도 있다. 티호노프 규제화에서

$$
(\mathbf{A}^T \mathbf{A} + \lambda \mathbf{I})^{-1}
$$

연산은 $\mathbf{A}^T \mathbf{A}$의 고유값을 $\sigma\_j^2$라 할 때, 각 고유값에 $\sigma\_j^2 + \lambda$를 분모로 취한 필터링(Filter)을 적용한 것과 동일하게 볼 수 있다. 따라서 작은 고유값( $\sigma\_j^2$ )에 대해선 분모가 $\lambda$로 인해 크게 보정되므로, 고유벡터 방향에서 계수가 지나치게 커지는 것을 억제하게 된다. 이를 곱셈 영역에서의 저역통과 필터(low-pass filter)에 비유하기도 한다.

또한, Lasso나 Elastic net 역시 고유벡터 성분마다 적절한 Penalty가 가해지는 형태로 해석할 수 있는데, Lasso의 경우는 특정 고유벡터 방향 성분이 완전히 0이 되어버릴 수도 있다는 점에서 Ridge와는 다른 특징이 나타난다. 결국 모든 규제화 방법은 $\mathbf{A}^T \mathbf{A}$의 고유분해(또는 SVD)를 통해 해석했을 때, 어떠한 “필터”를 각 모드(mode)에 적용하는가로 요약될 수 있다.

#### 고차원 데이터와 희소 모형

고차원( $p \gg n$ ) 문제에서는 전통적 최소제곱 접근이 극도로 불안정하며, 해가 무수히 많을 수도 있다. 이런 상황에서 Lasso, Elastic net 같은 희소(sparse) 모형은 중요한 변수만 살아남도록 유도함으로써 모델을 단순화한다. 이 때문에 통계학, 머신러닝, 신호처리 등 폭넓은 영역에서 고차원 데이터 분석의 기본도구로 자리잡았다.

만약 희소성뿐 아니라 그룹 구조(집단화된 변수가 함께 0이 되거나 함께 선택되어야 하는 상황)를 반영해야 하면 Group Lasso를 적용할 수 있다. Group Lasso에선 $\mathbf{x}$를 여러 개의 그룹으로 나누어, 각 그룹에 대한 $|\cdot|\_2$ 노름을 합산하는 식으로 페널티를 부여한다. 그러면 해당 그룹 단위로 변수들이 통째로 선택 혹은 제거될 수 있다.

핵(norm) 기반 규제화(nuclear norm regularization)는 행렬의 랭크(rank)를 낮추는 효과를 가지며, 행렬 완성(matrix completion) 문제나 시계열(temporal-spatial) 데이터 분석에서 자주 사용된다. 저랭크 구조가 존재한다고 가정되면, 데이터를 적은 수의 기저(또는 주성분)로 표현하여 잡음을 줄이고 예측력을 높인다.

#### 실제 구현 예시 (Python)

```python
import numpy as np

# 간단한 Ridge vs Lasso 비교 예시
# y ~ x1 + x2 + ... + xp 라고 가정
# (단, 실제론 랜덤 데이터이므로 의미 있는 결과는 아님)

np.random.seed(0)

n = 100   # 표본 수
p = 200   # 차원 수
A = np.random.randn(n, p)
x_true = np.zeros(p)
x_true[:5] = np.array([ 5.0, -3.0, 2.0, 0.0, 1.0 ])  # 5개 정도만 활성화
b = A @ x_true + 0.5*np.random.randn(n)  # 관측 벡터

# Ridge 해석
lambda_1 = 1.0
# (A^T A + lambda*I)x = A^T b
x_ridge = np.linalg.solve(A.T @ A + lambda_1*np.eye(p), A.T @ b)

# Lasso 해석 (여기선 간단히 scikit-learn)
from sklearn.linear_model import Lasso
lambda_2 = 0.1
lasso = Lasso(alpha=lambda_2, fit_intercept=False, max_iter=10000)
lasso.fit(A, b)
x_lasso = lasso.coef_

print("Ridge 해:", x_ridge[:10])
print("Lasso 해:", x_lasso[:10])
```

위 예시는 아주 단순화된 toy 데이터이지만, 실제로는 Ridge와 Lasso에서 도출되는 계수 분포가 어떻게 다른지 확인해볼 수 있다. 적절한 $\lambda$ 조절과 교차검증을 통해, 모델 복잡도와 예측력을 균형 있게 맞출 수 있는 파라미터를 찾아야 한다.

규제화 기법은 실전에서 모델의 일반화 성능을 높이는 데 필수적이다. 이러한 원리는 최소제곱법의 단순 회귀 모델뿐 아니라 딥러닝, 커널 기법(SVM), 행렬 분해 등의 훨씬 복잡한 모형까지 폭넓게 적용된다.

#### 다항회귀(Polynomial Regression)와 규제화

최소제곱법은 간단한 선형회귀(linear regression)에서 널리 쓰이지만, 실전 문제에서는 입력 변수를 비선형변환하거나, 다항(polynomial) 형태로 확장하여 모델 표현력을 높이려고 한다. 예를 들어, 1차원 $x$에 대해 다항차수를 $d$까지 확장하면

$$
\mathbf{A} = \begin{bmatrix} 1 & x\_1 & x\_1^2 & \cdots & x\_1^d \ 1 & x\_2 & x\_2^2 & \cdots & x\_2^d \ \vdots & \vdots & \vdots & \ddots & \vdots \ 1 & x\_n & x\_n^2 & \cdots & x\_n^d \end{bmatrix}
$$

와 같이 구성할 수 있다. 하지만 다항차수를 높일수록, 설계행렬 $\mathbf{A}$의 열 개수가 증가하고 계수 벡터 $\mathbf{x}$의 차원이 커진다. 특히 $d$가 커질수록 모델이 매우 유연해져서, 학습 데이터의 잡음까지 그대로 학습(과적합)하게 될 위험이 커진다. 이때 Ridge나 Lasso 같은 규제화를 적용하면, 다항차수를 높여도 계수들이 불필요하게 커지거나(또는 너무 많은 항이 활성화되거나) 하는 문제를 어느 정도 억제해준다.

다항회귀에 Ridge 규제화를 적용하면 다음과 같은 문제를 푸는 것과 같다.

$$
\begin{align} \min\_{\mathbf{x}} \ \left{ |\mathbf{A}\mathbf{x} - \mathbf{b}|\_2^2 + \lambda |\mathbf{x}|\_2^2 \right} \end{align}
$$

차수가 높은 다항식에서도 $\mathbf{x}$가 과도하게 커지는 것을 억제하므로, 모델이 비교적 평활(smooth)한 곡선을 그린다. Lasso나 Elastic net을 적용하면 일부 항의 계수가 정확히 0이 될 수도 있어, 다항항 중 중요하지 않은 부분을 아예 제거해버리는 효과가 나타날 수도 있다.

#### 커널 기법(SVM 등)에서의 규제화

서포트 벡터 머신(SVM)이나 커널 리지 회귀(kernel ridge regression)에서도 규제화 개념이 깊이 들어가 있다. 예를 들어, 커널 리지 회귀 문제는 (잠재적) 고차원 피처 공간에서의 선형회귀를 Ridge 규제화와 함께 구현한 것으로 볼 수 있다.

$$
\begin{align} \min\_{\mathbf{\alpha}} \ |\mathbf{K}\mathbf{\alpha} - \mathbf{b}|\_2^2 + \lambda \mathbf{\alpha}^T \mathbf{K}\mathbf{\alpha} \end{align}
$$

여기서 $\mathbf{K}$는 커널 행렬(kernel matrix)로, $\mathbf{K}\_{ij} = k(\mathbf{x}\_i, \mathbf{x}\_j)$ 형태로 정의된다. $k(\cdot,\cdot)$는 (예: 가우시안 RBF, 폴리노미얼 커널 등) 비선형 매핑을 내장한 커널 함수다. 결국 규제화 항($\lambda \mathbf{\alpha}^T \mathbf{K}\mathbf{\alpha}$)을 통해, 고차원 피처 공간에서의 과적합 위험을 줄이는 효과를 얻는다. 커널 SVM 역시 하드마진(hard margin) 혹은 소프트마진(soft margin)의 제약에 해당하는 규제화 파라미터($C$ 또는 $\lambda$)를 통해 과적합을 제어한다.

#### 뉴럴네트워크(딥러닝)에서의 규제화

심층신경망(딥러닝)은 모델 파라미터의 수가 매우 많고 네트워크 구조가 복잡하여, 규제화의 중요성이 더 커진다. 전통적인 $L\_2$ 노름(Weight Decay) 외에도, 다음과 같은 다양한 방법이 널리 쓰인다.

**Dropout**

드롭아웃은 학습 단계에서 은닉층 뉴런을 무작위로 비활성화(일정 비율로)하여, 일종의 앙상블 효과와 잡음 주입 효과를 동시에 노린다. 특정 뉴런이나 연결 가중치가 상호의존 관계에 빠지는 것을 막아, 과적합을 줄이는 결과를 얻는다. 학습 후 추론 단계에서는 모든 뉴런을 활성화하지만, 학습 시의 드롭아웃 비율을 고려해 가중치를 스케일 조정하여 평균적 예측을 구현한다.

**Batch Normalization**

배치 정규화 역시 간접적으로 규제화 효과가 있다. 내부 공변량 변화(Internal Covariate Shift)를 줄여 학습 속도를 높이기 위한 기법이지만, 미니배치마다 평균과 분산을 추정하여 정규화 과정에서 작은 잡음을 지속적으로 주입하게 된다. 이는 과적합을 어느 정도 완화하는 부수적 이점을 제공한다.

**Data Augmentation**

데이터 증강 또한 중요한 규제화 방식이다. 특히 이미지나 음성 분야에서는 입력 데이터를 회전, 반사, 크롭, 노이즈 추가 등으로 변형하여 새로운 표본을 만들어낸다. 이렇게 가상의 추가 표본을 만드는 것은, 모델이 원 데이터에만 치우치지 않고 일반화되도록 학습하는 데 큰 도움이 된다.

**Label Smoothing**

분류 문제에서 정답 라벨을 원-핫 벡터로 두는 대신, 약간 부드러운 레이블(예: 정답 클래스의 확률은 1이 아니라 0.9, 나머지는 0.1을 나눠서 할당)로 학습하는 기법이다. 이는 모델이 지나치게 자신만만한 예측(확률이 1 또는 0에 가깝게 쏠림)에 치우치지 않도록 완화하는 효과가 있어, 일종의 규제화로 작용한다.

#### 일반화 오차와 트레이드오프

규제화는 결국 훈련 오차(training error)와 모델 복잡도 사이의 균형을 추구한다. 규제화 항이 없는 최소제곱해는 학습 데이터에 대한 오차만 최소화하려 하지만, 새로운 데이터에 대한 예측 성능(일반화 오차)은 좋지 않을 수 있다. 반면 규제화 강도를 너무 높이면( $\lambda$가 매우 크면 ) 모델이 지나치게 단순화되어 오히려 유의미한 정보까지 소실될 수 있다.

적절한 $\lambda$ 또는 규제화 강도를 찾는 것은 교차검증, 정보기준(AIC, BIC 등), 또는 베이지안 접근(Marginal Likelihood) 등 다양한 기법으로 이뤄지며, 실제 상황에 따라 최적화 전략이 달라진다.

#### 일반화된 교차검증과 정보기준

전통적인 $K$겹 교차검증 외에, Generalized Cross-Validation(GCV)나 $C\_p$ 통계량, Akaike 정보기준(AIC), Bayesian 정보기준(BIC) 같은 다양한 척도를 활용해 모델 선정과 규제화 파라미터 선택을 진행할 수 있다. 예를 들어 GCV는 잔차제곱합(Residual sum of squares)에 대한 보정값을 통해, (학습) 표본 수나 모델의 유효 자유도(effective degrees of freedom)를 자동으로 고려한다.

정보기준 역시 모델 복잡도를 페널티로 반영하는 개념이므로, 규제화와 논리적으로 유사하다. AIC, BIC 같은 정보기준은 로그 우도(log-likelihood)에 모델 파라미터 개수(혹은 차수)에 대한 페널티 항을 부여하므로, 불필요하게 많은 파라미터를 쓰는 모델을 억제한다.

#### 확률적 경사하강법(SGD)과 규제화

대규모 데이터셋이나 온라인 학습 상황에서, 전체 데이터를 한꺼번에 처리하기 어렵다면 확률적 경사하강법(Stochastic Gradient Descent, SGD)을 적용한다. 이때도 규제화 항은 Gradient 업데이트 과정에서 쉽게 반영할 수 있다. 예를 들어 Ridge 규제($\lambda |\mathbf{x}|\_2^2$)는 가중치 $\mathbf{x}$에 대해 매 스텝마다 다음과 같은 형태로 작용한다.

$$
\mathbf{x} \leftarrow \mathbf{x} - \eta \nabla\_{\mathbf{x}} \left( \ell(\mathbf{x}; \text{배치데이터}) + \lambda |\mathbf{x}|\_2^2 \right)
$$

여기서 $\ell(\mathbf{x}; \text{배치데이터})$는 미니배치(mini-batch)에 대한 손실함수이며, $\eta$는 학습률(learning rate)이다. 규제 항에 대한 기울기는 단순히 $2\lambda \mathbf{x}$이므로, 매 스텝에서 가중치 감소(weight decay) 효과가 추가된다. Lasso 규제는 $L\_1$ 노름이므로 미분불가능 영역이 있지만, Proximal-SGD나 좌표하강형 SGD, 또는 확률적 Soft-thresholding 기법이 제안되어 대규모 문제에서도 적용 가능하다.

#### 추가 예시: 다항회귀 + 규제화 (Octave)

```octave
% 데이터 생성
rand('seed', 0);
n = 50;
x_data = linspace(-3,3,n)';
y_true = 1.5 + 0.8*x_data - 0.4*x_data.^2;
noise = 1.0*randn(n,1);
y_data = y_true + noise;

% 설계행렬 구성 (차수 d=5)
d = 5;
A = ones(n, d+1);
for j=1:d
  A(:, j+1) = x_data.^j;
end

% Ridge 해
lambda_ridge = 1.0;
% (A'*A + lambda*I)x = A'*b
x_ridge = (A'*A + lambda_ridge*eye(d+1)) \ (A'*y_data);

% 예측
x_plot = linspace(-3,3,200)';
A_plot = ones(200, d+1);
for j=1:d
  A_plot(:, j+1) = x_plot.^j;
end
y_ridge = A_plot*x_ridge;

% 결과 시각화 (Octave plot)
% figure; hold on;
% plot(x_data, y_data, 'ro');  % 관측 데이터
% plot(x_plot, y_true, 'b-');  % 참값(노이즈 없는 곡선)
% plot(x_plot, y_ridge, 'g-'); % Ridge 추정 곡선
% legend('Data','True','Ridge');
% hold off;
```

위 예시는 간단한 1차원 다항회귀 문제에 Ridge를 적용해본 것이다. 차수가 5이므로 일반 선형회귀로는 노이즈를 심하게 따라가 과적합되기 쉬우나, Ridge 규제화 항을 추가하면 계수들의 크기가 제한되어 좀 더 완만한 곡선을 얻는다.

실제로는 $\lambda$를 여러 후보로 놓고 교차검증을 수행하여, 과적합과 과소적합 사이에서 최적의 균형점을 찾는 과정이 필수적이다.
