신경망을 구성하는 가장 기본 단위
다수의 신호를 입력으로 받아 하나의 신호를 출력
퍼셉트론의 가장 단순한 형태는 AND, NAND, OR과 같은 논리 게이트
① AND GATE : 입력 신호가 모두 1(True)일 때 1(True)을 출력
② NAND(Not AND) GATE : AND 와 결과가 반대
③ OR GATE : 입력 신호 중 하나만 1(True)이라도 1(True)을 출력
④ XOR GATE : 입력 신호가 다를 경우 1(True)을 출력
(신경망이 논의되던 초기에 퍼셉트론의 한계로 지적되었던 것이 바로 XOR GATE 의 표현)
- ANN(Artificial Neural Networks) : 인공 신경망은 실제 신경계의 특징을 모사하여 만들어진 계산 모델
- 인공 신경망의 기본 구조인 퍼셉트론은 실제 뇌 신경망의 기본 구조인 뉴런을 모사하여 제작
- 최근에는 줄여서 뉴럴넷(Neural-Net)으로 불린다
※ 원으로 표현된 부분이 뉴런 또는 노드 라고 한다
① 입력 신호( x0,x1,... )가 입력되면 각각 고유한 가중치( w0,w1,... )가 곱해진다
② 다음 노드에서는 입력된 모든 신호를 더해준다( ∑ )
③ 각 노드에서의 연산값이 정해진 임계값(Threshold Logic Unit)을 넘을 경우에만 다음 노드들이 있는 층(layer)으로 신호를 전달한다
우리의 목표는 생물의 신경망과 유사한 인공 신경망을 만드는 것이 아니라
복잡한 데이터 속에서 패턴을 발견할 수 있는 알고리즘으로서의 인공 신경망을 만드는 것
- 각 노드에서의 연산값이 정해진 임계값을 넘을 경우에만 다음 노드로 신호를 전달하는 역할
- 다음 층으로 신호를 얼마만큼 전달할지를 결정
① 계단 함수(Step function)
② 시그모이드 함수(Sigmoid function)
③ ReLU 함수(Rectified Linear Unit, 경사함수)
입력층에서 입력된 신호가 은닉층의 연산을 거쳐 출력층에서 값을 내보내는 과정
1. 초기상태를 설정
# 가중치와 편향의 값을 임의로 지정(가중치와 편향의 값을 통해 출력값이 나옴)
W1, W2 : 가중치
B1, B2 : 편향
2. 순전파(feed forward) 함수를 정의
# 순전파는 가중치와 편향의 연산을 반복하며 입력값을 받아 출력값으로 반환하는 과정
# (가중치와 곱 + 편향)
A1 = np.dot(x, W1) + b1 # x * 가중치1 + 편향1
Z1 = sigmoid(a1) # 활성화 함수
A2 = np.dot(Z1, W2) + b2 # Z1 * 가중치2 + 편향2
3. 정의한 함수와 입력 데이터를 바탕으로 계산한 값을 출력
y = A2
※ 일반적으로 딥러닝이면 2개 이상의 은닉층을 가진 신경망을 말한다
import pandas as pd
!pip install tensorflow-gpu==2.0.0-rc1
import tensorflow as tf
# 라이브러리 데이터셋을 불러오기
mnist = tf.keras.datasets.mnist
# Training Set, Test Set을 분류
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# Value normalization을 수행합니다.
x_train, x_test = x_train / 255.0, x_test / 255.0
# 신경망 모델 구축
# 각층의 노드수와 활성화 함수 지정
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)), # 차원 축소
tf.keras.layers.Dense(100, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
# 종류에 따라 옵티마이저, loss, metrics 지정
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 모델 학습(하이퍼파라미터 지정)
model.fit(x_train, y_train, epochs=5)
# 모델 평가
model.evaluate(x_test, y_test, verbose=2)
※ 표현학습 (Representation learning)