인간의 뉴런의 자극전달 과정에 아이디어를 착안하여 발생한 머신러닝 알고리즘이다.
[퍼셉트론(Perceptron)] 신경망의 뉴런과 대응되는 객체로, inputs / weights / transfer function / activation function로 구성되며 퍼셉트론이 여러 개 존재하여 한 퍼셉트론의 출력값이 다른 퍼셉트론의 입력값이 되는 형태를 다층 퍼셉트론(Multi Layler Perceptron)이라고 한다.
[활성함수(Activation Function)] 퍼셉트론 내의 출력을 새롭게 변환하여 은닉층(Hidden layer)을 의미있게 쌓아주는 역할을 한다.
활성함수를 조금 쉽게 이해해보자면, 퍼셉트론 내에서 반환되는 값은 지나치게 크거나 지나치게 작을 수도 있고 그 의미를 해석하기 쉽지 않은데
활성함수를 시그모이드 함수로 설정하면 모든 반환값이 0과 1 사이이므로 확률적인 의미부여를 할 수 있다는 것이다.
다만 시그모이드 함수는 기울기가 1 미만으로 신경망이 깊어지면 점차적으로 가중치가 사라지는 기울기 소실이 발생하기 때문에 이에 대한 대안으로 렐루(Relu)계열의 함수가 선호되고 있다.
[오차역전파(BackPropagation)] Output layer에서 에러의 변화량을 앞선 layer로 전달하는 기능을 한다.
인공신경망모형에서 도출된 예측치와 실제치의 차이(오차)에 대해서 각 퍼셉트론의 기여도를 계산한 후 이를 가중치에 반영하여 점차적으로 모형의 정확도를 높여나간다.
오차역전파는 모델의 정확도를 높이는 장점이 있으나 이를 위해 상당히 많은 메모리를 차지하는 등 시스템 성능에 많이 의존하게 된다.
딥러닝(Deep Nueral Network)과의 차이점
딥러닝과 인공신경망은 구조가 유사하나 깊이와 복잡성에서 차이가 있다. 인공신경망에는 은닉층이 없거나 한개 있는 반면, 딥러닝에는 두 개 이상의 은닉층이 존재한다.
당연히 딥러닝이 인공신경망에 비해 모델이 복잡하고 학습 소요 시간도 오래 걸린다.
장점
단점
라이브러리 및 작동 코드
from sklearn.neural_network import MLPClassifier
주요 파라미터
hidden_layer_sizes=(100,)
은닉층 내 뉴런의 개수
activation='relu'
활성화함수, {'identity', 'logistic', 'tanh', 'relu'}
solver='adam'
가중치 최적화에 이용하는 알고리즘, 'lbfgs': quasi-Newton Method, 'sgd': stochastic gradient descent, 'adam': stochastic gradient-based optimizer
alpha=0.0001
L2 규제의 강도
learning_rate='constant'
학습률, 'constant' 일정, ‘invscaling’ 학습률이 점차적으로 감소, ‘adaptive’ ‘learning_rate_init’에 맞게 조정
max_iter=200
최적화 수렴 시까지 반복하는 최대횟수