Do it! 딥러닝 교과서

Chapter05 초기화와 정규화

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

가중치 초기화

상수 초기화

최적해에 관한 사전 정보가 없을 때 생각할 수 있는 가중치 초기화 방법 중 하나

1. 가중치를 0으로 초기화한 경우 

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

2. 가중치를 0이 아닌 상수로 초기화한 경우

: 은닉 뉴런에 입력과 가중치가 같기 때문에 가중 합산 결과도 같고 활성 함수의 실행 결과도 같다. 즉, 실제 뉴런은 n개지만 마치 하나의 뉴런만 있는 것처럼 똑같이 작동한다.

: 가중치를 모두 같은 상수로 초기화하면 신경망에 대칭성이 생겨서 같은 계층의 모든 뉴런이 똑같이 작동하므로, 여러 뉴런을 사용하는 효과가 사라지고 ㅎ나의 뉴런만 잇는 것과 같아진다.

→ 모델을 크게 설계했더라도 모든 계층에 뉴런이 하나인 아주 작은 모델과 같아진 만큼 성능에 심각한 제약 생김.

 따라서 대칭성을 피하기 위해선 가중치를 모두 다른 값으로 초기화해야 한다.

가우시안 분포 초기화

가중치를 표준 가우시안 분포 N(0,1)를 따르는 난수로 생성

1. 가중치를 아주 작은 난수로 초기화한 경우

: 입력 데이터가 여러 계층을 지날수록 점점 0에 가깝게 변하며, 값이 0이 되는 순간 뉴런의 가중 합산이 0이 되기 때문에 가중치를 0으로 초기화 했을 때와 비슷한 현상 발생

: 신경망이 의미 있는 출력을 만들지 못하고 학습도 진행되지 않는다.

2. 가중치를 큰 난수로 초기화한 경우

: 뉴런의 출력이 커지고 데이터가 계층을 여러 번 통과할수록 출력은 점점 커지며 활성함수 하이퍼볼릭 탄젠트가 1과 -1사이에서 포화한다. 

: 하이퍼볼릭 탄젠트의 그레이디언트도 0으로 포화하여 그레이디언트 소실이 발생되고 학습이 중단된다

 

따라서 데이터가 계층을 통과하더라도 데이터의 크기를 유지해주는 가중치로 초기화해야 한다.

▶ Xavier 초기화 방식

: 시그모이드 계열의 활성 함수를 사용할 때 가중치를 초기화하는 방법

: 입력 데이터의 분산이 출력 데이터에서 유지되도록 가중치를 초기화

→ 신경망의 활성 함수가 시그모이드 계열일 때 Xavier 초기화를 적용하면 입력 데이터가 분산을 유지하면서 흘러가게 되므로 출력값이 0으로 변한느 현상도, 1과 -1로 포화되는 현상도 없어진다. 결과적으로 그레이디언트 소실이 사라져서 신경망 학습이 원활히 진행된다.

▶ He 초기화

: 활성함수가 ReLU일 때 Xavier 초기화를 적용해 보면, 입력 데이터가 계층을 통과하면서 분산이 점점 줄어들어 출력이 0이 되는 현상 발생

: 활성함수가 ReLU일 때 Xavier 초기화의 한계점을 개선한 방식

: ReLU를 사용했을 때 출력의 분산이 절반으로 줄어들기 때문에 가중치의 분산을 두배로 키운다.

 

정규화

최적화 과정에서 최적해를 잘 찾도록 정보를 추가하는 기법

1. 최적해가 어떤 공간에 있는지 알려주어 빠르게 찾을 수 있도록 한다.

2. 손실 함수를 부드럽게 만들어 최적해로 가는 길을 잘 닦아주기도 하고, 최적해 주변을 평평하게 만들어서 새로운 데이터에 대해서도 모델이 좋은 성능을 갖도록 만들어 죽디ㅗ 한다.

3. 모델과 데이터에 확률적 성질을 부여해서 비슷하지만 조금씩 다른 다양한 상황에서 학습하는 효과를 줄 수 있다.

▶ 일반화 오류

일반화 : 훈련 데이터가 아닌 새로운 데이터에 대해 모델이 예측을 얼마나 잘하는지를 나타낸다.

일반화 오류 : 모델의 훈련 성능과 검증/테스트 성능의 차

일반화 오류가 적을수록 일반화가 잘 된 모델

→ 따라서 정규화는 일반화를 잘하는 모델을 만드는 기법이라고도 한다.

▶ 정규화 접근 방식

1. 모델을 최대한 단순하게 만든다.

: 단순한 모델은 파라미터 수가 적어서 과적합이 덜 생긴다.

2. 사전 지식을 표현해서 최적해를 빠르게 찾도록 한다.

3. 확률적 성질을 추가한다.

: 데이터 또는 모델, 훈련 기법 등에 확률 성질을 부여하여 조금씩 변화된 형태로 데이터를 처리함으로써 다양한 상황에서 학습하는 효과를 줄 수 있다.

4. 여러 가설을 고려하여 예측한다.

: 하나의 모델이 가질 수 있는 편향을 제거하여 오차를 최소화하고 공정하게 예측할 수 있다.

 

배치 정규화

▶ 내부 공변량 변화

: 데이터 분포가 보이지 않는 요인에 의해 왜곡되는 현상

※ 내부 공변량 : 분포를 결정하는 보이지 않는 요인

→ 내부 공변량이 바뀌면 각 계층의 데이터 분포가 우너래 분포에서 조금씩 멀어진다. 그 결과 하위 계층의 작은 변화가 상위 계층으로 갈수록 큰 영향을 미치게 된다.

▶ 배치 정규화 단계

※ 배치 정규화 : 데이터가 계층을 지날 때마다 매번 정규화해서 내부 공변량 변화를 없애는 방법

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

  •  표준 가우시안 분포로 정규화하므로 데이터의 크기가 작아지면서 내부 공변량의 변화도 작게 만들 수 있다.
  • 그러나 모델이 표현하려던 비선형성을 제대로 표현할 수 없는 문제가 생길 수 있다.

원래 분포로 복구

  • 표준 가우시안 분포로 정규화할 때 생기는 문제로 인해 다시 원래 데이터의 분포로 복구해야 한다.
  • 평균과 표준편차는 모델의 학습과정에서 따로 구해야 한다.

▶ 배치 정규화 알고리즘

미니배치 평균과 분산을 구해서 표준 가우시안 분포로 정규화 수행한 뒤, 다시 학습된 평균과 표준편차를 이용해서 원래 분포로 복구한다.

배치 정규화 수행 위치

1. 뉴런의 가중 합산과 호라성 함수 사이에서 수행

2. 활성 함수를 실행한 뒤에 배치 정규화를 수행

3. 가중 합산한 뒤 배치 정규화

일반적으로 3번의 경우를 적용하지만, 모델의 성능을 세밀하게 개선하려먼 활성 함수 이후에 적용했을 때 성능도 검증해 볼 필요강 있다.

▶ 이미지 정규화 기법

배치 정규화를 이미지에 적용할 때는 채널 단위로 정규화를 수행한다.

RNN에서는 이미지 샘플별로 정규화하는 방식인 계층 정규화를 사용한다.

GAN에서는 샘플의 채널별로 정규화하는 인스턴스 정규화 사용하기도 하며, 미니배치 크기가 작을 경우 샘플의 채널 그룹을 나눠서 정규화하는 그룹 정규화를 사용하기도 한다.

▶ 배치 정규화의 우수성

1. 내부 공변량 변화가 최소화되므로 그레이디언트 흐름이 원활해지고 학습이 안정적으로 진행된다.

2. 초기화 방법에 대한 의존도가 낮아지고 높은 학습률을 사용해도 된다.

3. 어떤 샘플의 조합으로 미니배치를 구성하는지에 따라 데이터가 조금씩 변형되어 확률적 성질이 생기고 그에 따라 모델의 성능이 높아진다.

4. 배치 정규화는 손실과 그레이디언트 변화를 제약하여 곡면을 부드럽게 만들어 줌으로서 모델의 학습 성능이 향상된다.

 

가중치 감소

학습과정에서 작은 크기의 가중치를 찾게 만드는 정규화 기법

▶ 가중치 감소 적용 방식

손실함수에 가중치의 크기를 표현하는 정규화 항을 더한다. 정규화 항을 더함으로써 최적호 과정에서 원래의 손실 함수와 함게 정규화 항도 같이 최소화 되므로 크기가 작은 가중치 해를 구할 수 있다.

  • L1 정규화 (라소 회귀) : 가중치의 분포 라플라스
  • L2 정규화 (릿지 회귀) : 가중치의 분포 가우시안

▶ 정규화 효과

  • L2 정규화의 경우 손실 함수가 어떤 방향에 있든 손실 함수가 주황색 동그라미에 닿을 확률은 같기 때문에 최적해는 원점 주변에 존재
  • L1 정규화의 경우 손실 함수가 다이아몬드의 모서리에 먼저 닿을 확률이 사선에 닿을 확률보다 높기 때문에 최적해가 특정 차원의 축 위에 있을 가능성이 높다. 이 경우 최적해가 존재하는 축을 제외한 나머지 축의 좌푯값은 0이 되므로, 좌표의 대부분이 0으로 채워진 희소한 해를 가진다.

 

조기 종료

모델이 과적합되기 전에 훈련을 멈추는 정규화 기법

보통 에폭(epoch)단위로 성능 검증을 하며 에폭보다 자주 검증해야 할 때는 배치 실행 단위로 검증하기도 한다.

▶ 조기 종료 기준

1. 모델의 성능이 향상하지 않더라도 바로 종료해서는 안된다.

2. 일시적인 성능 변동이 아닌, 지속적인 성능의 정체 또는 하락이 판단되면 그때 종료하도록 한다.

3. 어떤 성능을 기준으로 조기 종료를 할 것인지 정해야 한다.

▶ 조기 종료의 정규화 효과

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

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

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

 

데이터 증강

훈련 데이터셋을 이용해서 새로운 데이터를 생성하는 기법

▶ 데이터 증강 기법

훈련 데이터를 조금씩 변형해서 새로운 데이터를 만드는 방법

 데이터 증강 규칙을 사람이 정할 경우 증강된 데이터가 성능에 최적인지 검증 필요

훈련 데이터의 분포를 학습해서 생성모델을 만든 뒤에 새로운 데이터를 생성하는 방법

훈련 데이터의 분포를 따르는 검증된 데이터를 바로 얻을 수 있고 생성 모델을 이용하면 더 쉽게 현실감 있는 데이터로 합성하거나 변환할 수 있다.

 

데이터 증강은 훈련에서 실시간 데이터를 증강하며, 이때 확률적인 방식으로 매번 다른 형태가 되도록 변형하는 방식으로 실행하면서 마치 무한히 많은 데이터가 있는 것과 같은 효과를 볼 수 있다.

▶ 클래스 불변 가정

데이터를 증강할 때 클래스가 바뀌지 않도록 해야 한다는 가정

▶ 데이터 증강 방식 선택

데이터 증강을 어떤 조합으로 할지는 성능 검증을 통해 찾아내야 한다.

자동 데이터 증강 : 모델의 성능을 최대화하는 데 필요한 데이터 증강 정책을 강화 학습이나 진화 알고리즘 등으로 학습해서 자동으로 생성

 

배깅

앙상블 : 여러 모델을 실행해서 하나의 강한 모델을 만드는 방법

앙상블 기법 중 배깅 : 독립된 여러 모델을 동시에 실행한 뒤 개별 모델의 예측을 이용해서 최종으로 예측하는 방법

▶ 배깅의 원리

모델의 종류와 관계없이 다양한 모델로 팀을 구성할 수 있다.

모델의 독립성을 보장하기 위해 훈련데이터를 부트스트랩하여 모델별로 부트스트랩 데이터를 생성한다.

 

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

1. 추론 단계 : 개별 모델의 결과를 집계해서 예측

2. 회귀모델 : 개별 모델의 결과를 평균해서 예측 또는 모델의 비중을 다르게 두고 가중 합산

3. 분류모델 : 가장 많이 나온 값으로 예측하는 다수결 투표방식

 

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

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

▶ 배깅의 정규화 효과

모델이 서로 독립이 아니라면 : 모델의 오차와 같은 분산을 가진다. 따라서 모델 간에 상관성이 높으면 배깅했을 때 오차가 줄어들지 않는다.

모델이 서로 독립이라면 : 공분산이 0이므로 앙상블 오차는 모델 수 에 비례해서 줄어든다.

→ 배깅을 할 때 개별 모델의 독립을 보장한다면 모델 수에 비례해서 오차를 줄일 수 있다.

 

드롭아웃

미니배치를 실행할 때 마다 뉴런을 랜덤하게 잘라내서 새로운 모델을 생성하는 정규화 방법

계산 시간이 거의 들지 않고 다양한 모델에 쉽게 적용할 수 있는 강력한 정규화 기법이다.

 

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

배깅은 서로 독립된 모델을 병렬로 실행해서 예측 오차를 줄인다.

드롭아웃은 모델 간에 파라미터를 공유하기 대문에 모델 간에 상관성이 생긴다.

따라서 모델 간의 독립성을 전제로 하는 배깅보다 더 좋은 성능을 갖기는 어렵지만 드롭아웃은 배깅보다 실용적이다.

▶ 학습 단계

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

뉴런을 드롭아웃 할 때는 뉴런의 50%이상은 유지되어야 한다.

드롭아웃은 입력계층과 은닉계층에 적용하며, 입력 뉴런은 0.8, 은닉 뉴련은 0.5의 확률로 지정한다.

▶ 추론 단계

뉴런을 드롭아웃하지 않고 훈련 과정에서 확률적으로 생성했던 다양한 모델의 평균을 예측한다.

 

무한히 많은 모델의 평균 계산 : 가중치 비례 추론 규칙을 따른다. 추론 시에는 각 계층 l의 출력에 뉴런 유지 확률 p를 곱해주기만 하면 된다.

역드롭아웃 : 훈련 시점에서 각 계층의 출력을 미리 p로 나눠 원래의 추론 코드를 그대로 사용, 각 계층 l의 출력을 p로 나눠준다.

 

잡음주입

데이터나 모델이 확률적으로 정의되지 않았다면 간단히 잡음을 넣어서 확률적 성질을 부여한다.

▶ 잡음주입방식

입력 데이터에 잡음 주입 

데이터 증강 기법에 해당

 

특징에 잡음 주입

은닉 계층에서 추출된 특징에 잡음을 넣는 것은 데이터가 추상화된 상태에서 데이터 증강을 하는 것으로 볼 수 있다.

 

모델 가중치에 잡음 주입

ex) 드롭아웃

가중치에 잡음을 주입하는 것은 가중치의 불확실성과 관련이 있다.

 

최적해가 평지 위에 있으면 좋은 이유

테스트 함수의 손실이 작아지기 때문에

▶ 소프트 레이블링

레이블이 정확하지 않은 경우 : 모델이 정확히 1이나 0으로 예측하지 못하기 때문에 계속해서 일정량의 손실 발생 & 최적화 이루어지지 않음

레이블에 잡음 주입 : e만큼의 오차가 있다고 가정하고, 타깃 클래스의 확률은 e만큼 작게 만들고 나머지 클래스들의 확률은 e을 배분해서 확률을 부여한다. = 소프트 레이블링