Deep Learning A to Z - ANN(1) - restoring....
1. What is ANN(Ariticial Neroun Networks)
인공신경망(ANN)은 생물의 신경망 체계를 그대로 모방한 신경망이다. 이 신경망을 통해서, 컴퓨터는 주어진 데이터에 대해 지속적으로 학습을 하게 된다.
(ref.http://creativeprm.tistory.com/82\)
위 그림과 같이 실제 신경의 작동원리는 다음과 같이 간략히 설명될 수 있다.
dendrites(수상돌기)를 통해 data(외부자극)을 받게 되며, cell body(신경세포체)와 axon(축삭돌기)를 통해 외부자극에 대해 연산을 하게 되며, 이 연산값을 축산단말을 통해 다음 신경세포체의 수상돌기로 전달한다.
이 점을 컴퓨터에 녹이 것이 ANN이다. ANN에서는 각 Node가 세포체 이며, 입력받은 Input에 대해 Node안의 활성화 함수(Activation function)을 통해 새로운 Output 값이 생성된다. 생성된 Output에 대해 필요에 따라 다음 Node(단말)로 전달한다.
(ref.http://creativeprm.tistory.com/82\)
위 그림과 같이 각 노드들은 가중치로 다른 층의 단말과 연결되며, 이 점은 생물의 뇌에서 신경 사이의 결합강도의 역할을 한다.
2. 로직
- ANN학습을 위한 Dataset을 준비한다.
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
- 이번 예제에서 X_train, X_test, y_train, y_test 으로 ANN 학습을 시킬 예정이다.
- 이제 ANN 을 구성한다. 구성을 위한 라이브러리 임포트를 진행한다.
#Part2. Create the ANN
#Step1. Importing Keras and other libraries
import keras
from keras.models import Sequential
from keras.layers import Dense
- 위 설명과 같이 Sequential은 ANN을 초기화 하기 위한 모듈이며, Dense는 ANN의 Layer을 정의할때 사용한다.
#Part2. Create the ANN
#Step1. Importing Keras and other libraries
import keras
from keras.models import Sequential
from keras.layers import Dense
#Step2. Initialize the ANN
classifier = Sequential()
# Only Have ANN Template
- Sequential을 통해 ANN(classifier)를 초기화한다.
- classifier라는 ANN 템플릿 만 정의된 상태이며, Dense 와 Sequential을 통해 템플릿을 완성해야 한다.
- ANN의 학습과정을 잠시 설명한다.
- 위 그림과 같이, 각 노드(Xn)가 input node가 되며, Synapse(w)의 가중치에 따라 Activation function 의 값이 정의되고,이 값에 의해 output이 결정된다.
ANN 학습순서
- Hidden layer로 가는 Synapse를 0보다 큰 아주 작은 변수로 초기화
- Training Dataset의 데이터 하나를 넣각 데이터컬럼(데이터)를 InputNode에 맵핑 시킨다.
- Feedforward propagation : 초기화된 Synapse와 맵된 Input node의 값에 따라 Activation function을 적용하여 ANN을 활성화 한다.
구한 값과 Dataset의 값을 비교한다.
Backward error propagation : 오차를 최소화 하기 위해 역으로 다시 계산을 하여, Synapse 값을 조정한다.
위 5단계를 반복한다. 보통 각 데이터 별로 진행하는 방법을 Reinforce training이라고 한다. 예제에서 사용한 방법은 Stochastic Gradient Descent 방법이다.(한꺼번에 비교하는 방법은 Batch learning).
학습시키는 정도를 Epoch 라고 하며 사용자가 정의할 수 있다.
#Part2. Create the ANN
#Step1. Importing Keras and other libraries
import keras
from keras.models import Sequential
from keras.layers import Dense
#Step2. Initialize the ANN
classifier = Sequential()
# Only Have ANN Template
#Step3. Adding the input layer and the first hidden layer
#Dense(output_dim =6, init='uniform', activation='relu', input_dim = 11)
classifier.add(Dense(units = 6, activation='relu', kernel_initializer='uniform', input_shape=(11,)))
#Adding 2nd hidden layer
#Classifer already know input shape -> doesnt need to know # of input nodes
classifier.add(Dense(units = 6, activation='relu', kernel_initializer='uniform'))
#Adding final layer [output layer]
classifier.add(Dense(units = 1, activation='sigmoid', kernel_initializer='uniform'))
- 초기화 된 classifier 에 Dense function을 통해 Input layer, Output layer, Hidden layer를 정의하자.
- 첫번째 Dense 호출
- 1st Layer = Input layer 이므로 Input node의 갯수도 정의
- unit = output node의 갯수
- output node의 갯수는 보통 input node 갯수의 절반의 최대값으로 결정한다.
- activation = 사용할 Activation function 이름 [ REctifier Function]
- kernel_initializer = dataset의 분포상태 -> uniform : 표준정규분포
- input_shape = input data의 값
- 두번째 Dense 호출
- 1st layer가 있으므로 input_dim 은 정의할 필요가 없으며, activation function 은 Rectifier function이다.
- 세 번째 Dense 호출
- Output layer 이며, 예제에서 필요한 결과는 Perpective, (회원인지 가능성) 이므로, 출력결과는 비율이다.
- Activation function은 sigmoid function 이다.