์ด๋ฒ์๋ ๋ค์ธต ํผ์ ํธ๋ก (Multilayer Perceptron, MLP)์ ๋ฐํ์ฌ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ค์ธต ํผ์ ํธ๋ก (Multilayer Perceptron, MLP)
๋ค์ธต ํผ์ ํธ๋ก (Multilayer Perceptron, MLP)์ ๊ธฐ๋ณธ์ ์ธ ์ธ๊ณต ์ ๊ฒฝ๋ง์ ํํ ์ค ํ๋๋ก, ํนํ ๋ณต์กํ ๋น์ ํ ๊ด๊ณ์ ํจํด์ ํ์ตํ ์ ์๋ ๋ฅ๋ ฅ์ผ๋ก ์ธํด ๋ถ๋ฅ ๋ฐ ํ๊ท ๋ฌธ์ ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ์ ๋ ฅ์ธต, ํ๋ ์ด์์ ์๋์ธต, ๊ทธ๋ฆฌ๊ณ ์ถ๋ ฅ์ธต์ผ๋ก ์ด๋ฃจ์ด์ง FeedForward ์ ๊ฒฝ๋ง ์ด๋ฉฐ, ๊ฐ ์ธต์ ์ฌ๋ฌ ๋ด๋ฐ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋ํ ๊ฐ ๋ด๋ฐ์ ์ด์ ์ธต์ ๋ด๋ฐ์ผ๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ์ ๊ฐ์ค์น๋ฅผ ์ ์ฉํ๊ณ , ํ์ฑํ ํจ์๋ฅผ ํตํด ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
๋ค์ธต ํผ์ ํธ๋ก (Multilayer Perceptron, MLP)์ ๊ตฌ์กฐ
๋ค์ธต ํผ์ ํธ๋ก ์ ๊ตฌ์กฐ๋ 3๊ฐ์ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ ๋ ฅ์ธต(Input Layer)
- ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ ์ต์ด์ ์ธต.
- ๊ฐ ์ ๋ ฅ ๋ด๋ฐ์ ํ๋์ ํน์ฑ(feature)๋ฅผ ๋ํํฉ๋๋ค.
์๋์ธต(Hidden Layers)
- ์ ๋ ฅ์ธต๊ณผ ์ถ๋ ฅ์ธต ์ฌ์ด์ ํ๋ ์ด์ ์กด์ฌ.
- ๋ฐ์ดํฐ์ ๋ณต์กํ ํจํด๊ณผ ํน์ง์ ์ถ์ถํฉ๋๋ค.
- ๊ฐ ๋ด๋ฐ์ ์ด์ ์ธต์ ์ถ๋ ฅ์์ ์ ๋ ฅ์ ๋ฐ์ ๊ฐ์ค์น์ ํ์ฑํ ํจ์๋ฅผ ํตํด ์ฒ๋ฆฌํฉ๋๋ค.
์ถ๋ ฅ์ธต(Output Layer)
- ์ต์ข ์ ์ธ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- ๋ถ๋ฅ ๋ฌธ์ ์ ๊ฒฝ์ฐ, ๊ฐ ๋ด๋ฐ์ ํน์ ํด๋์ค๋ฅผ ๋ํํ ์ ์์ผ๋ฉฐ, ํ๊ท ๋ฌธ์ ์ ๊ฒฝ์ฐ ํ๋ ๋๋ ์ฌ๋ฌ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.
๋ค์ธต ํผ์ ํธ๋ก (Multilayer Perceptron, MLP)์ ๊ธฐ๋ณธ ์๋ฆฌ
์์์๋ ๋ค์ธต ํผ์ ํธ๋ก ์ ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๋์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์ธต ํผ์ ํธ๋ก ์ ์ด๋ ํ ์๋ฆฌ๋ก ์๋ํ ๊น์?
Neuron (๋ด๋ฐ)
๋ค์ธต ํผ์ ํธ๋ก ์ ๊ธฐ๋ณธ ๋จ์๋ ๋ด๋ฐ์ผ๋ก, ์ด๋ ์ธ๊ฐ์ ์ ๊ฒฝ ์ธํฌ๋ฅผ ๋ชจ๋ฐฉํ ๊ฐ๋ ์ ๋๋ค.
๊ฐ ๋ด๋ฐ์ ์ฌ๋ฌ ์ ๋ ฅ ๊ฐ์ ๋ฐ์๋ค์ฌ ๊ฐ์ค์น(weight)๋ฅผ ์ ์ฉํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ํ ๊ฒฐํฉํฉ๋๋ค. ์ด๋ ์ ํ ๊ฒฐํฉ์ ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
- ์ฌ๊ธฐ์ wi๋ ๊ฐ์ค์น, xi๋ ์ ๋ ฅ ๊ฐ, b๋ ๋ฐ์ด์ด์ค(bias), ํธํฅ ๊ฐ์ ๋๋ค.
- ์ดํ, ์ด ์ ํ ๊ฒฐํฉ์ ๊ฒฐ๊ณผ๊ฐ z๋ ํ์ฑํ ํจ์์ ์ ๋ฌ๋์ด ๋ด๋ฐ์ ์ถ๋ ฅ์ด ์์ฑ๋ฉ๋๋ค.
- ํ์ฑํ ํจ์์ ์ถ๋ ฅ aa ๋ ๋ค์ ์ธต์ ๋ด๋ฐ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
Activation Function (ํ์ฑํ ํจ์)
ํ์ฑํ ํจ์๋ ๋ด๋ฐ์ ์ถ๋ ฅ์ ๋น์ ํ์ ์ผ๋ก ๋ณํํ์ฌ ๋ชจ๋ธ์ด ๋ณต์กํ ํจํด์ ํ์ตํ ์ ์๋๋ก ๋์ต๋๋ค.
- ๋ํ์ ์ธ ํ์ฑํ ํจ์๋ก๋ ์๊ทธ๋ชจ์ด๋ ํจ์(sigmoid), ํ์ดํผ๋ณผ๋ฆญ ํ์ ํธ ํจ์(tanh), ๋ ๋ฃจ ํจ์(ReLU)๊ฐ ์์ต๋๋ค.
- ์๊ทธ๋ชจ์ด๋ ํจ์: ์ถ๋ ฅ ๊ฐ์ 0๊ณผ 1 ์ฌ์ด๋ก ์ ํํ๋ฉฐ, ์์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๋ฐฉํฅ ์ ๋ฌ
์๋ฐฉํฅ ์ ๋ฌ(Foward Propagation)์ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ์ธต์์ ์์ํ์ฌ ์๋์ธต์ ๊ฑฐ์ณ ์ถ๋ ฅ์ธต์ผ๋ก ์ ๋ฌ๋๋ ๊ณผ์ ์ ๋๋ค.
- ๊ฐ ์ธต์ ๋ด๋ฐ์ ์ด์ ์ธต์์ ์ ๋ฌ๋ ๊ฐ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๊ณ์ฐ์ ์ํํ๊ณ , ๊ทธ ์ถ๋ ฅ์ ๋ค์ ์ธต์ผ๋ก ์ ๋ฌํฉ๋๋ค.
- ์ด ๊ณผ์ ์์ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ธ์ ๊ณ์ธต์ ๋ฐ๋ผ ํ๋ฅด๋ฉฐ, ์ต์ข ์ ์ผ๋ก ์์ธก ๊ฐ์ ์ถ๋ ฅํ๊ฒ ๋ฉ๋๋ค.
์์ค ํจ์
์์ค ํจ์(Loss Function)๋ ๋ชจ๋ธ์ ์์ธก ๊ฐ๊ณผ ์ค์ ๊ฐ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ธก์ ํ๋ ํจ์๋ก, ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ํ์ ์ธ ์์ค ํจ์๋ก๋ ํ๊ท ์ ๊ณฑ์ค์ฐจ(MSE)์ ๊ต์ฐจ ์ํธ๋กํผ ์์ค(Cross-Entropy Loss)๊ฐ ์์ต๋๋ค.
- ํ๊ท ์ ๊ณฑ์ค์ฐจ(MSE): ํ๊ท ๋ฌธ์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ์์ธก ๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ ๊ณฑํ์ฌ ํ๊ท ์ ๊ตฌํ ๊ฐ์ ๋๋ค.
- ๊ต์ฐจ ์ํธ๋กํผ ์์ค: ๋ถ๋ฅ ๋ฌธ์ ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ์์ธก ํ๋ฅ ๊ณผ ์ค์ ํด๋์ค ๊ฐ์ ๋ถ์ผ์น๋ฅผ ์ธก์ ํฉ๋๋ค.
Backpropagation(์ญ์ ํ)
์ญ์ ํ(Backpropagation)๋ ์์ค ํจ์๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๋ชจ๋ธ์ ๊ฐ์ค์น์ ๋ฐ์ด์ด์ค๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ ๋๋ค.
- ์ด ๊ณผ์ ์ ๊ฐ ์ธต์ ๊ฐ์ค์น์ ๋ฐ์ด์ด์ค์ ๋ํ ์์ค ํจ์์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ณ์ฐํ๊ณ , ๊ฒฝ์ฌ ํ๊ฐ๋ฒ(Gradient Descent)์ ์ฌ์ฉํด ๊ฐ์ค์น์ ๋ฐ์ด์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ํ์ต์ ์งํํฉ๋๋ค.
๋ค์ธต ํผ์ ํธ๋ก ์ ์ฅ์ & ๋จ์
๋ค์ธต ํผ์ ํธ๋ก ์ ์ฅ์
- ๋น์ ํ์ฑ: ๋น์ ํ ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ ํจํด๊ณผ ๊ด๊ณ๋ฅผ ํ์ตํ ์ ์์ต๋๋ค.
- ํํ๋ ฅ: ์ฌ๋ฌ ๊ฐ์ ์๋์ธต์ ํตํด ๋์ ํํ๋ ฅ์ ๊ฐ์ง๋ฉฐ, ๋ค์ํ ๋ฌธ์ ํด๊ฒฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ ์ฐ์ฑ: ๋ค์ํ ๊ตฌ์กฐ์ ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ค์ธต ํผ์ ํธ๋ก ์ ๋จ์
- ๊ณ์ฐ ๋น์ฉ: ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ ํ์ต ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ๊ณ์ฐ ๋น์ฉ์ด ๋์ต๋๋ค.
- ๊ณผ์ ํฉ: ๋ชจ๋ธ์ด ์ง๋์น๊ฒ ๋ณต์กํด์ง๋ฉด ํ๋ จ ๋ฐ์ดํฐ์ ๊ณผ์ ํฉ(overfitting)๋ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
- ํด์ ์ด๋ ค์: ๋ง์ ํ๋ผ๋ฏธํฐ์ ์๋์ธต์ ๊ฐ์ง๋ฏ๋ก, ๋ชจ๋ธ์ ๋ด๋ถ ๋์์ ํด์ํ๋ ๊ฒ์ด ์ด๋ ต์ต๋๋ค.
๋ค์ธต ํผ์ ํธ๋ก (Multilayer Perceptron, MLP) Example Code
# ๋ค์ธต ํผ์
ํธ๋ก (Multilayer Perceptron) ์์
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import classification_report, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
# MNIST ๋ฐ์ดํฐ์
๋ก๋
mnist = fetch_openml('mnist_784')
X, y = mnist.data / 255., mnist.target
# ๋ฐ์ดํฐ์
์ ํ์ต ์ธํธ์ ํ
์คํธ ์ธํธ๋ก ๋ถํ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# ๋ฐ์ดํฐ ํ์คํ
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# ๋ค์ธต ํผ์
ํธ๋ก ๋ชจ๋ธ ํ์ต
mlp = MLPClassifier(hidden_layer_sizes=(30,), max_iter=20, alpha=1e-4,
solver='sgd', verbose=10, random_state=42,
learning_rate_init=0.1)
mlp.fit(X_train, y_train)
# ์์ธก ๋ฐ ํ๊ฐ
y_pred = mlp.predict(X_test)
print(classification_report(y_test, y_pred))
Iteration 1, loss = 0.32666430
Iteration 2, loss = 0.25799440
Iteration 3, loss = 0.20402879
Iteration 4, loss = 0.17531073
Iteration 5, loss = 0.14613715
Iteration 6, loss = 0.13942319
Iteration 7, loss = 0.13021557
Iteration 8, loss = 0.13022002
Iteration 9, loss = 0.12556882
Iteration 10, loss = 0.11247478
Iteration 11, loss = 0.10460484
Iteration 12, loss = 0.11144142
Iteration 13, loss = 0.11057812
Iteration 14, loss = 0.11260484
Iteration 15, loss = 0.11193568
Iteration 16, loss = 0.13083183
Iteration 17, loss = 0.13530305
Iteration 18, loss = 0.11458551
Iteration 19, loss = 0.12796077
Iteration 20, loss = 0.11219598
precision recall f1-score support
0 0.97 0.97 0.97 1343
1 0.97 0.98 0.97 1600
2 0.95 0.94 0.94 1380
3 0.95 0.93 0.94 1433
4 0.96 0.95 0.95 1295
5 0.93 0.93 0.93 1273
6 0.96 0.97 0.96 1396
7 0.96 0.96 0.96 1503
8 0.92 0.93 0.93 1357
9 0.93 0.95 0.94 1420
accuracy 0.95 14000
macro avg 0.95 0.95 0.95 14000
weighted avg 0.95 0.95 0.95 14000
# ํผ๋ ํ๋ ฌ ์๊ฐํ
ConfusionMatrixDisplay.from_estimator(mlp, X_test, y_test)
plt.title("MLP Confusion Matrix")
plt.show()
'๐ Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] K-Means Clustering (K-ํ๊ท ํด๋ฌ์คํฐ๋ง) (0) | 2024.08.17 |
---|---|
[ML] Unsupervised Learning (๋น์ง๋ ํ์ต) (0) | 2024.08.16 |
[ML] Random Forest (๋๋ค ํฌ๋ ์คํธ) (0) | 2024.08.12 |
[ML] Decision Tree (๊ฒฐ์ ํธ๋ฆฌ) (0) | 2024.08.12 |
[ML] Support Vector Machine (SVM, ์ํฌํธ ๋ฒกํฐ ๋จธ์ ) (0) | 2024.08.11 |