초기화와 정규화

LegendKi·2023년 12월 6일

MachineLearning

목록 보기
5/5

신경망은 복잡한 문제를 잘 풀어내지만 쉽게 과적합(overfitting)되는 구조 때문에 최적의 모델로 학습하기가 까다롭다 딥러닝 방식이 등장하기 전까지 과적합은 해결하기 어려운 문제였고 지금까지도 과적합을 막기 위해 매우 다양한 기법들이 연구되고 있다.

  • 근본적으로 모델이 과적합 되지 않게 하려면 모델의 파라미터 수에 비례해서 학습 데이터를 충분히 늘려주면 된다. 하지만 현실적으로 학습 데이터가 한정된 경우가 많으므로 단순히 학습 데이터를 늘려주는 방식으로는 문제를 해결하기 어렵다. 또한 가급적 적은 데이터로 빠르게 학습할 수 있다면 시간과 비용을 절감할 수 있다.

신경망 학습을 원활히 해주는 기법

  • 모델의 초기화 방법
  • 과적합을 방지하고 모델의 성능을 향상하는 다양한 정규화 기법

가중치 초기화

  • 신경망을 학습할 때 손실 함수의 어느 위치에서 출발해야 최적해가 있는 곳으로 쉽게 갈 수 있을까?
  • 최적해 근처에서 출발할 수 있다면 빠르고 정확하게 최적해를 찾을 수 있겠지만 최적해가 어디에 있는지 모른다면 어떤 위치에서 출발하는 게 가장 좋을까?

신경망을 학습할 때 손실 함수에서 출발 위치를 결정하는 방법이 모델 초기화다. 특히 가중치는 파라미터에서 가장 큰 비중을 차지하므로 가중치의 초기화 방법에 따라 학습 성능이 크게 달라질 수 있다.

상수 초기화

최적해에 관한 사전 정보가 없을 때 생각할 수 있는 가중치 초기화 방법 중 하나가 임의의 상수로 초기화하는 것이다. 가중치를 0으로 초기화 한다면 과연 어떤 일이 일어날까?

뉴런의 가중치가 0이면 가중 합산 결과는 항상 0이 되고 활성 함수는 가중 합산 결과인 0을 입력 받아서 늘 같은 값을 출력한다.

z=wTx+b=0z = \mathbf{w}^T x + b = 0
a=activation(z){0,0.5}a = \text{activation}(z) \in \{0, 0.5\}

활성함수가 ReLU나 하이퍼볼릭 탄젠트면 출력은 0이 되고 시그모이드면 출력은 0.5가 된다. 출력 뉴런의 활성 함수가 소프트 맥스라면 모든 클래스의 확률이 동일한 균등 분포를 출력한다. 결과적으로 의미없는 출력이 만들어지며 가중치가 0이면 학습도 진행되지 않는다.

  • 역전파 과정에서
    뉴런의 지역 미분 Jx\frac{\partial J}{\partial x}는 w이므로 항상 0이 되고 다음 뉴런에 전달한 전역 미분 Jx\frac{\partial J}{\partial x}도 0이 되기 때문에 학습이 진행되지 않는다.
    zx=w=0\frac{\partial z}{\partial x} = w = 0
Jx=Jzzx=0\frac{\partial J}{\partial x} = \frac{\partial J}{\partial z} \cdot \frac{\partial z}{\partial x} = 0
  • 가중치를 0이 아닌 상수로 초기화 한다면?

이번에는 가중치를 0이 아닌 다른 상수로 초기화해 보자. 그림과 같이 가중치를 0.1로 초기화하면 괜찮을까?
두개의 은닉 뉴런 h1h_1h2h_2는 입력 (x1,x2,x3)(x_1, x_2, x_3)과 가중치가 (0.1, 0.1, 0.1)로 같기 때문에 가중 합산 결과도 같고 활성 함수의 실행 결과도 같다.
실제 뉴런은 두개지만 마치 하나의 뉴런만 있는 것처럼 둘이 똑같이 작동한다.
출력 뉴런 y는 h1h_1h2h_2에서 같은 값을 입력받으므로 정보가 반으로 줄어들고 연산 결과도 그만큼 부정확해 진다.
가중치를 모두 같은 상수로 초기화하면 신경망에 대칭성이 생겨서 같은 계층의 모든 뉴런이 똑같이 작동하므로 여러 뉴런을 사용하는 효과가 사라지고 하나의 뉴런만 있는 것과 같아진다. 모델을 크게 설계했더라도 모든 계층에 하나인 아주 작은 모델과 같아진 만큼 성능에 심각한 제약이 생긴다.

가우시안 분포 초기화

대칭성을 피하려면 가중치를 모두 다른 값으로 초기화해야 한다.

  • 가중치를 균등 분포나 가우시안 분포를 따르는 난수를 이용해서 초기화 해보자.

    가중치 초기화가 계층별 데이터 분포와 학습에 미치는 현상을 설명하기 위해 다음과 같은 10계층 모델을 가정하고 각 계층에는 500개 뉴런이 있고 활성함수는 하이퍼볼릭 탄젠트를 사용한다. 입력 데이터는 크기가 500인 실수 벡터로 표준 가우시안 분포 N(0, 1)를 따르는 난수로 생성한다.

  • 가중치를 아주 작은 난수로 초기화한다면?
    먼저 모델의 가중치를 가우시안 분포 N(0, 0.01)을 따르는 난수로 초기화해보자. 가중치가 평균이 0이고 분산이 0.01인 난수로 되어 있기 때문에 아주 작은 값으로 초기화되었다.

    신경망에 입력된 데이터는 10개의 계층을 지나면서 다음과 같은 분포로 변화한다. 계층이 깊어 질수록 출력이 점점 0으로 변하는 현상을 확인할 수 있다.
    이러한 현상이 생기는 이유는 가중치가 너무 작기 때문이다. 가중치가 작으면 뉴런의 출력이 작아질 수밖에 없다.
    따라서 입력 데이터가 여러 계층을 지날수록 점점 0에 가깝게 변하며 값이 0이 되는 순간 뉴런의 가중 합산이 0이 되기 때문에 가중치를 0으로 초기화했을 때와 비슷한 현상이 일어난다. 신경망이 의미있는 출력을 만들지 못하고 학습도 진행되지 않는다.

  • 가중치를 큰 난수로 초기화한다면?
    이번에는 가중치를 평균이 0이고 분산이 1인 가우시안분포 N(0, 1)로 초기화해보자.

    이 경우 다음과 같이 입력 데이터가 각 계을 지나면서 점점 1이나 -1로 변하는 현상을 확인할 수 있다. 이번에는 가중치가 너무 크기 때문에 이같은 현상이 발생한다. 가중치가 크면 뉴런의 출력이 커지므로 데이터가 계층을 여러 번 통과할수록 출력은 점점 커진다. 다만 활성 함수가 하이퍼볼릭 탄젠트이기 때문에 출력이 더 커지지 못하고 1과 -1로 포화하는 것이다. 문제는 하이퍼볼릭 탄젠트의 그래디언트도 0으로 포화하여 그레디언트 소실이 생기고 학습이 중단된다는 점이다.

적정한 가중치는 어떤 값일까?
가중치가 작아도 문제이고 커도 문제라면 적정한 가중치는 어떤 값이어야 할까?

  • 적어도 데이터의 크기를 점점 작게 만들거나 점점 크게 만들지 않는 값이어야 한다.
  • 데이터가 계층을 통과하더라도 데이터의 크기를 유지해주는 가중치로 초기화해야 한다.
  • 그렇다면 과연 어떤 방법으로 데이터 크기를 유지할 수 있을까?

Xavier 초기화

Xavier 초기화는 시그모이드 계열의 활성 함수를 사용할 때 가중치를 초기화하는 방법으로 입력데이터의 분산이 출력 데이터에서 유지되도록 가중치를 초기화한다.
데이터가 계층을 통과하더라도 같은 크기를 유지하려면 분산이 점점 작아지거나 커지지 않아야 하기 때문이다.

Xavier 초기화 방식의 가정사항

  1. 활성 함수를 선형 함수로 가정한다.
    • 입력데이터가 0 근처의 작은 값으로 되어있다고 하자.
    • 이 경우 입력 데이터는 시그모이드 계열 활성 함수의 가운데 부분을 지난다.
    • 시그모이드 계열의 활성 함수의 가운데 부분은 직선에 가깝기 때문에 선형함수로 가정할 수 있다.
  2. 입력 데이터와 가중치는 다음과 같은 분포의 성질을 가진다.
    • 입력 데이터 (x1,x2,,xn)(x_1, x_2, \ldots, x_n)와 가중치 $(w_1, w_2, \ldots, w_n)는 서로 독립이다.
    • 입력 데이터의 각 차원 xix_i는 가틍ㄴ 분포이고 서로 독립인 i.i.d를 만족한다.
    • 가중치의 각 차원 wiw_i도 같은 분포이고 서로 독립인 i.i.d를 만족한다.
    • xix_iwi(i=1,2,,nw_i(i = 1, 2, \ldots, n는 평균이 0인 분포를 따른다. 즉 E(wi)=0E(w_i) = 0이고 E(xi)=0E(x_i) = 0이다

Xavier 초기화 식의 유도 과정

Xavier 초기화 식을 유도해보자. 활성함수를 선형 함수로 가정했으므로 뉴런의 출력 y는 가중합산 Z와 같다

y=z=w1x1+w2x2++wnxn+by = z = w_1 x_1 + w_2 x_2 + \ldots + w_n x_n + b

이 식의 양변에 분산을 계산해면 xix_iwiw_i가 서록 독립이므로 다음과 같은 식이 유도 된다. n은 입력 데이터의 개수이다.

Var(y)=Var(w1x1+w2x2++wnxn)\text{Var}(y) = \text{Var}(w_1 x_1 + w_2 x_2 + \ldots + w_n x_n)
=Var(w1x1)+Var(w2x2)++Var(wnxn)= \text{Var}(w_1 x_1) + \text{Var}(w_2 x_2) + \ldots + \text{Var}(w_n x_n)
=i=1nVar(wixi)= \sum_{i=1}^{n} \text{Var}(w_i x_i)

E(wi)=0E(w_i) = 0이고 E(xi)E(x_i)이므로 다음과 같이 $Var(x_i, w_i) = Var(x_i)Var(w_i)를 만족한다.

Var(y)=i=1nE((wixi)2)E(wixi)2\text{Var}(y) = \sum_{i=1}^{n} E((w_i x_i)^2) - E(w_i x_i)^2
=i=1nE(wi2)E(xi2)E(wi)2E(xi)2= \sum_{i=1}^{n} E(w_i^2) E(x_i^2) - E(w_i)^2 E(x_i)^2
=i=1n(Var(wi)+E(wi)2)(Var(xi)+E(xi)2)E(wi)2E(xi)2= \sum_{i=1}^{n} (\text{Var}(w_i) + E(w_i)^2)(\text{Var}(x_i) + E(x_i)^2) - E(w_i)^2 E(x_i)^2
=i=1nE(wi)2Var(xi)+E(xi)2Var(wi)+Var(xi)Var(wi)= \sum_{i=1}^{n} E(w_i)^2 \text{Var}(x_i) + E(x_i)^2 \text{Var}(w_i) + \text{Var}(x_i) \text{Var}(w_i)
=i=1nVar(xi)Var(wi)= \sum_{i=1}^{n} \text{Var}(x_i) \text{Var}(w_i)

두번째 식에서 세번째 식은 Var(wi)=E(wi2)E(wi)2\text{Var}(w_i) = E(w_i^2) - E(w_i)^2이므로 Var(wi2)=E(wi)+E(wi)2\text{Var}(w_i^2) = E(w_i) + E(w_i)^2로 치환되었다. 마찬가지로 Var(xi)=E(xi2)E(xi)2\text{Var}(x_i) = E(x_i^2) - E(x_i)^2이므로 Var(xi2)=E(xi)+E(xi)2\text{Var}(x_i^2) = E(x_i) + E(x_i)^2로 치환되었다.
모든 xix_i는 같은 분포를 따르므로 분산이 같고 모든 wiw_i도 같은 분포를 따르므로 분산이 같아서 다음과같이 식이 간단히 바뀐다.

Var(y)=nVar(xi)Var(wi)\text{Var}(y) = n \text{Var}(x_i) \text{Var}(w_i)

가중치 초기화를 통해 입력과 출력의 분산을 같게 만들려면 Var(xi)=Var(y)Var(x_i) = Var(y)라고 가정해서 양변에서 소거한다. 따라서 가중치의 분산 Var(wi)Var(w_i)1n1\over n이 되었다.

Var(wi)=1nVar(w_i) = {1\over n}


Xavier 초기화는 가중치의 분산이 입력 데이터 개수 n에 반비례하도록 초기화하는 방식이다. 가중치 분포는 가우시안 분포 또는 균등 분포로 정의할 수 있으며 다음 그림은 가중치의 분포가 가우시안 분포일 때 정의이다.

Xavier 초기화를 이요해서 신경망을 초기화했을 때 실행 결과를 확인해보자. 이제 입력 데이터가 계층을 여러번 통과하더라도 분산이 잘 유지되는 것을 확인할 수 있다.
신경망의 활성 함수가 시그모이드 계열일 때 Xavier 초기화를 적용하면 입력 데이터가 분산을 유지하면서 흘러가게 되므로 출력값이 0으로 변하는 현상도 1과 -1로 포화되는 현상도 없어진다. 결과적으로 그레디언트 소실이 사라져서 신경망의 학습이 원활히 진행된다.

He 초기화

활성 함수가 ReLU일 대 Xavier 초기화를 사용하면 데이터의 크기가 점점 작아진다.
애초에 Xavier 초기화는 시그모이드 계열 활성 함수를 사용한다는 전제하에 활성 함수를 선형 함수로 가정했기 때문이다. 반면 ReLU는 양수구간에서는 이 가정이 유효하지만 음수 구간에서는 이 가정과 맞지 않는다. 음수 구간에서 입력데이터가 0으로 변하므로 50%가량의 데이터가 0이 된다면 입력 데이터의 크기 즉 분산이 절반으로 줄어들기 때문이다.

활섬 함수가 ReLU일 때 Xavier 초기화를 적용해 보면 입력 데이터가 계층을 통과하면서 분산이 점점 줄어들어 출력이 0이 되는 현상을 확인할 수 있다.

  • 이 한계점을 개선한 방식이 He 초기화이다.

    He 초기화도 Xavier 초기화와 같이 뉴런의 입력 데이터와 출력 데이터의 분산을 같게 만들어준다. 다만 ReLU를 사용했을 때의 분산을 모델링 했다는 점이 다르다. He 초기화는 ReLU를 사용했을 때 출력의 분산이 절반으로 줄어들기 때문에 가중치의 분산을 두 배로 키운다.
    즉, Xavier 초기화는 가중치의 분산을 1n1\over n로 하면 He 초기화는 가중치의 분산을 2n2\over n로 한다.

    다음 그림과 같이 He 초기화를 적용해 보면 입력 데이터가 계층을 통과하면서 데이터의 분산이 잘 유지되는 것을 확인할 수 있다. ReLU의 특성상 데이터가 0에 몰려 있지만 나머지 데이터는 양수 구간에 골고루 퍼져 있는 모습이다.

가중치 감소

두 개 클래스를 직선으로 분류하는 선형 분류기가 있다고 가정하자. 이 때 두 클래스를 분류하는 결정 경계는 뉴런의 가중합산식으로 표현되는 직선의 방정식 wTx+b=0w^Tx + b = 0에 해당한다.

이 직선의 방정식 wTx+b=0w^Tx + b = 0의 양변에 2를 곱하면 2wTx+2b=02w^Tx + 2b = 0이 된다. 이 두 방정식은 같은 직선을 표현한다. 사실 0이 아닌 어떤 값을 곱해도 모두 같은 직선을 표현한다는 것을 알고 있다. 하나의 직선을 표현하는 방정식은 무한히 많다. 그렇다면 이 중 어떤 방정식을 사용하는 것이 좋을까?

  • 최적화할 대는 다루는 숫자의 크기가 작을수록 오차의 변동성이 낮아지므로 파라미터 공간이 원점 근처에 있을 때 정확한 해르 빠르게 찾을 수 있다. 그래서 직선의 방정식 wTx+b=0w^Tx + b = 0식을 표현할 때 가중치와 편향이 작은 것이 좋다.
  • 가중치 감소(weight decay)는 학습과정에서 작은 크기의 가중치를 찾게 만드는 정규화 기법이다.

가중치 감소는 가중치의 크기를 제한하는 제약 조건으로서 손실 함수의 일부 항으로 표현할 수 있다. 다음 식과 같이 손실 함수로 확장해서 가중치의 크기를 표현하는 정규화 항을 더하면 최적화 과정에서 원래의 손실 함수와 함께 정규화 항도 같이 최소화되므로 크기가 작은 가중치 해를 구할 수 있다.

J~(w)=J(w)+λR(w)\tilde{J}(w) = J(w) + \lambda R(w)

여기서 w는 가중치 벡터이고 J(w)J(w)는 손실 함수이며 λ\lambda는 정규화 상수, R(w)R(w)는 정규화 항이고, J~(w)\tilde{J}(w)는 확장된 손실 함수다.

  • λ\lambda는 정규화 상수로서 가중치 크기를 조절하는 역할로 λ\lambda의 크기가 커질수록 정규화 항의 비중이 커지면서 가중치의 크기는 작아지고 λ\lambda가 작을수록 정규화 항의 비중이 작아지면서 가중치의 크기는 커진다. 즉 λ\lambda에 따라 유효한 가중치의 개수가 달라질 수 있어서 λ\lambda는 모델의 복잡도를 조정하는 역할을 한다고 볼 수 있다. 가중치의 사전 분포를 알고 있다면 가중치의 분산에 따라 λ\lambda를 정해서 가중치의 크기를 사전 분포로 제약할 수 있다.

정규화 항 $R(w)은 가중치의 크기를 나타내는 노름으로 정의한다.

  • L2L_2 노름을 사용하면 L2L_2 정규화라 하고 회귀 문제에서는 리지(Ridge)라고 부른다.
    J~(w)=J(w)+λ2w22\tilde{J}(w) = J(w) + \frac{\lambda}{2} \|w\|_2^2
  • L1L_1 노름을 사용하면 L1L_1 정규화라 하고 회귀 문제에서는 라소(Lasso)라고 부른다.
    J~(w)=J(w)+λw1\tilde{J}(w) = J(w) + \lambda \|w\|_1
    만일 가중치 그룹별로 가중치 크기를 조절하고 싶다면 다음 식과 같이 가중치 그룹 w별로 정규화 항을 분리해서 합산 형태로 표현한다. 예를 들어 신경망의 가중치 크기가 다르다면 이런 방식으로 통제할 수 있다.
    J~(w)=J(w)+i=1Lλi2wi22\tilde{J}(w) = J(w) + \sum_{i=1}^{L} \frac{\lambda_i}{2} \|w_i\|_2^2

가중치의 사전 분포와 노름

정규화 항에 L1L_1노름을 사용할지 L2L_2노름을 사용할지는 가중치의 사전 분포에 따라 달라진다.
만일 가중치의 사전 분포가 가우시안 분포라면 L2L_2노름을 사용하고 라플라스 분포라면 L1L_1노름을 사용한다. 가중치의 사전 분포를 모른다면 보통 L2L_2노름을 사용한다.

가중치 감소 정규화 항의 노름 유도 과정

가중치의 사전 분포에 따라 정규화 항의 노름이 어떻게 정해지는지 유도 과정을 살펴보자.

  • 정규화 항은 손실 함수의 일부이므로 최대 우도 추정 방식에 따라 가중치의 사전 분포에 음의 로그 우도를 구해서 표현할 수 있다.
  • 먼저 다변량 가우시안 분포 (Multivariate Gaussian distribution)의 정의는 다음과 같다.
    N(xμ,σ)=12πDe12(xμ)Tσ1(xμ)N(x|\mu, \sigma) = \frac{1}{\sqrt{2\pi}^D} e^{-\frac{1}{2}(x - \mu)^T \sigma^{-1} (x - \mu)}
    여기서 μ\mu : 평균벡터, σ\sigma : 공분산 행렬, D : 변수의 차원을 의미한다.
    가중치의 사전 분포가 가우시안 분포 N(w0.1)N(w|0.1) 이고 w가 D차원이면 음의 로그 우도를 취했을 때 가중치의 L2L_2 노름의 제곱이 도츨 되는 것을 알 수 있다. (최적화 문제에서 목적 함수에 상수를 더하거나 빼도 최적해는 동일하기 대문에 const는 없앨 수 있다.)
    logN(w0,1)=log(12πDe12(w0)T(w0))=12w22+const-\log N(w|0, 1) = -\log \left( \frac{1}{\sqrt{2\pi}^D} e^{-\frac{1}{2}(w - 0)^T (w - 0)} \right) = \frac{1}{2} \|w\|_2^2 + \text{const}
  • 라플라스 분포에도 음의 로그 우도를 취하면 L1L_1노름이 유도된다. (앞의 설명과 마찬가지로 최적화 문제에서 const는 없앨 수 있다.)
    logf(w0,1)=log(12e12w0)=w1+const-\log f(w|0, 1) = -\log \left( {1\over 2}e^{-\frac{1}{2} \|w - 0\|} \right) = \|w\|_1 + \text{const}

정규화 효과

L2L_2 정규화와 L1L_1 정규화의 효과는 약간 다르다.

왼쪽은 L2L_2 정규화를 오른쪽은 L1L_1 정규화를 보여준다.
원형 등고선은 원래 손실함수 J(w)J(w)를 나타내며 등고선의 중점이 원래 손실 함수의 최적해가 있는 부분이다. 원점을 중심으로 하는 동그라미와 다이아몬드는 가각 L2L_2 정규화 항과 L1L_1 정규화 항을 나타낸다.
원형 등고선과 동그라미와 다이아몬드가 만나는 접접이 가중치 감소를 적용한 확장된 손실함수 J~(w)\tilde{J}(w)의 해가 된다.

  • L2L_2 정규화의 경우 손실함수 J(w)J(w)가 어떤 방향에 있든 손실 함수 $J(w)가 주황색 동그라미에 닿을 확률은 같기 때문에 최적해는 원점 주변에 존재한다.
  • L1L_1 정규화의 경우 손실함수가 다이아몬드의 모서리에 먼저 닿을 확률이 사선에 닿을 확률보다 높기 때문에 최적해가 특정 차원의 축 위에 있을 가능성이 높다. 이 경우 최적해가 존재하는 축을 제외한 나머지 축의 좌표값은 0이 되므로 좌표의 대부분이 0으로 채워진 희소한 해를 가진다. 가중치가 희소해지면 일부 가중치가 0이 되어 유효 파라미터 수가 줄어들고 작은 모델이 되어 성능도 빨라진다. 또한 이 과정을 유효한 특징을 선택(feature selection)하는 과정으로도 볼 수도 있다.

조기 종료

조기종료(early stopping)는 모델이 과적합되기 전에 훈련을 멈추는 정규화 기법이다.

다음과 같이 훈련 성능과 테스트/검증 성능을 비교해보면 모델이 과적합되는 걸 알 수 있다.
과적합이 일어나면 훈련 성능은 계속 좋아지지만 테스트/검증 성능은 다시 좋아지다가 다시 나빠지기 때문이다. 훈련하는 동안 주기적으로 성능 검증을 하다가 성능이 더 좋아지지 않으면 과적합이 시작되었다고 판단하고 훈련을 멈춘다. 보통 epoch 단위로 성능 검증을 하며 epoch보다 자주 검증 해야 할 때는 배치(batch) 실행 단위로 검증하기도 한다.
한 가지 유의해야 할 점은 모델의 성능이 향상하지 않더라도 바로 종료해서는 안된다는 점이다. 신경망을 학습할 때 단계마다 미니 배치로 근사한 그레디언트는 실제 그레디언트와 차이가 있으므로 성능이 조금씩 좋아졌다 나빠졌다 할 수 있다. 따라서 일시적인 성능 변동이 아닌 지속적인 성능의 정체 또는 하락이 판단되면 그때 종료하는 것이 바람직하다.
보통 일정 횟수 동안 성능이 연속적으로 좋아지지 않는지 모니터링해서 훈련을 종료하며 문제의 특성에 따라 훈련이 민감하게 종료되지 않도록 모니터링 횟수를 충분히 크게 정해야 한다. 또한 어떤 성능을 기준으로 조기 종료를할 것인지도 정해야 한다. 보통 모델 오차를 기준으로 조기 종료를 하지만 정확도와 같은 다른 성능 측도를 사용할 수도 있다. 테스트 시점에는 훈련이 끝난 마지막 상태의 모델을 사용하거나 훈련 성능이 가장 좋은 모델 상태를 저장해 두었다가 사용한다.

조기 종료의 정규화 효과

조기 종료는 파라미터 공간을 작게 만드는 효과가 있다.

파라미터 공간에서 초기 파라미터 위치가 w0w_0이고 최적화 스텝수가 τ\tau, 학습률이 α\alpha라면 파라미터 공간은 w0w_0를 중심으로 τα\tau\alpha크기의 반경을 갖는 공간으로 제약된다.

조기 종료와 L2L_2 정규화의 관계

조기 종료로 파라미터의 공간의 크기가 제약되면 L2L_2 정규화와 동일한 효과가 있다.

왼쪽은 조기 종료를 했을 때 최적화 경로를, 오른쪽은 L2L_2정규화를 했을 대 최적화 경로를 보여준다.
조기 종료가 L2L_2 정규화와 같은 정규화 효과를 보는 이유는 조기 종료를 할 때는 원점 근처에서 출발해서 최적해가 있는 방향으로 진행하다가 도중에 멈춘다. 이때 조기 종료 위치는 오른쪽 그림과 같이 L2L_2 정규화를 했을 때 손실 함수와 정규화 항이 만나는 지점과 비슷한 위치이다. 손실 함수가 2차 함수로 정의되는 선형 모델의 경우 조기 종료와 L2L_2 정규화는 동일하다는 것이 증명되었다.

배치 정규화

신경망 학습이 어려운 이유 중 하나는

  • 계층을 지날 때마다 데이터 분포가 보이지 않는 요인에 의해 조금씩 왜곡되기 때문이다. 데이터 왜곡을 막으려면 가중치 초기화를 잘해야하고 학습률도 작게 사용해야 하는데 이 경우 학습 속도가 느려지는 문제가 있다.

내부 공변량 변화

데이터 분포가 보이지 않는 요인에 의해 왜곡되는 현상을 내부 공변량 변화(Internal covariate shift)라고 한다.

분포를 결정하는 보이지 않는 요인을 공변량이라고하며 내부공변량이 바뀌면 다음 그림과 같이 각 계층의 데이터 분포가 원래 분포에서 조금씩 멀어진다. 그 결과 하위 계층의 작은 변화가 상위 계층으로 갈수록 큰 영향을 미치게 된다.

배치 정규화 단계

배치 정규화는 데이터가 계층을 지날 때마다 매번 정규화해서 내부 공변량변화를 없애는 방법이다.
배치 정규화가 기존 데이터 정규화 방식과 다른 점은 모델의 계층 형태로 데이터 정규화를 실행한다는 점이다. 따라서 배치 정규화를 하면 모델이 실행될 때마다 해당 계층에서 매번 데이터 정규화가 일어난다. 또한 전체 데이터에 대해 정규화하지 않고 미니배치에 대해 정규화 한다는 점도 다르다.

표준 가우시안 분포로 정규화

다음과 같이 dd차원의 입력 데이터 x=(x(1),x(2),,x(d))x = (x^{(1)}, x^{(2)}, \ldots, x^{(d)})가 있다면.
배치 정규화는 차원별로 평균과 분산을 구해서 표준 가우시안 분포 N(0,1)로 정규화한다. 표준 가우시안 분포로 정규화하므로 데이터의 크기가 작아지면서 내부 공변량의 변화도 작게 만들 수 있다.

x^(k)=x(k)E[x(k)]Var[x(k)],k=1,2,,d\hat{x}^{(k)} = \frac{x^{(k)} - E[x^{(k)}]}{\text{Var}[x^{(k)}]}, \quad k = 1,2,\ldots,d


배치 정규화를 모든 계층에 적용하면

  • 데이터가 계층을 지날 때마다 표준 가우시안 분포로 바뀌고 그에 따라 내부 공변량의 변화를 최소화 할 수 있다.
  • 원리적으로는 계층을 지나면서 생기는 데이터 오차의 크기를 줄임으로써 누적 오차도 작게 만드는 작업을 한 것이다.

원래 분포로 복구

그런데 데이터를 표준 가우시안 분포로 정규화하면 모델이 표현하려던 비선형성을 제대로 표현할 수 없는 문제가 생긴다.

예를 들어 활성 함수가 시그모이드라면 표준 가우시안 분포로 정규화된 데이터는 시그모이드 함수의 가운데 부분인 선형 영역을 통과하므로 비선형성이 사라진다.

활성 함수가 ReLU인 경우에도 문제가 되는데 표 가우시안 분포로 정규화된 데이터의 절반은 음수이고 나머지 절반은 양수이므로 50% 데이터의 출력이 0이 되어 뉴런의 절반이 dead ReLU가 되면 정상적인 학습이 이루어지지 않는다.

따라서 배치 정규화를 하면서 모델의 비선형성을 잘표현하려면 데이터를 표준 가우시안 분포로 정규화한 뒤 다시 원래 데이터의 분포로 복구해야 한다.

정규화된 데이터가 x^(k)\hat x^{(k)}이고 원래 데이터 분포의 평균과 표준편차가 β(k)\beta^{(k)}γ(k)\gamma^{(k)}이라면 원래 데이터 분포를 따르는 데이터는 y(k)=γ(k)x^(k)+β(k)y^{(k)} = \gamma^{(k)}\hat x^{(k)} + \beta^{(k)}식으로 복구할 수 있다.

문제는 평균 β(k)\beta^{(k)}과 표준편차 γ(k)\gamma^{(k)}를 어떻게 구할 것인가이다.
이상적으로 미니배치에 대한 평균과 표준편차가 β(k)=E[x(k)]β\beta^{(k)} = E[x^{(k)}] \betaγ(k)=Var[x(k)]γ\quad \gamma^{(k)} = \sqrt{\text{Var}[x^{(k)}]} \gamma와 같이 원래 데이터 분포를 표현한다면 이 값들을 이용해서 바로 복구할 수 있겠지만 실제 미니배치에 대한 평균과 표준편차가 원래 데이터 분포를 표현하지 못한다 따라서 평균 β(k)\beta^{(k)}과 표준편차 γ(k)\gamma^{(k)}를 모델의 학습과정에서 따로 구해야한다.

배치 정규화 알고리즘

배치 정규화의 학습 알고리즘은 다음과 같다.

  • 미니 배치 β\beta의 평균 μβ\mu_\beta과 분산 σβ2\sigma_\beta^2을 구해서 표준 가우시안 분포로 정규화르 수행한다. 그리고 다시 학습된 평균 β\beta와 표준편차 γ\gamma를 이용해서 원래 분포로 복구한다.

입력: 미니배치: B={x1,,xm}B = \{x_1, \ldots, x_m\};
학습 파라미터: γ,β\gamma, \beta

출력: {yi=BNγ,β(xi)}\{y_i = \text{BN}_{\gamma, \beta}(x_i)\}

μB1mi=1mxi//미니배치 평균\mu_B \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_i \quad // \text{미니배치 평균}
σB21mi=1m(xiμB)2//미니배치 분산\sigma_B^2 \leftarrow \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2 \quad // \text{미니배치 분산}
x^i1σB2+ϵ(xiμB)//표준 정규화\hat{x}_i \leftarrow \frac{1}{\sqrt{\sigma_B^2 + \epsilon}} \quad \odot (x_i - \mu_B) // \text{표준 정규화}
yiγx^i+βBNγ,β(xi)//원래 분포로 복구y_i \leftarrow \gamma \odot \hat{x}_i + \beta \equiv \text{BN}_{\gamma, \beta}(x_i) \quad // \text{원래 분포로 복구}

학습 단계에서는 미니배치 단위의 평균과 분산으로 정규화를 수행하지만 테스트 단계에서는 전체 데이터의 평균과 분산으로 정규화해야 한다.

E[X]EB[μB]E[X] \leftarrow E_B[\mu_B]
Var[X]mm1EB[σB2]\text{Var}[X] \leftarrow \frac{m}{m-1} E_B[\sigma^2_B]

전체데이터의 평균 E[x]E[x]과 분산 Var[x]Var[x]은 다음과 같은 식으로 구할 수 있다. 이 식은 표본의 평균과 분산을 이요해서 모분포의 평균과 분산을 구하는 식이다. 구현할 때는 학습 단계에세ㅓ 미니배치 단위로 구한 평균 μB\mu_B과 분산 σB2\sigma_B^2에 대해 이동 평균을 구해서 데이터 전체의 평균과 분산을 계산한다.

배치 정규화 수행 위치

그렇다면 배치 정규화는 모델의 어느 위치에서 실행하면 좋을까?

  • 배치 정규화를 처음 제안 했을 때는 뉴런의 가중 합산과 활성 함수 사이에서 수행하는 것으로 제안했다. 하지만 여러 후속 연구에 따르면 활성 함수를 실행한 뒤에 배치 정규화를 수행했을 때 더 나은 성능을 보이기도 했다. 일반적으로는 가중 합산한 뒤에 정규화를 적용하지만 모델의 성능을 세밀하게 개선하려면 활성 함수 이후에 적용했을 때 성능도 검증해 볼 필요가 있다.

배치 정규화의 우수성

  • 배치 정규화를 하면 내부 공변량 변화가 최소화되므로 그레디언트의 흐름이 원활해지고 그에 따라 학습이 안정적으로 진행된다. 또한 지속적으로 데이터 분포를 유지하기 때문에 초기화 방법에 대한 의존도가 낮아지고 높은 학습률을 사용해도 된다.
  • 미니배치 단위로 정규화 하므로 어떤 샘플의 조합으로 미니배치를 구성하는지에 따라 데이터가 조금씩 변형되어 확률적 성질이 생기고 그에 따라 모델의 성능이 높아진다.
  • 최근 연구 결과에 따르면 배치 정규화가 내부공변량 변화를 없애기 보다는 손실과 그레디언트 변화를 제약하여 곡면을 부드럽게 만들어 줌으로써 모델의 학습 성능이 향상한다는 것이 증명되었다.

데이터 증강

모델은 복잡한데 그만큼 충분한 훈련 데이터가 제공되지 않으면 모델이 데이터를 암기해서 과적합이 생긴다.

  • 과적합을 막는 가장 근본적인 방법은 훈련데이터의 양을 늘리는 것이다.

    훈련 데이터 셋의 크기가 커질수록 훈련 오류는 증가하고 테스트 오류는 감소하여 두 곡선의 차가 나타내는 일반화 오류 또는 과적합의 정도는 줄어든다. 따라서 훈련 데이터셋이 커질수록 과적합이 일어나지 않는다.

하지만 현실적으로 데이터 레이블을 만드는 비용이 만만치 않은 데다가 의료 데이터나 신약 데이터, 로봇 제어 데이터, 개인화된 데이터, 희소한 언어로된 번역 데이터와 같은 일부 데이터는 수집이 매우 까다롭다. 따라서 데이터를 수집해서 큰 데이터셋을 만드는 방법보다 좀 더 쉽게 데이터를 늘려주는 방법이 필요한데 대표적인 방법이 훈련 데이터셋을 이용해서 새로운 데이터를 생성하는 데이터 증강(data augumentation) 기법이다.

데이터 증강 기법은 점점 다양해지고 고도화 되고있다.
가장 기본적인 증강 방법은 훈련 데이터를 조금씩 변형해서 새로운 데이터를 만드는 방법이다. 데이터 증강 규칙을 사람 정할 경우 증간된 데이터가 성능에 최적인지는 검증이 필요하다. 좀 더 고도화된 방법으로는 훈련 데이터의 분포를 학습해서 생성 모델 (generative model)을 만든 뒤에 새로운 데이터를 생성하는 방법이 있다. 이 경우에는 훈련 데이터의 분포를 따르는 검즈오딘 데이터를 바로 얻을 수 있다. 또한 생성 모델을 이용하면 더 쉽게 현실감 있는 데이터로 합성하거나 변환할 수 있다.

데이터 증강은 어떤 방식으로 실행해야 할까?


훈련 데이터를 읽어서 모델에 입력하기 전에 데이터를 증강하며 이때 확률적인 방식으로 매번 다른 형태가 되도록 변형함으로써 마치 무한히 많은 데이터가 있는 것과 같은 효과를 본다.

클래스 불변 가정

데이터 증강을 할 때는 클래스 불변 가정(class-invariance assumption)을 따라야한다.

  • 클래스 불변 과정은 데이터를 증강할 때 클래스가 바뀌지 않도록 해야한다는 가정이다. 만일 데이터 증강 과정에서 클래스의 결정 경계를 넘어서면 다른 클래스로 인식하므로 각자의 결정 경계 안에서 데이터를 변형해햐안다.

    예를 들어 필기체 숫자를 인식하는 모델에서 아래 그림과 같이 숫자 이미지를 회전해서 데이터를 증강한다고 해보자. 클래스 6의 이미지를 90도 정도로 회전하면 클래스 9와 구분이 애매모호해진다. 왜냐하면 변형된 이미지가 두 클래스의 경계 지점에 있기 때문이다 만일 90도 이상으로 회전한다면 클래스 6의 경계를 넘어서 더는 클래스 6으로 인식되지 않을 것이다. 따라서 데이터를 변형할 때 자신의 클래스 경계 안에서 변형이 되도록 주의해야한다.

데이터 증강 방식 선택

데이터 증강하는 방식은 데이터의 종류와 문제에 따라 매우 다양하다. 만일 이미지 분류 문제를 푼다면 이미지 이동, 회전, 늘리기, 좌우/상하 대칭, 카메라 왜곡하기, 잡음 추가, 색깔 변환, 잘라내기, 떼어내기와 같은 다양한 이미지 변형 방법을 사용할 수 있다. 데이터 증강을 어떤 조합으로 할지는 성능 검증을 통해 찾아내야 한다.
최근에는 데이터 증강 방식을 자동으로 찾아주는 자동 데이터 증강(automatic data augmentation) 기법들이 연구되고 있다. 모델의 성능을 최대화하는데 필요한 데이터 증강 정책을 강화 학습이나 진화 알고리즘 등으로 학습해서 자동으로 생성한다.

앙상블

앙상블(ensemble)은 여러 모델을 실행해서 하나의 강한 모델을 만드는 방법이다.
개별 모델의 성능은 약하지만 약한 모델이 모여서 하나의 팀을 이루면 성능이 좋은 강한 모델이 될 수 있다.

배깅


앙상블 기법 중 배깅 (bagging : bootstrap aggregation)은 독립된 여러 모델을 동시에 실행한 뒤 개별 모델의 예측을 이용해서 최종으로 예측하는 방법이다.
배깅이 정규화 방법인 이유는 모델이 서로 독립일 때 예측 오차가 모델 수 이 비례해서 줄어들기 때문이다. 배깅은 모델의 종류와 관계없이 다양한 모델로 팀을 구성할 수 있고 성능을 높이려면 모델 간에 독립을 보장해야만 한다.
모델의 독립성을 보장하기 위해 훈련 데이터를 부트스트랩(bootstrapping)하여 모델별로 부트스트랩 데이터를 생성한다. 부투스트랩 데이터는 훈련 데이터에서 복원 추출해서 훈련 데이터와 같은 크기로 만든다.

부트스트랩

통계에서 부트스트랩은 표본 데이터로 모집단의 통계량을 추정할 때 통계량을 여러 번 ㄹ측정해서 오차 및 신뢰 구간을 추정하는 방식이다.

통계량을 측정할 때 원래의 표본 데이터에서 복원 추출 방식으로 새롭게 부트스트랩 샘플을 구성한 뒤 통계량을 측정한다. 매번 새롭게 구성된 부트스트랩 샘플로 통계량을 구하면 통계량의 분포를 구성할 수 있으므로 통계량의 오차와 신뢰 구간을 구할 수 있다.

여러 모델의 추론 결과를 이요하는 배깅의 추론 방식

추론 단계에서는 개별 모델의 결과를 집계해서 예측한다.

  • 일반적으로 회귀 모델의 경우 개별 모델의 결과를 평균해서 예측하는데 때에 따라 모델의 비중을 다르게 두고 가중 합산을 하기도 한다.
  • 분류 모델의 경우 가장 많이 나온 값으로 예측하는 다수결 투표 방식을 사용한다. 때에 따라 개별 모델을 임의로 선택해서 예측하거나 투표 방식을 변형해서 사용하기도 한다.

신경망 모델로 배깅할 때 다른 점

신경망 모델로 배깅할 때는 부트스트랩을 사용하지 않아도 된다.

  • 모델의 가중치를 랜덤하게 초기화하는 만믐 마치 다른 모델인 것과 같은 효과가 생기고 미니배치 방식을 사용함으로써 모델별로 다른 훈련 데이터셋을 사용하는 효과가 있기 때문이다. 인공 신경망 모델은 보통 앙상블 크기가 20이 넘지 않게 사용한다.

배깅의 정규화 효과

배깅의 정규화 효과를 확인하기 위해 개별 모델의 예측 오차가 배깅에서 어떻게 줄어드는지 살펴보자.
kk개의 회귀 모델로 배깅한다고 가정해보면 이때 개별 회귀 모델의 예측 오차 ϵi\epsilon_i는 평균이 0이고 분산이 vv이며 모델간의 공분산이 cc인 가우시안 분포를 따른다.

ϵiN(0,)(i=1,2,,k)\epsilon_i \sim N(0, \sum) \quad (i = 1, 2, \ldots, k)
E[ϵi2]=v,E[ϵiϵj]=c\mathbb{E}[\epsilon_i^2] = v, \mathbb{E}[\epsilon_i \epsilon_j] = c

회귀 모델에서 배깅의 예측은 개별 모델의 평균으로 계산하므로 배깅의 오차 ϵb\epsilon_b는 개별 모델의 오차의 평균이 된다.

ϵb=1ki=1kϵi\epsilon_b = {1 \over k} \displaystyle\sum_{i=1}^{k}{\epsilon_i}

부스팅

앙상블 기법에는 배깅 외에 부스팅(boosting)도 있다.
부스팅은 모델을 순차적으로 실행하면서 이전 단계에서 잘못 예측된 샘플의 가중치를 높여서 다음 단계에서 교정해 나가는 방식으로 모든 단계가 끝나면 각 단계의 결과를 가중 합산하여 최종 결과를 예측한다.
부스팅은 개별 모델들의 협업을 통해 모델의 용량을 키우는 방식이라고 할 수 있다.
배깅은 모델의 오차를 줄여주는 정규화 방식이지만, 부스팅은 큰 모델을 만드는 방식이며 정규화 방법은 아니다.

드롭아웃

드롭아웃(dropout)은 미니 배치를 실행할 때 마다. 뉴런을 랜덤하게 잘라내서 새로운 모델을 생성하는 정규화 방법이다.

  • 드롭아웃은 하나의 신경망 모델에서 무한히 많은 모델을 생성하는 배깅과 같다. 계산시간이 거의 들지 않고 다양한 모델에 쉽게 적용할 수 있는 강력한 정규화 기법이다.

드롭아웃은 배깅보다 성능이 좋을까?

드롭아웃으로 무한히 많은 모델을 생성할 수 있다면 드롭아웃은 배깅보다 성능이 좋을까?

  • 배깅은 서로 독립된 모델을 병렬로 실행해서 예측 오차를 줄이지만 드롭아웃은 모델간에 파라미터를 공유하기 때문에 모델간에 상관성이 생긴다. 따라서 모델 간의 독립성을 전제로하는 배깅보다 더 좋은 성능을 갖기는 어렵다. 하지만 드롭아웃은 배깅보다 실용적이다. 모델을 병렬로 실행하지 않고도 무한히 많은 모델의 평균으로 예측하는 효과가 있기 때문에 적은 자원으로 배깅의 정규화 효과를 볼 수 있기 때문이다.

학습 단계

드롭아웃은 미니 배치를 실행할 때마다 뉴런을 랜덤하게 잘라내서 매번 다른 모델을 생성한다.

  • 뉴런을 드롭아웃할 때는 뉴런의 50%이상은 유지되어야 한다.
  • 드롭아웃은 입력 계층과 은닉 계층에 적용하며 뉴런을 유지할 확률은 입력 뉴런은 0.8, 은닉 뉴런은 0.5정도로 지정한다.

드롭아웃을 하면 어떤 모델이 생성될까?


다음 그림과 같이 입력 뉴런이 2개 은닉 뉴런이 2개인 신경망에 드롭아웃을 적용해보자.
뉴런의 50%는 유지하고 나머지 50%는 드롭아웃 한다면 24개에 해당하는 16종류의 모델이 생성될 수 있다.

이진 마스크를 활용한 뉴런의 드롭아웃

훈련 단계에서 드롭아웃을 어떻게 적용하는지 살펴보자.

  • 먼저 미니배치를 실행할 때마다 계층별로 뉴런의 이진 마스크(bnary mask)를 생성한다. 이진 마스크는 뉴런 별 드롭아웃 여부를 나타내며 뉴런의 마스크값이 1이면 뉴런은 유지되고 마스크 값이 0이면 드롭아웃 된다.
    이러한 이진 마스크의 1과 0의 비율은 뉴런이 유지될 확률에 따라 정하며 계층의 출력에 이진 마스크를 곱하면 드롭아웃이 실행된다.
  • 계층 II의 드롭아웃은 다음과 같이 정의된다. 여기서 변수 pp는 뉴런을 유지할 확률이다.
    a(I)=activation((W(I))Tx(I)+b(I))a^{(I)} = activation((W^{(I)})^T x^{(I)} + b^{(I)})
    r(I)Bern(p)r^{(I)} \sim Bern(p)
    a~=a(I)r(I)\tilde{a} = a^{(I)} \otimes r^{(I)}
  • 계층 I에서 가중 합산과 활성 함수를 실행한 결과를 a(I)a^{(I)}에 저장한다.
  • 계층의 뉴런별로 베르누이 분포에서 난수를 발생시켜서 0또는 1을 갖는 이진 마스크 r(I)r^{(I)}을 생성한다. 그리고 a(I)a^{(I)}r(I)r^{(I)}을 요소별로 곱해서 드롭아웃을 적용한다.

추론 단계

추론 단계에서는 뉴런을 드롭아웃하지 않고 훈련 과정에서 확률적으로 생성했던 다양한 모델의 평균을 예측해야한다. 모델 평균을 어떻게 구하는지 살펴보자.

무한히 많은 모델의 평균 계산


다음과 같이 입력 뉴런이 2개이고 출력 뉴런이 하나인 신경망에 뉴런을 유지할 확률 p=0.5p = 0.5로 드롭아웃을 적용한다고 해보자.
이 경우 훈련 과정에서 다음과 같은 네 종류의 모델이 확률적으로 생성된다.

w1x+w2yw_1 x + w_2 y
w1x+0yw_1 x + 0 y
0x+0y0 x + 0 y
0x+w2y0 x + w_2 y

각 모델이 생성될 확률은 1/4이므로 네 모델의 평균을 계산하면 다음과 같은 결과를 얻을 수 있다.

E[a]=14(w1x+w2y)+14(w1x+0y)+14(0x+0y)+14(0x+w2y)E[a] = {1 \over 4}(w_1 x + w_2 y) + {1 \over 4}(w_1 x + 0 y) + {1 \over 4}(0 x + 0 y) + {1 \over 4}(0 x + w_2 y)
=12(w1x+w2y)= {1 \over 2}(w_1 x + w_2 y)
  • 모델 평균의 결과는 드롭아웃을 하지 않은 전체 모델의 출력 w1x+w2yw_1 x + w_2 y 와 뉴런 유지 확률 pp의 곱으로 표현된다.
    즉, 모델의 가중치를 pp로 스케일링해서 모델 평균을 계산하는 가중치 비례 추론 규칙(weight scaling inference rule)을 따른다. 따라서 추론 시에는 각 계층 II의 출력에 뉴런 유지확률 pp를 곱해주기만 하면 된다.
    a(I)=activation((W(I))Tx(I)+b(I))×pa^{(I)} = activation((W^{(I)})^T x^{(I)} + b^{(I)}) \times p

잡음 주입

데이터나 모델을 확률적으로 정의할 수 있다면 더 정확하게 추론할 수 있다.
하지만 애초에 데이터나 모델이 확률적으로 정의되지 않았다면 간단히 잡음을 넣어서 확률적 성질을 부여할 수 있다. 즉 현재 상태를 평균으로 보고 잡음으로 변형된 데이터를 생성해서 특정한 분포를 따르도록 만든다.
데이터나 모델에 확률적 성질이 생기면 다양성이 생기면서 정규화 효과가 생긴다. 확률적 성질을 부여하고 싶은 대상에 따라서 잡음을 주입하는 형태도 다양하다. 확률적 성질을 입력 데이터, 은닉 계층에서 추출된 특징, 모델 가중치, 레이블 등에 부여할 수 있으며 그만큼 다양한 정규화 기법이 잡음 주입 방식에 포함된다.

입력 데이터에 잡음주입

  • 입력 데이터에 잡음을 추가하는 것 : 일종의 데이터 증강 기법에 해당한다.
  • 입력 데이터에 아주 작은 분산을 갖는 잡음을 넣으면 가중치 감소와 동일한 정규화 효과를 보인다.

특징에 잡음 주입

  • 은닉 계층에서 추출된 특징에 잡음을 넣는 것은 데이터가 추상화된 상태에서 데이터 증강을 하는 것이다.
  • 추상화된 데이터에 확률적 성질을 부여하기 때문에 객체와 같은 상대적으로 의미있는 단위로 데이터 증강이 일어나서 성능이 크게 향상된다.

모델 가중치에 잡음 주입

  • 드롭아웃에서 뉴런을 제거할 때 확률적으로 가중치를 조절하기 때문에 가중치에 잡음을 넣는 것으로 또한 가중치의 잡음을 주입하는 것은 가중치의 불확실성과 관련이 있다.
  • 베이지언 신경망은 가중치의 분포를 학습하며 가중치의 불확실성을 표현한다. 만일 가중치 분포의 분산이 크다면 가중치의 불확실성이 높고 분산이 작으면 불확실성이 낮은 것으로 학습된 가중치 분포에서 가중치를 샘플링 하는 과정은 가중치에 잡음을 주입하는 과정과 같다.
  • 가중치에 잡음을 직접 더해서 가중치에 조금씩 변화를 주기도 한다. 이 경우 가중치의 그레디언트 크기를 작게 만드는 정규화 효과가 있고 학습이 진행될수록 그레디언트 크기가 점점 작아지므로 평평한 평지 위에 있는 최소 지점을 찾게 된다.

최소 지점이 평지에 있으면 왜 일반화 성능이 향상할까?


그림의 그래프와 같이 2차원 함수로 설명해 보면 검은색 함수는 훈련 데이터의 손실 함수이고 빨간색 함수는 테스트 데이터의 손실 함수이다. 빨간색 함수의 최소는 검슨색 함수의 최소에서 오른쪽으로 조금 이동한 곳에 있다고 하면 검은색 함수의 최소가 왼쪽에 있는 최소와 같이 평평한 곳에 있다면 빨간색 함수의 최소가 조금 이동한 위치에 있더라도 발생하는 손실은 작아진다. 반면 오른쪽에 있는 최소와 같이 최소 주변의 경사가 가파르다면 최소가 조금만 이동하더라도 발생하는 손실은 커진다.

소프트 레이블링

분류 문제에서 훈련 데이터의 레이블에 오차가 있을 경우 레이블에 일정한 크기의 오차를 반영해 주면 더 정확하게 예측할 수 있다.

레이블이 정확하지 않다면 어떤 현상이 발생할까?

  • 분류 모델의 학습 과정에서 모델이 타깃 클래스의 확률을 1로 나머지 클래스의 확률을 0으로 예측하도록 만들 것이다.
  • 그런데 레이블에 오차가 있다면 모델이 정확히 1이나 0으로 예측하지 못하기 때문에 계속해서 일정량의 손실이 발생하고 최적화가 이루어지지 않을 수 있다.
타깃클래스(1ϵ)타깃 클래스 (1- \epsilon)
다른클래스ϵ(k1)다른 클래스 {\epsilon \over (k-1)}

레이블이 정확하지 않다면 ϵ\epsilon만큼의 오차가 있다고 가정하고 타깃 클래스의 확률은 ϵ\epsilon만큼 작게 만들고 나머지 클래스들의 확률은 ϵ\epsilon을 배분해서 확률을 부여한다.
이런 방식을 소프트 레이블링(soft labeling)이라고 하며 레이블에 오차를 반영한 후 학습하면 모델 성능이 높이진다. 소프트 레이블링은 80년대부터 지금까지 사용하고 있는 정규화 방법이다.

0개의 댓글