5기(210102~)/A팀

모두의 딥러닝2 Lec 14~17 review

KAU-Deeperent 2021. 2. 5. 07:05

안녕하세요? A조 발표를 맡은 홍혜선입니다.

강의 내용은 14~17강의 전반적인 내용과 조별 회의에서 다뤘던 내용을 중심으로 준비했습니다.

먼저 저는 강의별로 내용을 정리했습니다.

 

 

14강에서는 ReLU를 다뤘습니다.

 기존에 사용했던 Sigmoid는 양 끝 Gradient 0에 수렴하는 값을 가지기에 Vanishing Gradient 현상이 일어날 수 있습니다. Vanishing Gradient는 다음 사진과 같이 여러 레이어를 쓸 때 Backpropagation으로 Gradient가 소멸되는 현상입니다.

 

 

그럼 ReLU의 어떤 특징이 Vanishing Gradient문제를 해결할 수 있었을까요?

 ReLUx0보다 작을 때 0을 출력하고, X0보다 클 때 자기 자신 출력합니다. 그래프로 나타내면 다음과 같으며, torch.nn.relu(x)를 이용해서 사용할 수 있습니다. 그 외에도 다음과 같이 다양한 Activation function이 있습니다.

 

 

다음은 이번 주 조사해야 했던 내용을 다루겠습니다.

 Activation function을 왜 사용하는 가에 대한 답변에 대해서 간단히 말하자면 Data를 비선형으로 바꾸기 위해서입니다. 자세한 내용은 다음 화면을 참고하시길 바랍니다.

 

 

Activation function의 종류에 대해서 설명하겠습니다.

 

다음은 Sigmoid < tanh < relu 순으로 성능이 좋은 이유입니다.

 

 

Optimizer는 다음 그림을 참고하시길 바랍니다.

 

 

 다음은 코드에 적용한 결과입니다. Layer3개 적용하고, Activation functionReLU

로 했을 때, 정확도가 증가하는 것을 확인할 수 있습니다.

 

 

15강은 Weight initialization을 다뤘습니다.

 Weight initialization을 이용하면 학습이 잘 되고 성능이 뛰어나며, 초기에는 RBM을 이용해서 초기화하는 DBN구조를 이용했습니다.

 

 

 

 요즘에는 Xavier / He initializaion방식 이용하며, 그 전에는 무작위로 초기화 하였지만/ Xavier는 레이어의 특성에 따라서 초기화 합니다. 강의에서는 Xavier / He initializaion의 차이점이 N out의 유무로 설명했지만 더 자세히 알아보겠습니다.

 

 

 

 

Xavier를 코드로 구현한 것을 살펴보겠습니다.

 Xavier를 사용하므로 fan_infan_out를 선언하였으며, 정확도가 증가한 것을 확인할 수 있습니다.

 

 

16강은 Dropout를 다뤘으며, DropoutOverfitting의 해결책 중 하나입니다.

 

 

다음은 Dropout을 적용한 Code입니다.

 앞서 말한대로, 확률 유지를 위한 p의 값을 정해주고, Layer마다 dropout을 해줍니다.

 

 

 

 이때, 주의할 점은 train에서는 dropout 시행하지만 eval dropout시행하지 않고 전체 노드 사용합니다.

 

 

17강에서는 Batch Normalization을 다뤘습니다.

Batch NormalizationGradient Vanishing/ Gradient Exploding의 문제점 해결해줍니다.

Internal Covariate ShiftGradient Vanishing/Exploding문제 유발하는데, 이는 Train Test의 차이(입력과 출력의 차이)로 인해 발생합니다.

 

 

 

기타 질문사항은 댓글로 남겨주시길 바라며, 지금까지 봐주셔서 감사합니다!