퍼셉트론 / 신경망
1. 퍼셉트론(Perceptron)
신경망을 구성하는 가장 기본 단위
다수의 신호를 입력으로 받아 하나의 신호를 출력
- 신호란 전류와 같은 일종의 흐름
- 흐른다 / 안흐른다로 1과 0 값 중 하나를 가질 수 있다
- 가중치는 전류의 저항과 비슷하지만 퍼셉트론에서는 가중치(저항)이 클수록 강한 신호를 흘려보낸다
2. 논리게이트(Logic Gate)
퍼셉트론의 가장 단순한 형태는 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 의 표현)
3. 신경망의 기본구조
- ANN(Artificial Neural Networks) : 인공 신경망은 실제 신경계의 특징을 모사하여 만들어진 계산 모델
- 인공 신경망의 기본 구조인 퍼셉트론은 실제 뇌 신경망의 기본 구조인 뉴런을 모사하여 제작
- 최근에는 줄여서 뉴럴넷(Neural-Net)으로 불린다
※ 원으로 표현된 부분이 뉴런 또는 노드 라고 한다
① 입력 신호( x0,x1,... )가 입력되면 각각 고유한 가중치( w0,w1,... )가 곱해진다
② 다음 노드에서는 입력된 모든 신호를 더해준다( ∑ )
③ 각 노드에서의 연산값이 정해진 임계값(Threshold Logic Unit)을 넘을 경우에만 다음 노드들이 있는 층(layer)으로 신호를 전달한다
우리의 목표는 생물의 신경망과 유사한 인공 신경망을 만드는 것이 아니라
복잡한 데이터 속에서 패턴을 발견할 수 있는 알고리즘으로서의 인공 신경망을 만드는 것
4. 활성화 함수(Activation Function)
- 각 노드에서의 연산값이 정해진 임계값을 넘을 경우에만 다음 노드로 신호를 전달하는 역할
- 다음 층으로 신호를 얼마만큼 전달할지를 결정
① 계단 함수(Step function)
- 입력 값이 임계값을 넘으면 1을 출력하고 그렇지 않으면 0을 출력하는 함수
- 단점 : 임계값 지점에서 미분이 불가능하고 나머지 지점에서는 미분값이 0이 나온다
② 시그모이드 함수(Sigmoid function)
- 모든 지점에서 미분 가능하며 미분값도 0이 아니다
- 단점 : 음수 값을 0에 가깝게 표현하기 때문에 입력 값이 최종 레이어에서 미치는 영향이 적어지는 Vanishing Gradient Problem이 발생
③ ReLU 함수(Rectified Linear Unit, 경사함수)
- 실제로 많이 사용되는 활성화 함수
- sigmoid, tanh 함수보다 학습이 빠르고, 연산 비용이 적고, 구현이 매우 간단하다는 특징이 있다
- x<0인 값들에 대해서는 기울기가 0이기 때문에 뉴런이 죽을 수 있는 단점이 존재한다
5. 순전파
입력층에서 입력된 신호가 은닉층의 연산을 거쳐 출력층에서 값을 내보내는 과정
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
- 노드가 가중치로 연결되어 입력 신호와 연산한 뒤에 출력값으로 내보내는 함수라고도 할 수 있다
- 가중치를 수정하면서 적절한 값을 찾는 과정이 학습(training, learning)이다
6. 신경망의 층
1. 입력층(Input layer)
- 데이터셋이 입력되는 층
- 데이터셋의 특성(Feature)에 따라 입력층의 노드의 수가 결정
(Feature수 = Node수) - 입력층은 어떤 계산도 수행하지 않고 그냥 값들을 전달하기만 하는 특징을 가진다
- 신경망의 층수(깊이, depth)를 셀 때 입력층은 포함하지 않는다
2. 은닉층(Hidden layer)
- 입력된 신호가 가중치, 편향과 연산되는 층
- 입력층과 출력층 사이에 있는 층을 은닉층이라 부른다
- 은닉층에서 일어나는 계산의 결과를 사용자가 볼 수 없어서 은닉이라는 단어가 붙었다
- 은닉층의 노드수는 특성 수와 상관 없이 구성할 수 있다
※ 일반적으로 딥러닝이면 2개 이상의 은닉층을 가진 신경망을 말한다
3. 출력층(Output layer)
- 은닉층의 연산을 마친 값이 출력되는 층
- 풀어야할 문제 종류에 따라서 출력층을 잘 설계하는 것이 중요
- 이진분류 : 시그모이드(sigmoid) 함수 사용하며 출력층의 노드 수는 1 (출력되는 값이 0과 1사이의 확률값이 되도록 한다)
- 다중 분류 : 소프트맥스(softmax) 함수 사용하며 출력층의 노드 수는 레이블의 클래스 수와 동일하게 설정
- 회귀 : 일반적으로 활성화 함수를 지정하지 않으며 출력층의 노드 수는 출력값의 특성(feature)수와 동일하게 설정
7. Tensorflow 코드
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)
- 머신러닝은 전처리로 모델성능을 올릴 수 있었지만 신경망은 데이터에서 필요한 특성을 알아서 조합하여 찾아낸다
따라서 최소한의 전처리만 해주어도 된다 - 이렇게 스스로 특성 관계를 찾아내는 것이 표현 학습
Author And Source
이 문제에 관하여(퍼셉트론 / 신경망), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ssulee0206/퍼셉트론-신경망저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)