퍼셉트론 (perceptron)
1. 서론
--- 딥러닝 개론 포스팅 참조 ----
https://dataworld.tistory.com/48
2. 신경망 이전의 연구
* 얼굴 인식 / 숫자 및 문자 인식
* 즉, 사람이 직접 패턴을 파악하고 예측을 하는 방식
(그러나 신경망은 사람 대신 기계가 알아서)
3. (초기) 퍼셉트론
= 신경망의 가장 기본적인 단위
[1] 초기 형태의 신경망
* 1958년 초기 신경망 퍼셉트론의 등장
* n개의 input의 결과 m개의 output 출력하는 neuron을 본 뜸
* 변수 x1, x2 는 입력값
* w1, w2는 가중치
(입력값으로 들어오는 신호를 얼마나 줄이고 높이고 싶은 지를 판단하는 수치)
* w0는 bias
(입력하는 값에 상관없이 무조건 입력되는 값)
* 활성화 함수를 최종적으로 거침
* y는 출력값
- 즉, y = activation(w0+w1x1+w2x2)
* 예) activation(x) = 1 (x>=0) & 0 (x<0)
* 예를 들어 x1에 대한 입력이 1, x2에 대해서는 0, wo는 -0.5라 하고
가중치 w1, w2는 각각 2와 1이라 한다면
y = activation(-0.5+1*2+1*0)의 형태로 만들어진다.
즉, 이는 y=activation(1.5)이며 1.5는 0보다 크므로
결과는 1이 된다.
[2] 퍼셉트론 예시
오늘 나온 신작 드라마 수 (X1) | 확보한 여가 시간 (X2) | 자기계발 공부 여부 (Y) |
2 | 4 | 1 |
5 | 4 | 1 |
7 | 1 | 0 |
3 | 0 | 0 |
0 | 2 | 1 |
4 | 1 | 0 |
* 해당 데이터를 기반으로 자기계발 공부 여부(Y)를 예측하는 퍼셉트론 모델을 만들어 보자면
* w1 = 드라마 시청 욕구로 인한 영향 / w2 = 여가 시간에 따른 공부하고 싶은 정도 (가중치)
* w0 = 다른 영향을 받지 않고 학습을 해야 한다는 의지 (bias)
* 이를 모두 계산해서 1이 나오는 지 0이 나오는 지 자기계발 시간에 공부할 지에 관한 여부를 알 수 있음
* 여러 데이터를 input으로 넣은 결과 activation 함수를 직선 기점으로 하여 시각화하면 아래와 같다
* 즉, 시각화한 직선의 방정식을 얼만큼 잘 구하는 지가 퍼셉트론 모델을 얼마나 잘 구현하는 지를 알 수 있음
* 퍼셉트론은 선형 분류기로서 데이터 분류가 가능하다.
* 단점) 그러나, 하나의 선으로 분류할 수 없는 문제가 존재한다. (이럴 경우 퍼셉트론으로는 완벽한 분류가 불가능)
: 1969년 퍼셉트론의 암흑기 도래
[3] 실습
{1} 퍼셉트론 함수 - 간단 실습
* 간단하게 Perceptron이라는 함수를 만들어 임의의 가중치 및 bias를 설정하고 직선 형태의 함수 방정식을 세워 output으로 내놓게 설정
def Perceptron(x_1,x_2):
# set bias & weight
w_0 = # your bias
w_1 = # your 1st weight
w_2 = # your 2nd weight
# make activation function
output = w_0+w_1*x_1+w_2*x_2
# set results of the activation function
if output < #your criteria:
y = 0
else:
y = 1
return y, output
4. 다층 퍼셉트론
* 첫 번째 빙하기의 해결은 '다층 퍼셉트론'의 발견이었다.
* 단층 퍼셉트론은 입력층과 출력층만 존재한다.
- 이는 선형적인 문제만 해결가능하다
(즉, 한 개의 선을 기준으로 나누어 해결 가능한 문제: '선형적인 문제'라고 함 / 그 반대는 '비선형적인 문제')
* 즉, 단층 퍼셉트론을 여러 층으로 쌓기
-> 다층 퍼셉트론 (Multi Layer Perceptron)
* Input Layer - Hidden Layer - Output Layer
* Hidden Layer는 입력층과 출력층 사이의 모든 Layer를 뜻함
* Hidden Layer가 많아진다면, 깊은 신경망이라는 의미의 Deep Learning 단어 사용
* 장점은 분류할 수 있는 방법이 많아지면서 성능 향상
* 단점은 가중치가 계속 누적됨 - 한 모델에 필요한 가중치의 개수가 너무 많아짐
5. 딥러닝 모델 - 학습 방법
[1] 개요
* 예측값과 실제값 간의 오차값을 최소화하기 위해 오차값을 최소화하는 모델의 인자를 찾는 알고리즘 적용
* loss function을 최소화하는 가중치를 찾기 위해 최적화 알고리즘 적용
[2] 예측값 구하는 방식
{1} 순전파(Forward propagation)
= 입력값을 바탕으로 출력 값을 계산하는 과정
* 도중에 나온 출력값을 다시 입력값으로 입력하는 과정을 계속 반복하여 점진적으로 나아가는 과정
* 예시) (우측 그림 - bias = 0 이라 가정)
- (1) bias + 2x1 + 1x(-1) = 1이 나옴
- 나온 값 1의 activation function 결과 0.73이 나옴
(actiavtion은 step 외 sigmoide, Lelu 등 다양)
- (2) 0.5가 나옴
- (3) (1) & (2) 의 두 결과가 input으로
0.73x1 + 0.5x(-1) = 0.23의 activation 값 0.55 산출
* 순전파를 사용하면 예측값과 실제값 간의 오차값을 구하여 loss function을 구할 수 있음 (오차값을 줄일수록 loss function값 감소)
- 최적화 방법은 '경사하강법(gradient descent)'
* 경사하강법 = 가중치(w)를 loss function 값이 작아지게 업데이트 하는 방법
- 가중치는 gradient 값을 사용하여 업데이트 수행
- gradient 값은 각 가중치마다 정해지며, 역전파(back propagation)를 통하여 구할 수 있음
{2} 역전파(Back propagation)
= forward propagation의 반대 방향으로 이루어지는 과정
* 각 가중치별(w1, w2, w3~)로 gradient가 존재함 (Grw1, Grw2, Grw3~)
* gradient를 한 번에 구하기 어렵기에 역전파 방법을 사용
* (상단 그림) w6의 gradient Grw6를 안다고 가정하고, 역방향으로 이를 바탕으로 Grw3를 알 수 있다.
(편미분 계산 필요)
** 위 과정을 수행하여 가중치들을 업데이트할 수 있으며, 이를 반복하여 loss function값을 제일 작게 만드는 가중치를 구함
- forward propagation을 통해서 실제값과 예측값 (y와 ŷ간의 오차)간의 오차를 통해 loss 구할 수 있음
- 해당 loss를 통해 가장 가까이 있는 가중치의 gradient 값 구함
- back propagation을 통해 각 가중치의 gradient값 구함
[3] 딥러닝 모델 - 학습 방법 정리
1) 학습용 feature 데이터를 입력하여 예측값 구하기 (순전파)
2) 예측값과 실제값 사이의 오차 구하기 (loss 계산)
3) loss를 줄일 수 있는 가중치 업데이트 하기 (역전파)
4) 1) ~ 3)번 반복으로 loss를 최소로 하는 가중치 얻기 (새롭게 얻은 w를 바탕으로 다시 1)부터 반복)
- 반복하면서 loss가 계속 감소하면서 더 이상 줄지 않을 때의 가중치 w를 얻기
- 출처 - 2021 NIPA/AI 기본/응용 교육과정
'Artificial Intelligence > Deep Learning' 카테고리의 다른 글
다양한 신경망 - 자연어 처리 (0) | 2021.12.11 |
---|---|
다양한 신경망 - 이미지 처리 (0) | 2021.12.08 |
텐서플로우(TensorFlow) (+Keras) (0) | 2021.12.07 |
댓글