Artificial Intelligence/Deep Learning

퍼셉트론 (perceptron)

DaTALK 2021. 12. 6.

1. 서론

--- 딥러닝 개론 포스팅 참조 ----

https://dataworld.tistory.com/48

 

Deep Learning 개론

1. AI & ML & DL 2. Deep Learning이란? * 딥러닝 = 머신러닝의 여러 방법론 중 하나로, 인공신경망에 기반하여 컴퓨터에게 사람의 사고방식을 가르치는 방법 [1] 인공신경망  = 생물학의 신경망에서 영감

dataworld.tistory.com

 

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 기본/응용 교육과정

댓글