본문 바로가기
AI/PyTorchZeroToAll by Sung Kim

[PyTorchZeroToAll] 7. Wide and Deep

by 쵸빙 2020. 1. 27.

     저번 시간에는 linear model로 logistic regression을 구현했다. 위의 예시는 하나의 입력을 받아서 하나의 출력을 내는 결과를 보여주고 있다. 하나의 입력밖에 안 받기 때문에 forward하기에 충분하지 않을 수 있다.

그래서 더 좋은 결과를 얻기 위해서 여러 개의 입력을 준다고 해보자.

 

     이번에는경험이라는 입력까지 넣어보자. 학점과 경험이라는 두 개의 입력을 받아서 과연 홍콩과기대에 합격할 수 있을지 예측하는 모델을 만드는 것이다. 이것을 해결하기 위해서는 행렬의 곱셈 연산에 대해서 알아야한다.

 

Matrix Multiplication

     위와 같이 일반화하면 입력이 여러 개여도 곱셈 연산을 수행할 수 있다. 

 

     우리의 경우에는 입력이 2개이고, 출력이 한 개이기 때문에 위와 같이 코드를 작성하면 된다.

 

     그래서 넓게, Wide라는 개념은 입력을 여러 개를 넣어서 출력을 하나를 얻는 개념이었다.

 

     Deep, 깊게라는 개념은 위와 같이 여러 개의 층을 거쳐서 출력값을 가지는 것이다.

여기서 중요한 점은 이전 층의 출력 노드의 개수가 그 다음 층의 입력 노드의 개수와 같아야한다는 것이다.

또한, 출력값은 하나이므로, 마지막 층의 노드는 하나여야한다.

 

    층을 너무 깊게 하면 sigmoid를 사용했을 때 gradient가 점점 영향력이 작아지는 vanishing gradient 문제가 발생할 수도 있다. 시그모이드 함수의 결과가 1보다 작은 값이니 계속 곱하다보면 0에 매우 가까워지기 때문이다.

 

     이 문제를 해결하기 위해서는 시그모이드 함수 대신 다른 활성 함수를 사용하는 것이 좋다. 특히 ReLU 함수가 널리 쓰인다.

 

     다양한 활성 함수를 사용하기 위해서는 아래의 사이트를 참조하는 것이 좋다.

https://dashee87.github.io/data%20science/deep%20learning/visualising-activation-functions-in-neural-networks/ 

 

dashee87.github.io

19 minute read This post investigates the universally known but poorly understood home advantage and how it varies in football leagues around the world

dashee87.github.io

     깊고 넓은 (Deep & Wide) Neural Network로 우리는 실생활에 적용해서 다양한 일을 할 수 있다.

그 예로는 위와 같이 비만인지를 검사하는 일이다. 위의 표에서는 맨 오른쪽의 출력값 0 또는 1 이외는 몸두 입력값이다.

그러므로 8개의 입력이 있는 것이다. 위의 코드에서는 x_data에는 전체 행, 처음부터 n-2까지의 열만큼의 데이터를 저장하고(맨 마지막의 출력에 해당하는 열은 뺀 것), y_data에는 전체 행, 맨 마지막 열에 해당하는 데이터들을 저장한다.

numpy에서 torch로 변형한 뒤에 Variable 함수를 써서 이 과정을 수행한다. torch의 shape함수를 사용하면 우리가 원하던대로 x_data가 759 행, 8열로 구성되어있고, y_data가 759행, 1열로 구성되어있는 것을 알 수 있다.

     그럼 이제 Wide & Deep Neural Network를 직접 만들어보자. 먼저 Model이라는 class를 만든 후에 시작은 8개 입력을 받고 3개의 층을 가진 신경망을 만든다.  

 

     위와 같이 여러 개의 입력, 여러 층의 모델에도 결과가 잘 나오는 것을 알 수 있다.

 

     이번 시간에는 더 많은 층으로 예측해보자. 층이 더 많아지면 시그모이드 함수 말고 다른 활성 함수를 사용하는 것이 더 나을 수 있다.

 

다음 시간에는 DataLoader을 이용하여 더 쉽게 데이터를 로드하는 법에 대해 배우도록 하겠다.