overfitting을 막는 regularization
Regularization
명확한 수학적 정의는 없지만, 목적은 명확하다. 주된 목적은 over fitting 현상을 피하기 위함이다.
오버피팅은 학습 데이터를 너무 믿는 것을 의미한다.
- 그래서 테스트 데이터를 못맞추게 된다. 주객전도.
오버피팅 예시이미지
- 우리가 이것을 오버피팅이라고 할 수 있는 이유는 underline-function(초록색 선)이라는 정답이 어떻게 생긴지 알고 있기 떄문이다.
- 그러나 대부분의 상황에서는 underline-function이 어떻게 생긴지 모른다.
- 그래서 애초에 정답인 선이 주황색 선처럼 생겼을지도 모른다.
- 그렇기에 training-error가 줄어든다고 무조건 안좋은 상황은 아닌 것이다.
- training-error가 줄어드는데, test-error가 커질 때 오버피팅이 발생했다고 한다.
- 완벽한, optimal하게 overfitting을 막을 수 있는 방법은 없다.
- underline-function가 어떻게 생겼는지 모르기 때문에, 어떠한 경우에 오버피팅, 언더피팅이 나는지 알 수 없다.
- 즉, proxy(training-error - test-error)를 통해 알 수 있다. (간접적으로 밖에 모른다.)
- 데이터에 노이즈가 껴있을 때, 문제를 풀고자 하는 hypothesis 함수가 복잡하면 복잡할수록 오버피팅이 날 가능성이 높아진다. (2차함수보다 10차함수가 더 오버피팅이 날 가능성이 높다.)
- 그러나 가능성이 높아질 뿐, 10차함수가 훨씬더 표현력이 크기 때문에 적절히 사용만하면 훨씬 더 좋은 성능이 날 수 있다.
- 하지만 데이터에 노이즈가 많고, 적절한 regularizer를 걸지 않는다면 더 안좋을 수도 있다.
오버피팅의 대표적인 이유는 노이즈 때문이다. (random measurement error, 관측에러.)
- 노이즈는 언제나 Deterministic noise와 Stochastic noise가 섞여있기 때문에, 완벽하게 decomposition할 수 없다. 즉, 원래 시그널을 완벽하게 복원하는 것은 불가능하다 생각하면된다.
수학적인 툴을 이용
수학적인 툴을 이용해서 오버피팅이 어떻게 나고, 어떻게 낮출 수 있는지를 분석할 수 있다.
- vc dimension을 사용한다.
vc dimension
vc dimension이라는 것은 사용하고 있는 함수의 복잡도를 나타낸다.
- 예를 들어, 뉴럴넷의 레이어 수를 의미한다.
- in-sample error는 training error이다.
- out-of-sample error는 test error또는 validation error를 의미한다.
- 이 두개의 차이를 보통 Generalization performance라고 한다.
- 이것이 높아지는 것이 제일 제일 중요하다.
- 즉, regularization은 Generalization performance를 높이기 위한 것이 목적이다.
- x축은 vc dimension 즉, 함수의 복잡도를 나타내며 이는 뉴럴넷을 더 복잡한 것을 사용할 수록 오버피팅이 거짐을 의미한다.
8분 21초부터 다시 보기
오버피팅을 방지하는 법
- 데이터를 많이 모으기
- 그 어떤 방법보다 제일 중요하고, 데이터가 적다면 augmentation으로 뻥튀기 시켜야 한다.
- 적절한 capacity를 갖는 모델을 활용한다.
- 앙상블을 활용한다.
- 그 다음 테크닉이 들어간다.
- Droput, DropConnect, BatchNorm
Capacity 줄이기
- Architecture: 은닉층이나 레이어의 각 노드 줄이기 (네트워크 사이즈를 줄이기.)
- Early stopping: validation error가 줄어들다 다시 커지면 오버피팅이 일어나기 전에 학습 멈추기
- Weight-decay: 학습하는 모델의 파라미터를 너무 크게 하고 싶지 않은 것이다. 파라미터 자체가 너무 커지지 않도록 패널티를 추가한다. (L2, L1 penalty)
Dropout
- 랜덤으로 노드 비활성화
DropConnect
- Weight를 0으로 바꾸는 것
Batch Normalization
이게 정말 중요함. 웬만한 문제에서는 그냥 사용하면 됨.
- 미니 배치 학습을 할 때, 예를 들어 512개로 미니 배치를 한다하면 512개의 데이터의 statistics를 항상 zero-mean unit 가우시안으로 만드는 것이다.
- 전체 배치에 평균을 빼고 variance로 나누어주면 된다.
이점
- Learning rate를 늘려도된다. (보통은 늘리면 발산함)
- internal 뭐시기~ 때문에 보통은 발산하는데 ~
- Droput 안써도 됨.
- L2 Weight decat안써도 됨.
- learning rate decay를 빨리해도 잘된다.
- Local Response Normalization 안써도 잘된다.
결론
오버피팅은 언제나 일어난다.
- Data늘리기
- 파라미터 늘려보기
- 레이어 사이즈 늘려가며 줄여가며 학습해보기
- (256개의 노드가 있는 레이어를 하나 더 추가하고, 노드를 512개로도 늘려보고 1024개로도 늘려보고)
- 데이터가 적을 때는 정말 중요하다
문제에 어떤 regularization을 적용하는지는 감이 중요하다. 풀어본 사람만이 알 수 있음.
Regularization
Parameter Norm Penalties (weight decay)
- L2 parameter regularization: 제곱을 더한다
- L1 parameter regularization: 절대값을 더한다
멀티 태스크 러닝
- 같은 이미지가 들어갔는데 다른 아웃풋 찾음.
- shared 구조로 인해서 representation을 잘 찾을 수 있어서.
- 몇 가지 데이터가 연관된 다른 태스크에서는 각각 성능이 좋아질 수도 있음.
출처
https://www.edwith.org/deeplearningchoi/lecture/15299?isDesc=false https://kr.mathworks.com/discovery/overfitting.html