본문 바로가기

Deep Learning/PyTorch

Multi Layer Perceptron (다층 퍼셉트론?) 만들어보기

다층 퍼셉트론? (MLP)는 선형적 계층을 연결하여 input layer, hidden layer, output layer의 크게 세 가지 층을 가지며,
회귀문제의 경우 출력층을 선형 회귀구조를 사용하고 분류문제의 경우에는 출력층을 로지스틱 회귀 구조로 사용함.
(회귀 구조에 관해서는 앞선 포스팅을 참고 해주세요~!)

선형적계층을 단순히 연결하게 되면, 전체 네트워크가 선형함수가 되는데, 이렇게 되면 복잡한 문제를 해결하기가 어려워진다.
따라서, 전체 네트워크에 비선형성을 부여하여 최적의 solution을 찾아가는 방법으로 Activation function (활성화함수)을
도입하게된다. 이번에도 Pytorch의 내장 모듈을 이용하여 간단한 신경망 모델을 구축해 보자.

[그림] 다층 퍼셉트론 네트워크 구축의 예시

위 그림과 같이 선형계층을 순차적으로 쌓아 일직선 형태의 신경망을 Feedforward 형태라고 정의 하고,
.backward() 메소드를 사용하여 back propagation(역전파) 알고리즘으로 피드포워드형 신경망의 미분계수를 계산한다.

마지막으로 구축된 MLP를 통해 MNIST 데이터셋으로 학습을 진행해본다. 또한 CPU와 GPU에서 각각 학습을 이행해보자.

학습 결과는 생각보다 인상적이었다.
GPU에서의 연산이 더 빠를것이라는 나의 선입견과는 달리 CPU에서 더 빠른 연산속도를 얻을 수 있었다.
그 원인을 생각해보면, 학습 구조가 상당이 단순했고, 데이터가 극소량에 해당하여 CPU에서도 부담업이 연산이 가능했으며,
GPU에 데이터를 올리는데 걸리는 시간이 약간의 시간지연을 가져온것으로 판단된다.

빅데이터와 많은 연산량이 들지 않는다고 판단되면, CPU에서도 딥러닝 학습을 빠르게 체험해 볼 수 있다는것이 결론이다.