ํผ์
ํธ๋ก ์ ์ํ์ ์ผ๋ก ๋ค๋ฃฐ ๋๋ ์ถ๋ ฅ์ f(x)๋ก ํํํ๋ค.
input*weights + bias_weights > 0.5 1? 0? -> 1 predict = 1
import numpy as np
example_input = [1,.2,.05,.1,.2]
example_weights = [.2,.12,.4,.6,.90]
input_vector = np.array(example_input)
weights = np.array(example_weights)
bias_weights = .2
activation_level = np.dot(input_vector,weights)+(bias_weights * 1)
activation_level # 0.684
# threshold
threshold = 0.5
if activation_level >= threshold:
perceptron_output = 1
else:
perceptron_output = 0
perceptron_output # 1
perceptron ํ๋ จ
ํ์ฌ๋ ์์์ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง ์ ๊ฒฝ๋ง์ ํต์ฌ์ ์ด๋ฐ ๊ฐ์ค์น๋ค์ ์ ๊ฒฝ๋ง์ด ์ค์ค๋ก ํ์ตํ๊ณ ์กฐ์ ํ๋ ๊ฒ์ด๋ค. ํผ์
ํธ๋ก ์ ์ฃผ์ด์ง ์
๋ ฅ์ ๋ํ ์ถ์ธก์ด ๋ง์๋์ง ํ๋ ธ๋์ง์ ๋ํ ํจ์์ ๊ธฐ์ดํด์ ๊ฐ์ค์น๋ค์ ์ฆ๊ฐํ๊ฑฐ๋ ๊ฐ์ํจ์ผ๋ก์จ ํ์ตํ๋ค. ๊ทธ๋ฐ๋ฐ ํ์ต์ ์์ํ๋ ค๋ฉด ๊ฐ์ค์น๋ค์ ์ด๊น๊ฐ(initialization: ์ด๊ธฐํ)์ ์ ํด์ผํ๋ค. ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋์๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ๊ท๋ถํฌ ํ๊ท ์ด 0์ธ ๋์๋ค์ ๊ฐ์ค์น๋ก ์ด๊ธฐํํ๋ค. ๊ฐ์ค์น๋ค์ด 0์ด๋ฉด ์ถ๋ ฅ๋ ๋ค 0์ด ๋๊ธฐ ๋๋ฌธ์ 0์ ๊ฐ๊น์ด ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๋ฐ์ ๋๋ฌด ํฐ ๋ฅ๋ ฅ์ ์ฃผ๋ ๊ฒฝ๋ก๋ฅผ ๋ง๋ค์ง ์๊ณ ๋ ์ฌ๋ฐ๋ฅธ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ ์ ์๊ฒ ํ๋ค.
๋ด๋ฐ์ ์ถ๋ ฅ์ด ์ ๋ต์ธ์ง ์๋์ง๋ฅผ ํ ๋๋ก ๊ฐ์ค์น๋ค์ ์กฐ๊ธ์ฉ ๊ฐฑ์ ํ๋ค. input์ ๊ฐฏ์๊ฐ ์ถฉ๋ถํ ๋ง์ผ๋ฉด ์ถ๋ ฅ์ ์ค์ฐจ๋ฅผ 0์ผ๋ก ์๋ ดํ๊ฒ ๋ ๊ฐ๋ฅํ๋ค. ๊ฐ ๊ฐ์ค์น๋ฅผ input๊ฐ์ ํน์ง์ด ์ฃผ๋ ์ค์ฐจ์ ๊ทผ๊ฑฐํด ๊ฐฑ์ ํ๋ค. ๋ฐ๋ผ์ ์ค์ฐจ๊ฐ ํฌ๊ฒ ๋์๋ค๋ฉด ์์ ํน์ง๋ณด๋ค ํฐ ํน์ง์ด ์ฃผ๋ ์ค์ฐจ๊ฐ ํฌ๋ค๋ผ๋ ๊ฒ์ด๋ค.
# ๋ด๋ฐ์ด 0์ ์ถ๋ ฅํด์ผํ๋ค๋ ๊ฐ์
expected_output = 0 #์์ output
new_weights = []
for i,x in enumerate(example_input):
new_weights.append(weights[i]+(expected_output-perceptron_output)*x)
weights = np.array(new_weights)
example_weights # ์ ๊ฐ์ค์น [0.2, 0.12, 0.4, 0.6, 0.9]
weights # ๋ฐ๋ ๊ฐ์ค์น [-0.8 , -0.08, 0.35, 0.5 , 0.7 ]
์ปดํจํฐ ๋
ผ๋ฆฌ ํ์ต
์ค์ ๋ฌธ์ ) ์ปดํจํฐ๊ฐ ๋
ผ๋ฆฌํฉ(AND, OR)์ ๊ฐ๋
์ ํ์ตํ๊ฒ ํ๊ธฐ, 1 AND 1 = 1 , 1 OR 0 = 1 1 AND 0 = 0 etc
# OR ํ์ต
sample_data = [[0,0],
[0,1],
[1,0],
[1,1]] # 0 : False 1 : True
expected_results = [0,
1,
1,
1]
activation_threshold = 0.5
from random import random #์ด๊ธฐํ
import numpy as np
weights = np.random.random(2) / 1000 # [0.00017939, 0.00062873]
weights
bias_weight = np.random.random() / 1000 #์ด๊ธฐ ๊ฐ์ค์น ๋์
bias_weight # bias_weight
for idx,sample in enumerate(sample_data):
input_vector = np.array(sample)
activation_level = np.dot(input_vector,weights) + (bias_weights * 1)
if activation_level > activation_threshold:
perceptron_output = 1
else:
perceptron_output = 0
print("Predicted:{}".format(perceptron_output))
print("Expected:{}".format(expected_results[idx]))
print()
# Predicted:0
# Expected:0
# Predicted:0
# Expected:1
# Predicted:0
# Expected:1
# Predicted:0
# Expected:1
๊ฒฐ๊ณผ 1/4 4๋ฒ์ ์ํ๊ฒฐ๊ณผ 1๋ฒ์ ์ ๋ต์ ๋ง์ท๋ค. ๋ฐ๋ณตํ์ต์ผ๋ก ์ต์ ์ weight๋ฅผ ์ฐพ์๋ณด์
for iteration_num in range(5):
correct_answers = 0
for idx, sample in enumerate(sample_data):
input_vector = np.array(sample)
activation_level = np.dot(input_vector, weights) + (bias_weights * 1)
if activation_level > activation_threshold:
perceptron_output = 1
else:
perceptron_output = 0
if perceptron_output == expected_results[idx]:
correct_answers += 1
new_weights = []
for i, x in enumerate(sample):
new_weights.append(weights[i]+(expected_results[idx]-perceptron_output)*x)
bias_weight = bias_weight + ((expected_results[idx]-perceptron_output)*1)
weights = np.array(new_weights)
print('{} correct answers out of 4, for iteration {}'.format(correct_answers,iteration_num))
# 1 correct answers out of 4, for iteration 0
# 2 correct answers out of 4, for iteration 0
# 3 correct answers out of 4, for iteration 0
# 4 correct answers out of 4, for iteration 0
# 1 correct answers out of 4, for iteration 1
# 2 correct answers out of 4, for iteration 1
# 3 correct answers out of 4, for iteration 1
# 4 correct answers out of 4, for iteration 1
# 1 correct answers out of 4, for iteration 2
# 2 correct answers out of 4, for iteration 2
# 3 correct answers out of 4, for iteration 2
# 4 correct answers out of 4, for iteration 2
# 1 correct answers out of 4, for iteration 3
# 2 correct answers out of 4, for iteration 3
# 3 correct answers out of 4, for iteration 3
# 4 correct answers out of 4, for iteration 3
# 1 correct answers out of 4, for iteration 4
# 2 correct answers out of 4, for iteration 4
# 3 correct answers out of 4, for iteration 4
# 4 correct answers out of 4, for iteration 4
๊ฒฐ๊ณผ ์์ฃผ ์ ์์ธกํ๋ค. ํ์ง๋ง ์ ํ์ฑ์ ๋๋ ์์ธก ๋ชจ๋ธ๋ง ์์ธกํ์ง ๋น ์ ํ์ฑ์ผ ๊ฒฝ์ฐ ์์ธก ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ฌ์ ๋๋ฆฌ๋ ์์ค์ด ๋์๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ๊ธฐ๋ฅผ ๋ฏผ์คํค์ ํจํผํธ๊ฐ ํ๋ค.
์๋ก์ด ๋น์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ํ์ง๋ง ๊ณ์ฐ๋์ด ๋๋ฌด ๋ง์๋ค. ๋ ผ๋ฆฌ ํ๋ก์ ๋ฌธ์ ๋ฅผ ํธ๋ XOR๋ฌธ์ ๋ง๋์ผ๋ก๋ ์๋นํ ํผ์ ํธ๋ก ๊ณผ ์๋นํ ๋ถ๋์ ์ญ์ ํ ๊ณ์ฐ์ด ํ์ํ๋ค. ์๋ ์ ์ด๋ฌํ ์ผ์ ์ปดํจํฐ์๊ฒ ๋งก๊ธด๋ค๋ ๊ฒ์ ์๋นํ ๋น์ฉ๊ณผ ์๊ฐ์ด ์์ ๋๋ ๋ฌธ์ ๋ผ์ ์ธ๊ณต ์ ๊ฒฝ๋ง์ ๋ํ ์ฐ๊ตฌ๋ ์ค์ฉ์ฑ ์ธก๋ฉด์์ ๋น์ ๋ณด์ง ๋ชปํ๋ค. ํ์ง๋ง 2010๋ ์ด์ค๋ฐ ๋ฃจ๋ฉํํธ์ ๋งคํด๋ฆฌ๋๋์ ์ํด ์ธ์์ผ๋ก ๋ค์ ๋์๋ค.
๊ทธ๋ค์ด ์ฐฉ์ํ ๋ฐฉ๋ฒ์ ํ๋์ ํผ์ ํธ๋ก ์ผ๋ก ์์ธก์ ์ํํ๋ ๋์ ์ฌ๋ฌ ๊ฐ์ ํผ์ ํธ๋ก ์ ํจ๊ป ์ฌ์ฉํ ๋ค๋ ๊ฒ์ด๋ค. ํ๋์ ํผ์ ํธ๋ฐ์ ์ ๋ ฅ์ ๋ฃ๊ณ ๊ทธ ํผ์ ํธ๋ก ์ ์ถ๋ ฅ์ ๋ค๋ฅธ ํผ์ ํธ๋ก ์ ์ ๋ ฅ์ ์ฐ๊ฒฐํด์ ํ๋์ ๋คํธ์ํฌ ๋ง์ ํ์ฑํ๋ค.๊ทธ ๋คํธ์ํฌ์ ๋์ ์๋ ํผ์ ํธ๋ก ์ ์ถ๋ ฅ์ด ์ ์ฒด ์ ๊ฒฝ๋ง์ ์์ธก๊ฒฐ๊ณผ์ด๋ค.
๊ฐ์ค์น ๊ฐฑ์ ๊ณผ์ ์ ์ฃผ์ ๋ถ๋ถ์ ๊ณต์ํํด ๋ณด๋ฉด ์์ธก ๊ฒฐ๊ณผ์ ์ค์ฐจ์ ๊ธฐ์ดํด์ ํผ์ ํธ๋ก ์ ๊ฐ์ค์น๋ฅผ ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌํ ์ค์ฐจ๋ฅผ ์ธก์ ํ๋ ํจ์๋ฅผ ๋น์ฉํจ์(cost function) ๋๋ ์์คํจ์(loss function)๋ผ ํ๋ค. ๋น์ฉํจ์๋ ์ ๊ฒฝ๋ง์ ์ ๋ ฅ๋ '์ง๋ฌธ' ์ฆ ์ ๋ ฅ ๊ฒฌ๋ณธ x์ ๋ํด ์ ๊ฒฝ๋ง์ด ์ถ๋ ฅํด์ผ ํ๋ ์ ๋ต๋ ์ ๊ฒฝ๋ง์ด ์ค์ ๋ก ์ถ๋ ฅํ ์์ธก๊ฐ y์ ์ฐจ์ด๋ฅผ ์๋ํํ๋ ํจ์์ด๋ค. ์ด ์์ค, ๋น์ฉ ํจ์๋ ์ฐธ๊ฐ๊ณผ ๋ชจํ์ ์์ธก๊ฐ์ ์ฐจ์ด์ ์ ๋๊ฐ์ ์ค์ฐจ ๋๋ ๋น์ฉ์ผ๋ก ์ฐ์ถํ๋ค.
$err(x) = |y - f(x)|$
r"$\jmath(x) = \min\sum_{i=1}^{n}{err(x_i)}$"
์ด ์์ ๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
'๐พ Deep Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
GAN (Generative Adversarial Networks) (0) | 2021.02.26 |
---|---|
์ญ์ ํ (backpropagtion) (0) | 2021.02.26 |
[Transformer] Model ์ ๋ฆฌ (0) | 2021.02.23 |
VAE(Variational autoencoder) ์ข ๋ฅ (0) | 2021.02.21 |
[Transformer] Positional Encoding (3) (0) | 2021.02.20 |