모두의 딥러닝 2 Lec 10 ~ 13 reviwe
2021/01/23 온라인 스터디
조민성 임정환 전준희 이도훈 홍혜선
압정을 던졌을 때 바닥에 떨어지는 경우를 class1, class2가 있다고 가정하면
위와 같이 가능도를 구할 수 있습니다. 가능도를 최대로 만들어주는 확률 세타를 구하는 것이 목적입니다.
그래프의 형태를 보면 지금까지 배우 Gradient descent가 아닌 Gradient ascent를 통해 구할 수 있음을 알 수 있습니다.
Regression을 구할 때 주어진 training data를 통해서 학습을 계속하다보면 training data 안에 있는 noise data들에 의해 붉은 선과 같이 overfitting 된 선이 구해집니다. 원래 구하고 싶었던 파란 선을 구하려면 어떻게 해야할까요?
전체 data에서 일정한 비율로 traing data, validation data, test data로 나눕니다 (보통 0.8,0.1,0.1). 우선 trating data를 통해 모델을 학습 시킨 후 validation data를 통하여 최적의 성능을 내는 모델을 선택하고 test data를 통해 그 결과를 확인 하는 순서로 모델을 확신시켜 overfitting이 일어나는 것을 어느 정도 개선해 줄 수 있습니다.
overfitting을 줄이는 또다른 방법들로는 더 많은 data들을 활용하고, feature의 개수를 줄이거나 regularization을 사용하여 줄일 수 있습니다. regularization을 하는 여러가지 방법들이 있는데 validation data를 이용하여 overfitting 일어나는 지점을 확인하여 빠르게 학습을 멈추는 Early Stopping 방법이 있고, Network의 size를 줄여주거나 weight parameter를 제한하는 weight decay 방식이 있습니다. drop out과 batch normalization은 추후 강의에 내용이 나옵니다
학습할 때 중요한 요소로 전처리가 있습니다. 학습 전에 데이터 전처리를 해주지 않는다면 학습 효율이 많이 떨어질 것입니다. 위 그림과 같이 크기에 매우 다른 데이터 셋 2개가 잇을 때 같은 러닝 레이트를 적용해준다면 한 쪽 데이터에만 치우쳐 모델이 학습을 하여 학습 효율이 많이 떨어질 것입니다. 데이터 전처리를 해준다면 두 데이터에 대해 비슷한 비율로 학습하게되어 효율이 많이 올라갈 것입니다.
손글씨 데이터로 이루어진 MNIST dataset을 학습해봅시다. 파이썬의 torchvision 패키지를 이용합니다.
우선 28 x 28 픽셀로 이루어진 MNIST dataset을 view 함수를 이용하여 1 x 784 형태로 만들어 주어 모델이 학습할 수 있는 형태로 만들어 줍니다. label은 원핫인코딩을 통해 위와 같이 만들어 줍니다.
MNIST data는 torchvision 패키지에서 dataset 함수를 이용하여 train data와 test data를 각각 불러와 저장할 수 있습니다. 그 후 지난시간에 배웠던 Softmax 함수와 CrossEntropy를 통해 모델을 학습시켜 정확도를 측정해봅니다. 마찬가지로 epoch가 증가할 수록 cost가 점점 줄어드는 것을 확인할 수 있고 높은 정확도를 볼 수 있습니다.
인간의 뇌의 신경세포인 neuron을 본따 만든 인공 신경망을 퍼셉트론이라고 합니다. 여러 개의 입력을 받아 가중치에 곱해져서 모두 더합니다. 활성함수를 통하여 그 값이 일정한 한계치를 넘게되면 1이되괴 넘지 못하면 0이 됩니다.
or 나 and 분류 문제는 위와 같이 single layer perceptron으로 문제 해결이 가능합니다. 하지만 xor 같은 경우는 single layer perceptron으로는 문제를 해결하지 못합니다. 그렇다면 어떻게 해야 문제를 해결할 수 있을까요?
이러한 의문점에 대한 대안으로 나온 것이 multi layer perceptron입니다. layer가 1개가아닌 2개, 3개 ... n개가 된다면 문제를 해결할 수 있다는 것이 multi layer perceptron입니다. 하지만 문제가 또 발생합니다. Loss 함수의 Gradient를 구할 수 없어 parameter들을 학습할 수 없다는 것입니다.
그래서 나온 것이 backpropagtion 역전파 개념입니다. 우리는 수학에서 배운 chain rule을 통하여 서로 다른 미분값들을 곱하여 원하는 미분값을 알 수 있다는 것을 배운 적이 있습니다. 이러한 개념을 이용하여 결과값에서 시작하여 input layer 방향으로 chain rule을 적용시켜 각각의 parameter 들에 대한 미분값을 알 수 있습니다.
이러한 개념을 이용하여 layer가 많아져도 chain rule 만 적용시킬 줄 안다면 모든 parameter들에 대한 Gradient를 계산할 수 있어 모델을 학습시킬 수 있을 것입니다.
이러한 개념을 xor 문제에 적용시켜 코드로 나타낸 모습입니다. 2 x 2의 가중치를 가지 layer1과 2 x 1의 가중치를 가진 layer1을 이용하여 퍼셉트론을 구성하였습니다.
그 후 cost 함수를 알고 있기 때문에 backpropagation을 이용하여 각 parameter들에 대한 미분 값을 구할 수 있습니다. 이렇게 구해진 미분 값들로 Gradient를 구하여 Gradient descent를 통하여 모델을 학습시킬 수 있습니다.