오늘은 인공신경망(Artificial Neural Network,ANN)에 대해서 배워보도록 하겠습니다.
인공신경망(Artificial Neural Network,ANN)이란 딥러닝의 기초가 되는 기계학습 알고리즘(컴퓨터가 인지/추론/판단)입니다.
사람의 신경망 원리와 구조를 모방하여 만들어진 알고리즘 입니다.
중요 특징으로는
인공신경망 | 신체 |
---|---|
노드(node) | 뉴런 |
레이어(layer) | 여러 뉴런이 모여있는 단위 |
가중치(weight) | 신호의 세기 |
임계값(bias) | 할성함수에 의해 구해진 망의 총합을 다음 층으로 넘길 때 기준값 |
신체의 뉴런(신경계와 신경조직을 이루는 기본 단위)을 기준으로 노드 레이어 등으로 모방되어 제작된 것을 인공신경망이라고 합니다.
1. 입력층(input layer)
2. 은닉충(hidden layer)
3. 출력층(output layer)
활성화함수(activation function)
-입력받은 신호에 따라 적절한 처리후 출력하는 함수
-출력된 신호가 다음 단계에서 활성화 되는지 결정
-step function등 활성화 함수 존재
다음 사진과 같은 모형을 인공신경망이라고 합니다.
장점
단점
ANN의 방법 추가 2가지
DNN(Depp Neural Network)
-ANN 기법에서 은닉충을 늘력 학습 능력향상(은닉충2개이상)
-DNN을 이용한 알고리즘인 CNN,RNN등이 있음
CNN(Convolutional Necural Network,합성신경망)
-기존의 방식은 데이터의 지식을 추출하여 학습하는것이 아닌 데이터의 특징을 추출하 패턴 파악
-Convaoution과 pooling의 과정으로 이루어짐
-convolution 망을 추가해서 인근 픽셀들의 가중치를 조절 후 신호를 만듦
input
mglearn.plots.plot_two_hidden_layer_graph()
output
두개의 은닉충과 input, output을 확인 할 수 있습니다.
input
from sklearn.datasets import make_moons
X,y=make_moons(n_samples=100, noise=0.25, random_state=3)
input
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,stratify=y,random_state=0)
여기 까지는 다른 학습과 동일합니다.
input
from sklearn.neural_network import MLPClassifier
# 1개의 hidden layer, 100개의 hidden node
model=MLPClassifier(random_state=0, max_iter=5000).fit(X_train,y_train)
print(model.score(X_train,y_train))
print(model.score(X_test,y_test))
output
0.925
0.9
hidden layer와 hidden node은 디폴트 값으로 1과 100으로 설정하고 max_iter를 이용하여 5000회 까지만 반복학습 하도록 설정해 줍니다.
input
mglearn.plots.plot_2d_separator(model, X_train, fill=True, alpha=0.3)
mglearn.discrete_scatter(X_train[:,0],X_train[:,1],y_train)
output
input
# hidden node를 10개로 줄인 모형
model=MLPClassifier(random_state=0, max_iter=1000, hidden_layer_sizes=[10]).fit(X_train,y_train)
print(model.score(X_train,y_train))
print(model.score(X_test,y_test))
output
0.85
0.85
input
mglearn.plots.plot_2d_separator(model, X_train, fill=True, alpha=0.3)
mglearn.discrete_scatter(X_train[:,0],X_train[:,1],y_train)
output
input
# hidden layer를 2개로 늘린 모형
model=MLPClassifier(random_state=0, max_iter=1000, hidden_layer_sizes=[10,10]).fit(X_train,y_train)
print(model.score(X_train,y_train))
print(model.score(X_test,y_test))
output
0.8375
0.85
input
mglearn.plots.plot_2d_separator(model, X_train, fill=True, alpha=0.3)
mglearn.discrete_scatter(X_train[:,0],X_train[:,1],y_train)
output
input
# hidden layer 3개
model=MLPClassifier(random_state=0, max_iter=1000, hidden_layer_sizes=[100,100,100]).fit(X_train,y_train)
print(model.score(X_train,y_train))
print(model.score(X_test,y_test))
output
1.0
1.0
input
mglearn.plots.plot_2d_separator(model, X_train, fill=True, alpha=0.3)
mglearn.discrete_scatter(X_train[:,0],X_train[:,1],y_train)
output
은닉충과 노드수를 조절함으로써 데이터의 정확도를 높일 수 있습니다. 해당 방식은 직접 하나씩 하였지만 이 또한 파이프라인을 이용하여 찾을 수 있습니다.
글이 길어져 여기서 마치고, 다음 시간에는 인공신경망에 대해 좀 더 알아보도록 하려고합니다.