training 속도를 빠르게 할 수 있는 테크닉들을 알아보자.
x input 벡터들의 평균이 0이 되도록 원점으로 training set을 이동시킨다.
feature x1 이 feature x2보다 더 넓은 편차를 갖기 때문에 이를 조정해준다 (normalization)
(training, test set모두 동일한 뮤와 시그마로 normalization을 거쳐야 한다.)
normalization을 거치지 않은 데이터와 거친 데이터에 대해 gradient descent과정을 살펴보면 다음과 같다. 더 빠르게 최적화가 진행될 수 있다.
unit이 두개인 layer가 9개 있는 model을 생각해보자.
만약 w[l]의 모습이 [[1.5, 0], [0 ,1.5]]라면 y는 엄청나게 explode하게 된다.
반면 w[l]이 [[0.5, 0],[0 ,0.5]]라면 y는 아주 작은 값으로 vanish할 것이다.
이런 경우에 gradient도 매우 커지거나 작아지게 된다. 이는 deep한 neural network에서 쉽게 겪는 문제중 하나이다.
feature가 많을 때는 wi의 크기를 작게해서 y^을 작게 만들 수 있다.
wi의 variance가 2/n이 되도록 weight를 initialize하는 것이다. ReLU를 사용한다면 왼편의 방법으로 weight를 initialize한다. 이런 방법으로 gradient의 급격한 explode나 vanish를 줄일 수 있다.
backpropagation이 잘 implement되었는지 확인하기 위해 gradient checking에 대해서 공부해보자.
가장 먼저 weight, bias vector들을 하나의 세타 벡터로 만든다.
두번째로 모든 dW, db를 마찬가지로 d세타 벡터로 만든다.
concatenate한 세타를 가지고 추정 기울기를 구한 다음 실제 gradient와 비교해서 둘의 차이가 충분히 작은지 확인하는 것이다.
gradient checking은 많은 연산이 소요되기 때문에 debug할때만 필요에 따라 잘 사용하도록 하자.
참고로 dropout에서는 사용이 불가능하다. dropout을 끄고 확인을 하던지 해야 한다.
regularization을 사용하고 있다면 cost J(w,b)를 쓸때 regularization을 빼먹지 않도록 하자
'ComputerScience > Machine Learning' 카테고리의 다른 글
AI - 6. Uncertainty (0) | 2021.10.12 |
---|---|
DeepLearning 2-2-1 (0) | 2021.10.06 |
DeepLearning 2-1-1 (0) | 2021.10.05 |
AI - 5. Fuzzy Logic (0) | 2021.10.01 |
AI - 4. 전문가 시스템 (0) | 2021.09.17 |