본문 바로가기

DeepLearning Specialization(Andrew Ng)/Improving Deep Neural Networks

[Week 1] 2. Regularizing your neural network

728x90
Regularizing your neural network
1. Regularization
2. Why regularization reduces overfitting?
3. Dropout Regularization
4. Understanding Dropout
5. Other Regularization

1. Regularization

 

앞서 살펴본 바에 따르면, Big Network(많은 layer와 많은 unit을 가지는) 를 Big Data로 학습시킬 수 있음에 따라

Bias, Variance 문제를 해결할 수 있지만, 더 많은 데이터를 확보할 수 없을 때 Regularization이 Variance를 줄이는 데

도움이 된다. 

 

1) Logistic Regression

 

L2 방식은 유클리드 거리를 이용하는 것으로 Weight 벡터의 모든 요소들을 제곱해서 더한 것을 이용한다.

L1 방식은 Weight 벡터의 모든요소들을 절대값을 씌워서 더한 것이며 잘 이용하지 않음.

참고로 L2 방식은 W를 sparse하게 만든다. 즉, W의 많은 요소들을 0으로 만든다. 이걸 차원축소에 이용할 수도 있겠지만 교수님은 이에 대해 대수롭지 않게 넘어가심. 신경안써도 될듯.

 

2) Neural Network

 

- NN(Neural Network)에서 W[l]은 행렬 형태임. 따라서 L2방식을 이용할 때, 모든 행과 열의 요소에 대해서 제곱하여 더해야 하므로 위와 같이 시그마가 2개임. 저기에 모든 층의 W 값을 제곱하여 더하려면 마지막에 layer에 대한 시그마가 추가되는 것. 왜인지는 모르겠지만 이를 선형대수학에서 L2방식이 아니라 Frobenius norm이라고 함. 신경안써도 됨.

 

- NN에서는 W를 업데이트 해야하는데, 이 때 Cost Function J 를 W에 대하여 편미분해야하므로 Cost Function J에 추가했던 Regularization 도 편미분해주어야 한다. 위의 보라색 값이 바로 그것. 결과적으로 기존 J 를  미분한거에서 Regularization을 미분한 값을 더해주면 그것이 dW[l]이 된다. 

 

- 이를 전개해보면 원래 update에 비해 W[l]값에 패널티가 생긴 것을 확인할 수 있고, 이를 통해 정규화하는 것.

 


 

2. Why regularization reduces overfitting?

 

- 쉽게 말하면 위와 같은 원리를 통해서 W에 penalty를 주어서 W를 0과 가까운 방향으로 update한다.

 

- activation 함수로 tanh를 이용한다고 했을 때(다른 걸 이용해도 함수별로 선형적인 부분과 비선형적인 부분을 구분해서 이해하면 될 듯), 0과 가까운 부분이 선형적인 부분임을 할 수 있다.  빨간 분이 선형이고 나머지가 비선형적인 부분이다. 

 

- 감마값을 올릴 수록 W 는 0에 가까워지고 마찬가지로 Z도 0에 가까워진다. (이를 감소한다고 표현하면 음수가 되는 것과 헷갈리므로 절대값이 작아진다고 이해하면 좋을 듯)

 

- 즉 감마값을 올릴 수록 Z가 0에 가까워지고 산출값인 A 는 선형적인 함수의 결과물이 된다. 즉, Neural Network가

'선형화' 되는 것이다. 이렇게 되면 감마값을 올릴 수록 NN은 선형화되어 선형함수에 가까운 함수가 되므로 복잡한 모양으로 Data를 Fit하지 못한다. => Regularization!

 

- 참고로 이제는 J를 Regularization 값을 추가하여 새로 정의했으므로 기울기 강하 debugging을 위해(기울기 강하가 잘되고 있는지 살펴보기 위해) iteration별(반복횟수별) Cost값을 측정하여 그래프를 그린다고 했을 때, 새로 정의한 Cost Function인 J를 기준으로 측정해야한다. 

 


 

3. Dropout Regularization & 4. Understanding Dropout

 

1) 기본 개념

 

-기본 개념은 층별로 keep.prob이라는 확률을 정해서 그 확률로 노드를 제거 하는 것. 이를 적용하면 기존보다 작은 network로 학습을 하므로 Regularization할 수 있다. 

 

cf) 기본적으로 network가 커지면(unit이든 layer든) 더 복잡한 패턴을 학습할 수 있고 이건 overfitting과 직접적인 연관이 있다. 

 

- 애초에 노드를 제거하고 시작하는 것과는 다르다. Dropout 방식은 iteration 마다(backward propagation, forward propagation 할때 모두) 그 확률에 따라 random하게 노드를 제거하므로, 매번 제거되는 노드가 다르다.

이렇게 되면 제거하고 시작하는 것과는 다르게 모든 W가 update되는데, 0으로 만들 unit을 랜덤하게 뽑으므로 층별로 W가 어느정도 균형있게 update된다. 특정 유닛에 가중치가 집중되지 않기 때문.

 

=> 즉, 각 층의 W 끼리 어느 정도 비슷해지므로 결과적으로 L2 값이 줄어든다. 왜냐하면 L2값은 유클리드 거리인데 W값이 비슷해지므로 최소화 되는 것. 

 

2) 코딩 방식

 

-  a3는 layer3의 a값들이고, d3는 layer3의 형태를 똑같이 만들었으나 0 혹은 1로 rapping할 값이다. 

- 코드를 살펴보면 np.random.rand(shape) 함수는 특정형태로 array를 만드는데, 그 값들을 0~1 중 무작위로 뽑아 임의의 실수로 한다.  결과적으로 그 값이 설정한 keep.prob 값보다 작으면 d3는 True(1), 크면 False(0)로 할당된다. 

- 이렇게 a3와 모양은 같으나 1또는 0으로 이루어진 d3는 a3와 element-wise되어 각 위치에 맞는 값들끼리 곱해지고, 

다시 a3에 할당된다. 

- 결론은 d3에 0이 할당되면 a3 값이 0으로 변하고, 1이면 유지되는 것. 

- 그래서 keep.prob를 unit을 유지할 확률이라고 한다 이말이야.

 

3) 기타

 

(이 그림은 W를 분산시킨다는 앞선 설명에도 참고하면 된다.)

 

- 그림과 같이 층별로 keep.prob를 다르게 설정할 수 있으며, 많은 유닛을 포함하는 층에는 낮은 확률을 책정하여 overfitting을 피할 수 있도록 하고, 유닛이 적은 층에는 높은 확률을 책정하여 underfitting을 피한다. 

 

- A[0] 즉 입력층에도 적용가능하나 보통 높은 확률을 책정

 

- debugging하기 위해 iteration-Cost 그래프를 그리고 싶을 때에는 keep.prob을 모두 1로 하고 전체 유닛에 대해 측정한다. 마찬가지로 Test time에도 매번 결과가 달라지는 것을 막기 위해 전체 유닛으로 측정한다. 그렇지 않으면 그냥 noise가 될 뿐임. cost를 여러번 구해서 평균 낼 수도 있으나 그닥 효율적이지는 않음. 

 

- Computer-Vision 분야는 데이터가 부족한 경우가 많아 overfitting이 일어날 확률이 높다. 따라서 dropout 방식을 많이 씀. 

 

cf) 데이터가 부족하면 overfitting이 일어나기 쉬움. 구조는 정해져 있다고 가정할 때, 데이터가 적으면 그에 맞출 확률이 높으나, 데이터가 정말 많아지면 그에 모두 맞출 수는 없기 때문에 overfitting이 줄어드는 효과. 

이 원리 때문에 overfitting을 막기 위해서는 데이터를 많이 수집하라는 것이다 이말입니다.

 


5. Other Regularization

 

1) Data Augmentation

 

- 사진을 분석할 경우에, 기존 사진을 돌리거나 휘게하는 등의 방법을 통하여 Training Data를 늘리는 것이다.

- 이렇게 하면 학습모델은 기존 데이터와 중복되는 데이터를 많이 학습하게 되고 모델은 Augmentation한 데이터에 맞게 보수적으로 학습하게 된다. 즉, 만약 y=1(cat)인 사진을 엄청나게 많이 늘려서 학습시켰다면 그래프 상에서 cat 쪽 part가 엄청 많아지므로 그래프는 좀 더 y=1 방향으로 수정된다. 말로 표현하기 어렵네....

 

2) Early Stopping

 

- 데이터를 무한정을 학습시키는 것이 아니라 dev error가 최소인 지점까지 혹은 그대로인 지점까지만 학습하는 것.

- 즉, 계속 학습시키면 train set 에 딱 맞는 모델이 되었을텐데 그것을 방지.

- 이는 iteration이 반복되는 도중에 W가 0에서 너무 멀어지는 것을 중간에 멈춘다는 원리를 통해 달성하는 것.

 

- 단점: 

Machine Learning은 

1. Optimize cost function J

2. Not overfit 

 

이 두 단계로 나누어 볼 수 있는데, 두 단계는 상호독립적으로 하나씩 이루어가야함. 즉, cost function을 최소화하고 최소화하는 W와 b를 찾은 후에 overfit 되지 않도록 hyper parameter인 최적의 감마값을 찾아주는 것이 예이다(물론, J를 Regularization을 적용한 상태이어야 겠지...)

즉, 학습을 시켜놓고 여러가지 hyper parameter를 찾아야 복잡하지 않고 소정의 목적을 달성하기 쉬움. 

 

그런데, Iteration은 두 단계 모두와 관련이 있음. 

 

그래서 교수님은 L2방식을 선호. 감마값을 찾기 위한 Computational Cost가 있긴하지만...

 

 

 

질문과 비판은 언제나 환영입니다. 많이 꾸짖어 주십쇼.

728x90