카테고리 없음

[andrew ng] Why Regularization Reduces Overfitting

ML.chang 2019. 8. 3. 17:17

왜 정규화가 과대적합 문제를 해결하고분산을 줄이는데 도움이 될까요?

어떻게 작동하는지에 관한 직관을 얻기 위해몇 가지 예제를 함께 살펴봅시다

이전 비디오의 높은 편향, 높은 분산

그리고 딱 맞는 경우의예시들이 기억나시나요

크고 깊은 신경망에 맞추는

경우를 살펴봅시다

크고 깊은 신경망에 맞추는

경우를 살펴봅시다

그렇게 크고 깊게 신경망을

그리지는 않았지만요

과대적합의 문제가 있는

신경망을 생각해봅시다

w와 b에 대한 비용함수 J는

1부터 m까지 손실의 합과 같습니다

정규화를 위해 이 추가적인 항을 더해주었습니다

가중치 행렬이 너무 커지지 않도록


막기 위해서입니다

그리고 이것을프로베니우스 노름이라고 부릅니다


그렇다면 매개변수의 L2 혹은

프로베니우스 노름을 줄이는 것이

왜 과대적합을 줄일 수 있을까요?

여기서 알 수 있는 것은

정규화에서 λ를 크게 만들어서

가중치 행렬 w를 0에 상당히 가깝게

설정할 수 있다는 것입니다

따라서 많은 은닉 유닛을

0에 가까운 값으로 설정해서

은닉 유닛의 영향력을 줄이게 됩니다

그런 경우에 훨씬 더 간단하고 작은 신경망이 될 것입니다

다양한 층을 저장하고 있긴 하지만

로지스틱 회귀 유닛에 가까워집니다

따라서 이런 과적합한 경우를

왼쪽의 높은 편향의 경우와

가깝게 만들어 줄 수 있습니다

그러나 중간의 딱 맞는 경우와 가깝게 하는

적절한 λ값을 찾는게 좋습니다

그러나 여기서 말씀드리고 싶은 것은

 λ의 값을 아주 크게하면

w는 0에 가깝게 설정된다는 것입니다

실제의 경우에서는

은닉 유닛의 영향력을 

0에 가깝게 줄임으로써

로지스틱 회귀에 가까운 네트워크를

만든다고 생각하면 됩니다

한 뭉치의 은닉 유닛을 완전히 0으로 만든다는 것은 아닙니다

실제로 모든 은닉 유닛을 사용하지만 각각의 영향력이 훨씬 작아진 것입니다

그러나 더 간단한 네트워크가 되는 것은 맞습니다

간단한 네트워크는 과대적합 문제가

덜 일어나게 됩니다

이 직관이 도움이 될지 모르겠지만

프로그래밍 예제에서 정규화를 구현할 때

이와 같은 분산의 감소를

결과로 발견하게 될 것입니다

 

 

 

왜 정규화가 과대적합을 막는데 도움을 주는지에 대한 또 다른 직관이 있습니다

tanh 활성화 함수를 사용한다고 가정해보겠습니다

즉 g(z) = tanh(z)인 경우입니다

이런 경우라면 z가 아주 작은 경우에는

 

즉 z가 작은 범위의 매개변수를 갖는 경우라면

tanh 함수의 선형 영역을사용하게 됩니다

z의 값이 더 작아지거나 커지면 활성화 함수는 선형을 벗어나게 됩니다

여기서 얻어낼 수 있는 직관은 정규화 매개변수인  λ가 커질 때

비용 함수가 커지지 않으려면 상대적으로 w가 작아질 것입니다

가중치 w^[l]이 작으면

z^[l]이 w^[l]a^[l-1]+b^[l]과

같기 때문에

z^[l]이 w^[l]a^[l-1]+b^[l]과

같기 때문에

w가 작으면 z도 상대적으로

작은 값을 가지게 됩니다

이 작은 범위에서 z가 상대적으로 작은 값을 갖게 되면

g(z)는 거의 1차원 함수가 됩니다

따라서 모든 층은 선형 회귀처럼 거의 직선의 함수를 갖게 됩니다

강의 1에서 봤듯이 모든 층이 선형이면 전체 네트워크도 선형입니다

따라서 선형 활성화 함수를 가진 깊은 네트워크의 경우에도 선형 함수만을 계산할 수 있게 됩니다

따라서 매우 복잡한 결정, 비선형 결정의 경계에 맞추기는 불가능합니다

이전 슬라이드의  높은 분산의 경우처럼 과대적합된 데이터 세트까지 맞추기는 어렵습니다

 

정리하자면 정규화 매개변수가 매우 크면

매개변수 w는 매우 작습니다

b의 효과를 무시하면 z의 값은

상대적으로 작습니다

z가 상대적으로 작고 작은 범위의 값을 가지기 때문에

tanh의 경우 활성화 함수는 상대적으로 선형이 됩니다

전체 신경망은 선형 함수로부터 그리 멀지 않은 곳에서 계산될 것입니다

즉 매우 복잡한 비선형 함수보다 더 간단한 함수입니다

따라서 과대적합의 가능성이 줄어듭니다

프로그래밍 예제에서 정규화를

직접 구현할 때는

이런 효과를 직접 볼 수 있을겁니다

정규화에 관한 논쟁을 마무리하기 전에

구현에 관한 팁 하나를 드리고 싶습니다

 

정규화를 구현할 때 비용함수 J의 정의를 살펴보았습니다

여기에 가중치가 너무 커지는 것을

막기 위한 추가적인 항을 추가했습니다

경사 하강법을 구현할 때

경사 하강법을 정의하는 한 가지 단계는

경사 하강법의 반복의 수에 대한 함수로

비용함수를 설정하는 것입니다

비용함수 J가 경사 하강법의 반복마다 단조감소하기를 원할 것입니다

정규화를 구현할 때 비용함수 J의 예전 정의,

 

즉 첫 항만을 그린다면 단조감소를 보지 못할 것입니다

따라서 경사 하강법을 디버깅할 때는 두 번째 항을 포함한 새로운 비용함수 J를

그리고 있는지 잘 확인하세요

그렇지 않다면 매 반복에서 J가 단조감소하는 것을 보지 못할 것입니다

여기까지 L2 정규화였습니다


딥러닝 모델의 훈련 중 제가 가장

많이 사용하는 정규화 기법입니다

딥러닝에서 가끔 드롭아웃이라는

정규화 기법을 사용하기도 합니다

다음 비디오에서 살펴봅시다