본문 바로가기
MLP 마무리 참 힘들고 지치는 과정이셨죠? 하지만 전체적인 구조를 이해하기 위해 처음부터 끝까지 다 톺아보는 이 과정이 나중엔 정말 도움이 되실 거라 생각합니다. 매번 이렇겐 할수 없잖아요~? 그래서 다음 AlexNet 구현부터는 pytorch를 이용하여 해 보도록 하겠습니다. pytorch를 사용하면 간단한 코딩으로 우리가 복잡하게 계산했던 편미분들을 뚝딱 해준답니다~! 다음 카테고리 AlexNet으로 가보시죠. 2022. 1. 6.
MLP from Scratch with Numpy [7 / 7] - 전체 코딩의 흐름 그전까지의 코딩까지 묶어서 일단 한번 봅시다. import numpy as np import pandas as pd import random import matplotlib.pyplot as plt import os os.environ['KAGGLE_USERNAME'] = # username os.environ['KAGGLE_KEY'] = # key !kaggle competitions download -c digit-recognizer !unzip -q test.csv.zip !unzip -q train.csv.zip train=pd.read_csv('train.csv') test= pd.read_csv('test.csv') Label = train['label'].values Train = train.. 2022. 1. 6.
MLP from Scratch with Numpy [6 / 7] - backpropagation2 자 이제 \(W^0\)에 대한 미분도 이어서 해봅시다. 추가적인 설명을 적어 넣어 보도록 하겠습니다. 여기도 마찬가지~! 이제 수식으로 써볼껀 다써봤네여!!! 마지막으로 코딩해보고 끝내버립시다. 2022. 1. 6.
MLP from Scratch with Numpy [5 / 7] - backpropagation1 자 이제까지 데이터를 입력받으면 [1 x 10] 확률 벡터를 만들어 내는 계산을 완료했습니다. 이를 feed forward라 부릅니다. 문제를 풀어본 상태라고 이해하시면 됩니다. 이젠 문제를 맞힐 수 있도록 혼내줄 겁니다. Back propagation! feed_forward의 결과가 뭐였죠?! 다음과 같습니다. Cost_function = cross_entropy(Output_layer, true_Label) = cross_entropy(softmax(np.dot(ReLU(np.dot(Input_layer , W_0)) , W_1)), true_Label) 이 길고 복잡해 보이는 식을 어떻게 건드려야 하나 두렵겠지만 어쨌든 하나씩 풀어가야 됩니다. 지난 포스팅에서 Cost function으로 쓰인 c.. 2022. 1. 6.
MLP from Scratch with Numpy [4 / 7] - feed forward 코딩 흐름 google colab이나 jupyter notebook에서 작동 가능한 코드들입니다. MNIST데이터를 받기위한 사전 작업 해주시고~ import numpy as np import pandas as pd import random import matplotlib.pyplot as plt import os os.environ['KAGGLE_USERNAME'] = # username os.environ['KAGGLE_KEY'] = # key 압축해제 해주시고~ !kaggle competitions download -c digit-recognizer !unzip -q test.csv.zip !unzip -q train.csv.zip 변수 저장 해주겠습니다~! train=pd.read_csv('train.csv.. 2022. 1. 5.
MLP from Scratch with Numpy [3 / 7] - Activation 지난 포스팅에 행렬 계산을 해보았습니다. Hidden_layer = np.dot(Input_layer , W_0) Output_layer = np.dot(Hidden_layer , W_1) Output_layer = np.dot(np.dot(Input_layer , W_0) , W_1) 저 정도 계산으로 특별한 성능을 기대한다면 너무 욕심이겠죠? 이제 진짜 시작입니다. 행렬 계산에 그치지 않고 우리는 Activation function을 적용해 줄 것입니다. 활성 함수라고 하죠 그 이유는 모델 전체에 Nonlinearity (비선형성) 성질을 부여하기 위함입니다. 사연이 있는 행위 지만 여기선 간단하게 '어려운 문제 풀기 위해 사용'됐다고 하겠습니다. (* 전공자시라면 반드시 찾아보시길!) 여기선 가장 .. 2022. 1. 4.
MLP from Scratch with Numpy [2 / 7] - feed forward2 지난 포스팅의 확장입니다. 실제 MNIST 데이터에 적용하기 MNIST 데이터의 크기는 [28 x 28]의 이미지라고 말씀드렸어 이걸 한 줄로 죽 늘어뜨리면 [1 x 784] vector로 표현할 수 있습니다. 그럼 지난 포스팅에서 봤던 input layer \( I \)의 크기는 어떻게 될까요? [1 x 784] vector가 바로 input layer \(I\)로 표현됩니다~ 그다음은 Hidden layer \( H \)의 크기는 어떻게 정할까요? 사실 맘대로 하면 됩니다. 크게 하면 연산량이 많아지며 복잡한 문제를 해결할 수 있는 가능성이 생기고요 작게 하면 그 반대입니다 Vise Versa. 저는 그냥 [1 x 100] 사이즈의 vector로 만들어 주겠습니다. 마지막으로 output layer .. 2022. 1. 3.
MLP from Scratch with Numpy [1 / 7] - feed forward1 계획의 시작 MLP입니다. MLP with 2 layer 모델로 MNIST 분류 문제를 풀어보겠습니다. 우선 아주 쉽게 축소하여 한번 가봅시다! 보통 Hidden layer의 수와 Output layer의 수를 합쳐서 layer 수를 결정하는 것으로 추정됩니다. 아마 곱해지는 행렬이 2개라서 그런것 같습니다. [그림 1] 에 추상화된 MLP 모델이 그려져 있습니다. Input layer를 [1 x 3] vector \(I\) Hidden layer를 [1 x 4] vector \(H\) Output layer를 [1 x 3] vector \(O\) \(W^0\), \(W^1\) 은 행렬입니다. 행렬 곱셈에는 in(곱해지는 것)과 out(결과)을 알고 있다면 그 형태에 끼워 맞춘 행렬을 만들 수가 있.. 2022. 1. 3.
MLP from Scratch with Numpy [0 / 7] - Classification 사전작업 앞으로 모델들은 Kaggle의 MNIST데이터를 이용하여 시동? 검증하려고 합니다. import numpy as np import pandsa as pd import random import matplotlib.pyplot as plt MNIST데이터 자체의 난이도가 너무 낮아 틀린 모델이더라도, 정확도가 높은 경우가 생길 수 있으니 ImageNet 데이터로 재차 검증을 해야 할지도 모르겠습니다. [귀찮아서 안 할 것 같긴 합니다. 하하] 일단 데이터부터 받아줍시다! import os os.environ['KAGGLE_USERNAME'] = # username os.environ['KAGGLE_KEY'] = # key 압축 해제를 해주시고요~~ !kaggle competitions download -c .. 2022. 1. 3.