인공 신경망
- 이론
인공신경망 개념(Neural Network)
[인공지능 이야기] 생물학적 신경망, 인공신경망, 퍼셉트론, MLP | 인공신경망은 두뇌의 신경세포, 즉 뉴런이 연결된 형태를 모방한 모델이다. 인공신경망(ANN, Artificial Neural Network)은 간략히 신경
brunch.co.kr
x1 -> w1(가중치) -> [뉴런]
x2 -> w2(가중치) -> w1*x1 + w2*x2 + ... -> output : y
...
↖예측값과 실제값 비교 feedback하여 가중치 조절↙
cost(손실) 값과 weight(가중치)값을 비교하여 cost 값이 최소가 되는 지점의 weight 산출.
편미분으로 산출하여 기울기가 0인 지점 산출.
learning rate (학습률) : feedback하여 값을 산출할 경우 다음 feedback 간 간격 비율.
epoch(학습 수) : feedback 수
=> 다중 선형회귀
=> y1 = w*x + b (추세선)
=> 로지스틱 회귀
=> y2 = 1 / (1 + e^(y1) )
=> MLP
단층 신경망(뉴런, Node)
: 입력자료에 각각의 가중치를 곱해 더한 값을 대상으로 임계값(활성화 함수)을 기준하여 이항 분류가 가능. 예측도 가능
단층 신경망으로 논리회로 분류
* neural1.py
def or_func(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.3
sigma = w1 * x1 + w2 * x2 + 0
if sigma <= theta:
return 0
elif sigma > theta:
return 1
print(or_func(0, 0)) # 0
print(or_func(1, 0)) # 1
print(or_func(0, 1)) # 1
print(or_func(1, 1)) # 1
print()
def and_func(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
sigma = w1 * x1 + w2 * x2 + 0
if sigma <= theta:
return 0
elif sigma > theta:
return 1
print(and_func(0, 0)) # 0
print(and_func(1, 0)) # 0
print(and_func(0, 1)) # 0
print(and_func(1, 1)) # 1
print()
def xor_func(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.5
sigma = w1 * x1 + w2 * x2 + 0
if sigma <= theta:
return 0
elif sigma > theta:
return 1
print(xor_func(0, 0)) # 0
print(xor_func(1, 0)) # 1
print(xor_func(0, 1)) # 1
print(xor_func(1, 1)) # 1
print()
# 만족하지 못함
import numpy as np
from sklearn.linear_model import Perceptron
feature = np.array([[0,0], [0,1], [1,0], [1,1]])
#print(feature)
#label = np.array([0, 0, 0, 1]) # and
#label = np.array([0, 1, 1, 1]) # or
label = np.array([1, 1, 1, 0]) # nand
#label = np.array([0, 1, 1, 0]) # xor
ml = Perceptron(max_iter = 100).fit(feature, label) # max_iter: 학습 수
print(ml.predict(feature))
# [0 0 0 1] and
# [0 1 1 1] or
# [1 0 0 0] nand => 만족하지못함
# [0 0 0 0] xor => 만족하지못함
from sklearn.linear_model import Perceptron
Perceptron(max_iter = ).fit(x, y) : 단순인공 신경망. max_iter - 학습 수
- Perceptron api
scikit-learn.org/stable/modules/generated/sklearn.linear_model.Perceptron.html
sklearn.linear_model.Perceptron — scikit-learn 0.24.1 documentation
scikit-learn.org
MLP
: 다층 신경망 논리 회로 분류
x1 | x2 | nand | or | xor |
0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 |
x1 --> nand -> xor -> y
x2 or
* neural4_mlp1.py
import numpy as np
from sklearn.neural_network import MLPClassifier
feature = np.array([[0,0], [0,1], [1,0], [1,1]])
#label = np.array([0, 0, 0, 1]) # and
label = np.array([0, 1, 1, 1]) # or
#label = np.array([1, 1, 1, 0]) # nand
#label = np.array([0, 1, 1, 0]) # xor
#ml = MLPClassifier(hidden_layer_sizes=30).fit(feature, label) # hidden_layer_sizes - node 수
#ml = MLPClassifier(hidden_layer_sizes=30, max_iter=400, verbose=1, learning_rate_init=0.1).fit(feature, label)
ml = MLPClassifier(hidden_layer_sizes=(10, 10, 10), max_iter=400, verbose=1, learning_rate_init=0.1).fit(feature, label)
# verbose - 진행가정 확인. # max_iter default 200. max_iter - 학습수. learning_rate_init - 학습 진행률. 클수록 세밀한 분석을 되나 속도는 저하
print(ml)
print(ml.predict(feature))
# [0 0 0 1] and
# [0 1 1 1] or
# [1 1 1 0] nand
# [0 1 1 0] xor => 모두 만족
from sklearn.neural_network import MLPClassifier
MLPClassifier(hidden_layer_sizes=, max_iter=, verbose=, learning_rate_init=).fit(x, y) : 다층 신경망.
hidden_layer_sizes : node 수
verbose : 진행가정 log 추가
max_iter : 학습 수 (default 200)
learning_rate_init : 학습 진행률. (클수록 세밀한 분석을 되나 속도는 저하)
- MLPClassifier api (deep learning)
scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html
sklearn.neural_network.MLPClassifier — scikit-learn 0.24.1 documentation
scikit-learn.org
'BACK END > Deep Learning' 카테고리의 다른 글
[딥러닝] k-means (0) | 2021.03.22 |
---|---|
[딥러닝] 클러스터링 (0) | 2021.03.19 |
[딥러닝] KNN (0) | 2021.03.18 |
[딥러닝] RandomForest (0) | 2021.03.17 |
[딥러닝] Decision Tree (0) | 2021.03.17 |