개발자의시작

[Pytorch] 08-2 Multi Layer Perceptron 본문

머신러닝(machine learning)

[Pytorch] 08-2 Multi Layer Perceptron

LNLP 2022. 1. 14. 15:38

이 글은 모두를위한딥러닝 시즌2 https://github.com/deeplearningzerotoall/PyTorch 을 정리한 글입니다.

 

GitHub - deeplearningzerotoall/PyTorch: Deep Learning Zero to All - Pytorch

Deep Learning Zero to All - Pytorch. Contribute to deeplearningzerotoall/PyTorch development by creating an account on GitHub.

github.com

 

이 chapter에서 살펴볼 내용은 다음과 같다.

 

- Review: XOR

- Multi Layer Perceptron

- Backpropagation

- Code: XOR-nn

- Code: XOR-nn-wide-deep

 

XOR 문제는 단층 perceptron으로 해결할 수 없다. 

 

Multi Layer Perceptron

 

XOR 문제를 해결하기 위해서는 하나의 layer를 갖는 perceptron이 아닌 여러 층을 갖는 Multi Layer Perceptron이 필요하다. 하나의 선으로는 XOR문제를 분류할 수 없었지만, 쉽게 생각해 하나의 선을 더 그어 분류할 수 있다. 하지만 초기에는 MLP를 학습할 수 있는 방법이 없어 적용하지 못했다. 

 

Backpropagation

 

Backpropagation 알고리즘이 개발되면서 MLP를 학습할 수 있게 되었다. Backpropagation은 어떤 입력 X가 들어왔을 때 neural network를 통해서 아웃풋 Y를 구하게 되는데, 이 output과 원래의 정답인 G 사이의 cost/loss에 대해서 가중치들의 미분 값을 구하고 loss값을 최소화할 수 있도록 가중치를 업데이트하는 것이 backpropagation이라고 한다. 

 

 

Code

Backpropagation을 code를 통해서 살펴본다. Layer를 선언하는데, w와 b를 직접 일일이 선언한다. 두 개의 레이어가 선언되는데 이는 nn.Linear 두 개를 선언한 것과 같은 것이다. sigmoid 또한 라이브러리를 사용하지 않고 직접 구현해서 사용한다. 

다음은 학습 코드의 일부이다. forward를 살펴보면 가중치를 곱하고 b를 더하여 sigmoid를 통과시켜준다. 두 개의 layer를 통과시켜준 다음 BinaryCrossEntropy를 사용해 loss를 구해준다. 

 

가장 핵심인 Backpropagation 부분이다. 구현에 대한 부분으로 수식에 대한 설명은 생략. BinaryCrossEntropy loss에 대해 미분을 하게 되면 chain rule이 적용된다. transpose는 차원을 변경하는 함수이다. 예를 들어 10x5차원의 matrix가 있을 때 두 번째 인자와 세 번째 인자의 축을 변경하는 함수이다. 

 

업데이트는 간단하게 이루어진다. 기존의 w에 backpropagation을 통해 얻은 미분 값을 learning_rate에 곱해서 빼주면 업데이트가 이루어진다. 이 경우는 gradient descent에 해당하며(minimize), gradient ascent를 할 경우에는 더해주면 된다. 학습이 진행되는 과정을 출력해보면 loss가 점점 줄어들며 학습이 진행되는 것을 확인할 수 있다. 학습 후 모델의 출력을 보면 분류를 잘 해내고 정확도도 100%에 도달하는 것을 볼 수 있다. 즉, Backpropagation과 Multi Layer Perceptron으로 XOR 문제를 해결할 수 있는 것을 볼 수 있다. PyTorch에서는 앞의 Backpropagation 과정을 backward() 함수를 통해 간단하게 적용할 수 있다. 

 

PyTorch에 조금 더 맞춰진 코드를 살펴본다. 이전에 살펴본 코드들과 별다른 차이는 없지만 하나 Linear layer가 추가된다. 즉, 두 개의 layer를 선언하여 사용한다. 결과를 살펴보면 학습이 진행될수록 loss가 계속 줄어들고 학습이 잘되어 100%의 정확도를 달성해 XOR문제를 해결하는 것을 볼 수 있다. 

이미 XOR문제는 100%의 정확도로 해결해냈지만, Layer를 조금 더 깊게 쌓아본다. 이번에는 총 4개의 Layer를 쌓아서 학습을 진행한다. 학습 결과를 살펴보면 이전에 2개의 Layer를 사용하는 코드보다 loss가 더 많이 줄어드는 것을 볼 수 있다.

'머신러닝(machine learning)' 카테고리의 다른 글

[Pytorch] 09-2 Weight initialization  (0) 2022.01.17
[Pytorch] 09-1 ReLU  (0) 2022.01.14
[Pytorch] 08-1 Perceptron  (1) 2022.01.14
[Pytorch] 07-2 MNIST Introduction  (0) 2022.01.14
[Pytorch] 07-1 Tips  (0) 2021.12.30
Comments