728x90
퍼셉트론, 활성화함수, 신경망구조
퍼셉트론(Perceptron)
- 신경망을 이루는 가장 기본단위
- 다수의 신호를 입력으로 받아 하나의 신호를 출력하는 구조이다.
- 신경망은 퍼셉트론을 여러 층으로 쌓아서 만들게 된다.
- 인간의 뉴런으로부터 착안하여 생겨난 개념이다.
- 입력값 - 순입력함수 - 활성함수 - 예측값 형태로 구성되어있다.
- 단층퍼셉트론은 입력층 - 중간층 - 출력층으로 구성되어있다.
- 다층퍼셉트론은 중간층이 여러개의 노드로 구성되어있다.
퍼셉트론은 크게 두 부분으로 나뉜다.
- 가중치(Weight)-편향(bias) 연산
- 활성화 함수(Activation function)
활성화 함수(Activation Function)
- 모든 활성화 함수의 공통점은 비선형(Non-linear)이다.
- 활성화함수가 선형이라면 층을 아무리 깊게 쌓아도 여러 층을 쌓는 이점을 살리지 못하게 된다.
- 계단 함수(Step function)
- 입력값이 임계값(여기서는 0)을 넘기면 1을, 그렇지 않으면 0을 출력하는 함수이다.
- 시그모이드 함수(Sigmoid function)
- 계단함수의 미분이 안되는 단점을 해결하기 위해 사용된 함수. 모든 지점에서 미분 가능하며, 미분값도 0이 아니다.
- ReLU 함수(ReLU function)
- 양의 값이 입력되면 그 값을 그대로 출력하고 음의 값이 입력되면 0을 반환한다.
- 은닉층에 자주 사용한다.
- 소프트맥스 함수(Softmax function)
- 가중합 값을 소프트맥스 함수에 통과시키면 모든 클래스의 값의 합이 1이 되는 확률값으로 변환한다.
- 다중분류에 자주 사용한다.
논리게이트와 퍼셉트론
- AND GATE
- NAND GATE
- OR GATE
- XOR GATE
인공신경망의 구조
- ANN(Artificial Neural Networks), 즉 인공 신경망은 실제 신경계를 모사하여 만들어진 계산 모델입니다. 뉴럴넷이라고도 한다.
- 퍼셉트론을 여러 개의 층으로 쌓아 구축한 신경망을 다층 퍼셉트론 신경망(Multi-Layer Perceptron, MLP)이라고 한다.
- 입력층(Input Layer)
- 데이터셋의 특성(Feature)에 따라 입력층 노드의 수가 결정한다.
- 어떤 계산도 수행하지 않고 그냥 값들을 전달하기만 하는 특징이 있다.
- 신경망의 층수(깊이, depth)를 셀 때 입력층은 포함하지 않는다.
- 은닉층(Hidden Layers)
- 입력층과 출력층 사이에 있는 층이다.
- 입력층으로부터 입력된 신호가 가중치, 편향과 연산되는 층이다.
- 일반적으로 딥러닝(Deep Learning)이라고 하면 2개 이상의 은닉층을 가진 신경망을 말한다.
- ReLU 함수를 자주쓴다.
- 출력층(Output Layer)
- 가장 마지막에 위치한 층이며 은닉층 연산을 마친 값이 출력되는 층이다.
- 우리가 풀어야 할 문제 종류에 따라서 출력층을 잘 설계하는 것이 중요하다.
- 이진 분류(Binary Classification) : 활성화 함수로는 시그모이드(Sigmoid) 함수를 사용하며 출력층의 노드 수는 1로 설정한다. 출력되는 값이 0과 1 사이의 확률값이 되도록 한다.
- 다중 분류(Multi-class Classification) : 활성화 함수로는 소프트맥스(Softmax) 함수를 사용하며 출력층의 노드 수는 레이블의 클래스(Class) 수와 동일하게 설정한다.
- 회귀(Regression) : 일반적으로는 활성화 함수를 지정해주지 않으며 출력층의 노드 수는 출력값의 특성(Feature) 수와 동일하게 설정한다. 단순히 하나의 수를 예측하는 문제라면 1이 되도록 한다.
신경망 예제
항상 문제를 풀기 전에 자신이 풀고자 하는 문제가 어디에 속하는 지 생각하기.
import pandas as pd
import tensorflow as tf
# mnist 데이터셋
mnist = tf.keras.datasets.mnist
# test train 나눠주기
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 정규화하는 과정
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')
])
# 두번째 방식
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))
model.add(tf.keras.layers.Dense(100, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# fit
model.fit(x_train, y_train, epochs=5)
# 평가
model.evaluate(x_test, y_test, verbose=2)
300x250
'코딩💻' 카테고리의 다른 글
[Deep Learning] 순전파, 역전파, 손실함수, 경사하강법, 옵티마이저, 배치사이즈 (0) | 2022.10.26 |
---|---|
[Python] BFS와 DFS 정리 (0) | 2022.10.26 |
그래프와 인접리스트 인접행렬, 순회(전위,중위,후위) (1) | 2022.10.25 |
[Machine learning] 단순선형회귀 (Simple Linear Regression), 기준모델 (0) | 2022.10.23 |
[Python] OOP(Object-Oriented Programming), 캡슐화, 상속과 포함, 추상화, 다형성 (0) | 2022.10.12 |