본문 바로가기
Deep Learning

Deep Learning 미래연구소 5주차 수강후기

by 자라자 2020. 8. 2.

미래연구소 홈페이지: https://futurelab.creatorlink.net/

 

*본 포스팅에 포함된 그림의 출처는 Andrew Ng 교수님의 Coursera Deep Learning specialization 과 미래연구소의 자체 제작 과제입니다.

 

 

5주차 수업내용을 정리해보겠다.

 

 

 

4주차 과제 복습

NN의 복잡성을 높이기 위해 nonlinear activation function을 썼다.

 

zero initialization의 문제점에는 두 가지 문제가 있다. 하나는 행이 대칭이 되면서 여러 개의 노드를 넣는 의미가 없어지는 점. 두 번째는 값이 0이기 때문에 gradient descent 가 계산이 되지 않는 점(dw가 0이 되어서). 그것을 random initialization으로 극복을 했다.

 

learning rate가 클 때와 작을 때 장단점에 대해서도 배웠는데, 클 때는 빨리 근처에 다가가지만 주변부에서 발산한다.

 

러닝레이트를 하이퍼파라미터라고도 한다. 

 

 

Hyper parameter vs. parameter

 

Deep learning 과정에서 hyper parameter와 parameter가 있다.

Hyper parameter는 쉽게 말해서 iteration에 의해서 수정되지 않는 변수를 의미한다. 예를 들면 learning rate, number of iteration(Epoch), number of layers, number of nodes, activation function 등이 있다. 

parameter는 iteration에서 수정되는 변수를 의미한다. logistic regression에서 다뤘던 w, b cost 등의 예가 있다.

 

Hyper parameter는 iteration에 의해 수정되지 않으므로 사람이 직접 수정을 해줘야 한다. 이 과정을 tune이라고 한다. 반면 parameter는 iteration에 의해 cost가 줄어드는 방향으로 바뀌는데, 이 과정을 update라고 한다.

 

==> 따라서 Hyper parameter를 잘 조절하는 것이 deep learning의 핵심인데, 가장 좋은 효율을 내는 마법 같은 공식은 존재하지 않는다(NO FREE LUNCH!!) 다만 몇 가지 대표적인 최적화하는 방식이 있을 뿐이다. 모든 것은 경험적으로 다뤄야 한다. 뿐만 아니라 Hyper parameter를 조절할 때는 단 한가지의 변수만 조절해야 한다. 두 가지 변인을 동시에 바꾸면서 시뮬레이션을 진행하면 안된다. 이를 empirical process라고 한다.

 

 

 

Holdout validation 

 

Holdout의 뜻은 '협조를 거부하다'라는 뜻이 주된 뜻이지만 숨겨둔 카드라는 은어가 있다. 즉 data를 training에 다 쓰지 않고 남겨뒀다가 검증을 위해 쓰는 방식을 의미한다. keras에서는 training을 fit이라고 하고, validation을 evaluate라고 한다. 

 

Dataset을 2가지(training set, test set) 또는 3가지(training set, validation set, test set) 로 나눈다.

 

training set: 모델을 학습시키는 data. 최적의 parameter를 찾는 과정이다. gradient descent를 통해서 parameter를 update한다.

 

validation set(development set): 내가 선택한 모델(hyperparameter의 조합)이 최적의 모델인지 검증하기 위한 데이터이다. 이 data를 통해 hyperparameter를 평가하고 tuning할 수 있다. gradient descent하지는 않고 hyperparameter만 검증한다. 일종의 모의고사 개념이다. 

 

보통 10000개 정도의 validation(test data도 마찬가지) data가 있으면 충분하다고 판단하므로, 이를 초과하는 양의 데이터가 있을 경우 training data에 힘을 실어준다.

 

test data는 용어 그대로 최종적으로 모델의 성능을 확인하는 data이고, 단 한 번만 evaluate한다. 이 data로 gradient descent하지 않는다. 모의고사가 아닌 실전이라고 생각하면 된다.

 

Holdout validation은 2가지 방법으로 할 수 있는데, python의 slicing을 이용하거나 scikit learn의 train_test_split을 이용한다. 이에 대해 Jupyter lab으로 실습을 했다. 

 

 

Overfitting에 관하여

 

우선 Fit이란 train과 동의어이다. 통계 쪽에서는 train이라는 용어를, CS에서는 fit이라는 용어를 사용한다. data를 학습하는 과정을 의미한다.

 

Underfitting vs overfitting

underfitting은 주어진 training data에 대한 성능이 안좋은 것을 의미한다.

그리고 train할수록 data를 잘 맞추게 되는데, 과도하게 학습을 진행시키면 모델이 overfitting되어 향후 존재하는 unseen data에 잘 맞지 않게 된다.

 

이 때 참값들과 추정값들의 차이를 bias라고 하고, 추정값들의 흩어진 정도를 variance라고 한다. 알고리즘이 high bias이면 training data를 잘 못맞추는 것이고 high variance이면 dev data에서 에러가 높은 것이다.