[ AI / ML / DL ] Neural Networks Basic - Basic Structure, Multi-layered Structure
π©π»βπ» K-MOOC μ€μ΅μΌλ‘ λ°°μ°λ λ¨Έμ λ¬λ κ°μ
π ν΄λΉ ν¬μ€νΈλ K-MOOC κ°μ λ΄μ©κ³Ό μΆκ°λ‘ λ€λ₯Έ μλ£λ€μ μ°Ύμ λ΄μ©μ μμ±νμμΌλ©°, μ΄λ‘ λ° κ°λ μ λν΄ κ³΅λΆνκ³ μμ μ€μ΅λ μ§νν ν λ΄μ©μ μ 리νμλ€.
1. Basic Structure
λ‘μ§μ€ν± νκ·λ μΈκ³΅ μ κ²½λ§μ μ΄λ£¨λ νλμ perceptronμ ν΄λΉνλ€κ³ λ³Ό μ μλ€.
π€ νΌμ νΈλ‘ μ΄λ
λ₯ λ¬λμ μ΄ν΄νκΈ° μν΄μλ μ°μ μΈκ³΅ μ κ²½λ§μ λν μ΄ν΄κ° νμνλ°, νΌμ νΈλ‘ (Perceptron)μ΄ λ°λ‘ μ΄κΈ°μ μΈκ³΅ μ κ²½λ§μ΄λ€.
νΌμ νΈλ‘ μ μ€μ λλ₯Ό ꡬμ±νλ μ κ²½ μΈν¬ λ΄λ°μ λμκ³Ό μ μ¬νλ€. λ΄λ°μ κ°μ§λκΈ°μμ μ νΈλ₯Ό λ°μλ€μ΄κ³ , μ΄ μ νΈκ° μΌμ μΉ μ΄μμ ν¬κΈ°λ₯Ό κ°μ§λ©΄ μΆμλκΈ°λ₯Ό ν΅ν΄μ μ νΈλ₯Ό μ λ¬νλ€.
xλ μ λ ₯κ°μ μλ―Ένλ©°, Wλ κ°μ€μΉ(Weight), yλ μΆλ ₯κ°μ λλ€. κ·Έλ¦Ό μμ μμ μΈκ³΅ λ΄λ°μ ν΄λΉλ©λλ€. μ€μ μ κ²½ μΈν¬ λ΄λ°μμμ μ νΈλ₯Ό μ λ¬νλ μΆμλκΈ°μ μν μ νΌμ νΈλ‘ μμλ κ°μ€μΉκ° λμ ν©λλ€. κ°κ°μ μΈκ³΅ λ΄λ°μμ 보λ΄μ§ μ λ ₯κ° λ κ°κ°μ κ°μ€μΉ μ ν¨κ» μ’ μ°©μ§μΈ μΈκ³΅ λ΄λ°μ μ λ¬λλ€.
2. Multi-layered Structure
νμ±ν ν¨μ Activation Functions
1. λΉμ ν ν¨μ Nonlinear Functions
λΉμ ν νμ±ν ν¨μ(Activation function)λ μ λ ₯μ λ°μ μνμ λ³νμ μννκ³ μΆλ ₯μ μμ±νλ ν¨μμ΄λ€.
μΈκ³΅ μ κ²½λ§μ λ₯λ ₯μ λμ΄κΈ° μν΄μλ μλμΈ΅μ μ¬λ¬ κ° μΆκ°ν΄μΌ νλ€. κ·Έλ°λ° λ§μ½ νμ±ν ν¨μλ‘ μ ν ν¨μλ₯Ό μ¬μ©νκ² λλ©΄ μλμΈ΅μ μμ μκ° μλ€. νμ±ν ν¨μλ‘ μ ν ν¨μλ₯Ό μ ννκ³ μλμΈ΅μ κ³μ μμλ μλμΈ΅μ 1ν μΆκ°ν κ²κ³Ό λμΌν ν¨κ³Όλ₯Ό μ£ΌκΈ° λλ¬Έμ΄λ€.
β μ ν ν¨μλ₯Ό μ¬μ©ν κ²μ΄ μ무 μλ―Έκ° μλ κ²μ μλκ³ , νμ΅ κ°λ₯ν κ°μ€μΉκ° μλ‘ μκΈ΄λ€λ μ μμ μλ―Έκ° μκΈ΄ νλ€. μ΄μ μ ν ν¨μλ₯Ό μ¬μ©ν μΈ΅μ νμ±ν ν¨μλ₯Ό μ¬μ©νλ μλμΈ΅κ³Ό ꡬλΆνκΈ° μν΄ μ νμΈ΅ (linear layer) μ΄λ ν¬μ¬μΈ΅ (projection layer) λ±μ λ€λ₯Έ ννμ μ¬μ©νμ¬ νννκΈ°λ νλ€.
2. μκ·Έλͺ¨μ΄λ ν¨μμ κΈ°μΈκΈ° μμ€
μ μΈκ³΅ μ κ²½λ§μ νμ΅ κ³Όμ μ λ€μκ³Ό κ°λ€.
μ°μ μΈκ³΅ μ κ²½λ§μ μ λ ₯μ λν΄μ μμ ν(forward propagation) μ°μ°μ νκ³ , κ·Έλ¦¬κ³ μμ ν μ°μ°μ ν΅ν΄ λμ¨ μμΈ‘κ°κ³Ό μ€μ κ°μ μ€μ°¨λ₯Ό μμ€ ν¨μ(loss function)μ ν΅ν΄ κ³μ°νκ³ , κ·Έλ¦¬κ³ μ΄ μμ€(loss)μ λ―ΈλΆμ ν΅ν΄μ κΈ°μΈκΈ°(gradient)λ₯Ό ꡬνκ³ , μ΄λ₯Ό ν΅ν΄ μμ ν(back propagation)λ₯Ό μννλ€.
μμ ν κ³Όμ μμ 0μ κ°κΉμ΄ μμ£Ό μμ κΈ°μΈκΈ°κ° κ³±ν΄μ§κ² λλ©΄, μλ¨μλ κΈ°μΈκΈ°κ° μ μ λ¬λμ§ μκ² λ©λλ€. μ΄λ¬ν νμμ κΈ°μΈκΈ° μμ€(Vanishing Gradient) λ¬Έμ λΌκ³ νλ€.
μκ·Έλͺ¨μ΄λ ν¨μλ₯Ό μ¬μ©νλ μλμΈ΅μ μ¬λ¬ κ° μκ² λλ©΄ 0μ κ°κΉμ΄ κΈ°μΈκΈ°κ° κ³μ κ³±ν΄μ§λ©΄ μλ¨μμλ κ±°μ κΈ°μΈκΈ°λ₯Ό μ νλ°μ μ μκ² λλ€. λ€μ λ§ν΄ 맀κ°λ³μ Wκ° μ λ°μ΄νΈ λμ§ μμ νμ΅μ΄ λμ§ μλλ€.
β‘οΈ μκ·Έλͺ¨μ΄λ ν¨μλ₯Ό μλμΈ΅μμ μ¬μ©νλ κ² μ§μ β
3. tanh ν¨μ
νμ΄νΌλ³Όλ¦νμ νΈ ν¨μ(Hyperbolic tangent function)λ μ λ ₯κ°μ -1κ³Ό 1 μ¬μ΄μ κ°μΌλ‘ λ³ννλ€.
tanh ν¨μλ μκ·Έλͺ¨μ΄λ ν¨μμλ λ¬λ¦¬ 0μ μ€μ¬μΌλ‘ νκ³ μλλ°, μ΄λλ¬Έμ μκ·Έλͺ¨μ΄λ ν¨μμ λΉκ΅νλ©΄ λ°νκ°μ λ³ννμ΄ λ ν¬λ€. κ·Έλμ μκ·Έλͺ¨μ΄λ ν¨μ보λ€λ κΈ°μΈκΈ° μμ€ μ¦μμ΄ μ μ νΈμ λλ€. κ·Έλμ μλμΈ΅μμ μκ·Έλͺ¨μ΄λ ν¨μ보λ€λ λ§μ΄ μ¬μ©λλ νΈμ΄λ€.
4. ReLU ν¨μ
μΈκ³΅ μ κ²½λ§μμ κ°μ₯ μ΅κ³ μ μΈκΈ°λ₯Ό μ»κ³ μλ ν¨μλ‘, μμμ λ€μκ³Ό κ°λ€.
ReLU ν¨μλ νΉμ μμκ°μ μλ ΄νμ§ μμΌλ―λ‘ κΉμ μ κ²½λ§μμ μκ·Έλͺ¨μ΄λ ν¨μλ³΄λ€ ν¨μ¬ λ μ μλνλ€. ReLU ν¨μλ μκ·Έλͺ¨μ΄λ ν¨μμ tanh ν¨μμ κ°μ΄ μ΄λ€ μ°μ°μ΄ νμν κ²μ΄ μλλΌ λ¨μ μκ³κ°μ΄λ―λ‘ μ°μ° μλλ λΉ λ₯΄λ€.
κ·Έλ¬λ ReLU ν¨μλ λ¬Έμ μ μ κ°μ§κ³ μλ€. μ λ ₯κ°μ΄ μμλ©΄ κΈ°μΈκΈ°λ 0μ΄ λλ€. κ·Έλ¦¬κ³ μ΄ λ΄λ°μ λ€μ νμμν€λ κ²μ΄ λ§€μ° μ΄λ ΅λ€. μ΄ λ¬Έμ λ₯Ό μ£½μ λ 루(dying ReLU)λΌκ³ νλ€. κ·Έλμ μ μλ ν¨μκ° Leaky ReLUμ΄λ€.
5. Leaky ReLU
dying ReLU λ¬Έμ λ₯Ό 보μνκΈ° μν΄ ReLUμ λ³ν ν¨μλ€μ΄ λ±μ₯νκΈ° μμνλ€. κ·Έ μ€ νλκ° Leaky ReLUμ΄λ€. Leaky ReLUλ μ λ ₯κ°μ΄ μμμΌ κ²½μ°μ 0μ΄ μλλΌ 0.001κ³Ό κ°μ λ§€μ° μμ μλ₯Ό λ°ννλλ‘ λμ΄μλ€. μμμ λ€μκ³Ό κ°λ€.
6. Softmax function
multi-class classificationμ ν λ μ£Όλ‘ μ¬μ©νλ Softmax ν¨μλ₯Ό μΆλ ₯μΈ΅μ μ μ©νμ¬ λΆλ₯ λ¬Έμ λ₯Ό μμΈ‘νλ€.
7. μΆλ ₯μΈ΅μ νμ±ν ν¨μμ μ€μ°¨ ν¨μμ κ΄κ³
λ€μμ κ° λ¬Έμ μ λ°λ₯Έ μΆλ ₯μΈ΅μ νμ±ν ν¨μμ λΉμ© ν¨μμ κ΄κ³μ΄λ€.
λ¬Έμ | νμ±ν ν¨μ | λΉμ© ν¨μ |
---|---|---|
μ΄μ§ λΆλ₯ | Sigmoid | nn.BCELoss() |
λ€μ€ ν΄λμ€ λΆλ₯ | Softmax | nn.CrossEntropyLoss() |
νκ· | μμ | MSE |
β μ£Όμν μ : nn.CrossEntropyLoss()λ Softmax ν¨μλ₯Ό μ΄λ―Έ ν¬ν¨νκ³ μλ€.
μ€ν ν¬λ λνκ΅μ λ₯ λ¬λ κ°μ cs231nμμλ ReLUλ₯Ό λ¨Όμ μλν΄λ³΄κ³ , κ·Έλ€μμΌλ‘ LeakyReLUλ ELU κ°μ ReLUμ λ³νλ€μ μλν΄λ³΄λ©°, sigmoidλ μ¬μ©νμ§ λ§λΌκ³ κΆμ₯ν©λλ€.
π» μ€μ΅ μμ μ½λ
λ€μΈ΅ νΌμ νΈλ‘ μΌλ‘ μκΈμ¨ λΆλ₯νκΈ°
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt # μκ°νλ₯Ό μν λ§·ν둯립
%matplotlib inline
digits = load_digits() # 1,979κ°μ μ΄λ―Έμ§ λ°μ΄ν° λ‘λ
images_and_labels = list(zip(digits.images, digits.target))
for index, (image, label) in enumerate(images_and_labels[:5]): # 5κ°μ μνλ§ μΆλ ₯
plt.subplot(2, 5, index + 1)
plt.axis('off')
plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
plt.title('sample: %i' % label)
X = digits.data # μ΄λ―Έμ§. μ¦, νΉμ± νλ ¬
Y = digits.target # κ° μ΄λ―Έμ§μ λν λ μ΄λΈ
import torch
import torch.nn as nn
from torch import optim
model = nn.Sequential(
nn.Linear(64, 32), # input_layer = 64, hidden_layer1 = 32
nn.ReLU(),
nn.Linear(32, 16), # hidden_layer2 = 32, hidden_layer3 = 16
nn.ReLU(),
nn.Linear(16, 10) # hidden_layer3 = 16, output_layer = 10
)
X = torch.tensor(X, dtype=torch.float32)
Y = torch.tensor(Y, dtype=torch.int64)
loss_fn = nn.CrossEntropyLoss() # μ΄ λΉμ© ν¨μλ μννΈλ§₯μ€ ν¨μλ₯Ό ν¬ν¨νκ³ μμ.
optimizer = optim.Adam(model.parameters())
losses = []
for epoch in range(100):
optimizer.zero_grad()
y_pred = model(X) # forwar μ°μ°
loss = loss_fn(y_pred, Y)
loss.backward()
optimizer.step()
if epoch % 10 == 0:
print('Epoch {:4d}/{} Cost: {:.6f}'.format(
epoch, 100, loss.item()
))
losses.append(loss.item())
plt.plot(losses)
Epoch 0/100 Cost: 2.380815
Epoch 10/100 Cost: 2.059323
... μ€λ΅ ...
Epoch 90/100 Cost: 0.205398
λ§λ¬΄λ¦¬νλ©΄μ..
λ€μ ν¬μ€νΈμμ λ§λμ π
μ°Έκ³
Related Posts
λΉ λ°μ΄ν° | νΉμ± μΆμΆ Feature Extraction | |
λΉ λ°μ΄ν° | νΉμ± μ ν Feature Selection | |
λΉ λ°μ΄ν° | μ°¨μμ μ μ£Ό |
π You need to log in to GitHub to write comments. π
If you can't see comments, please refresh page(F5).