끄적이는 기록일지

[딥러닝] 01.퍼셉트론_(2)퍼셉트론 본문

AI실무

[딥러닝] 01.퍼셉트론_(2)퍼셉트론

시시나브로 2021. 10. 8. 21:04
728x90
 

[딥러닝] 01.퍼셉트론_(1)딥러닝

1. 인공지능, 머신러닝, 딥러닝의 관계 2. 딥러닝이란 1) 머신러닝의 여러 방법론 중 하나 2) 인공신경망에 기반하여 컴퓨터에게 사람의 사고방식을 가르치는 방법 3. 인공신경망이란 1) 생물학의

kcy51156.tistory.com

지난 시간엔 딥러닝이 무엇이고 실생활에 어떻게 활용되고 있는지에 대해 알아보았습니다.

이번에는 가장 작은 정보처리 단위인 퍼셉트론에 대해 알아보겠습니다.

1. 신경망 이전의 연구

신경망 이전에는 사람이 직접 패턴을 파악하여 컴퓨터에게 예측하도록 하여 사용했습니다.

2. 초기 형태의 신경망, 퍼셉트론

- 인간의 신경세포와 비슷한 구조를 가진 퍼셉트론은

  처음에 n개의 신호를 받아와 정보를 전달에 출력하는 형태를 가지고 있다.

3. 퍼셉트론의 기본구조

y = activation(w0 + w1*x1 + w2*x2)

- x1, x2를 입력받아 가중치인 w1, w2를 각각 곱하여 w0와 이를 더해준 뒤 활성화함수로 1인지 0인지 판단한 값을 y로 출력되게 된다.(여기서 w0는 바이어스에 해당된다.)

 

* 가중치 : 들어오는 신호를 얼마나 증폭시킬 것인지(신호를 높이고 싶을 땐 가중치↑)

* 바이어스 입력값에 상관없이 무조건 입력되는 값. 어떤 값이든 무조건 들어감

* 활성화함수 : 결과값이 0보다 크거나 같으면 1, 0보다 작으면(음수면) 0

ex) 입력값이 1, 0이고 가중치가 각각 2, 1일 때 y값은? 바이어스는 -0.5

→ y = activation(-0.5 + 1*2 + 0*1) = activation(1.5) = 1(1.5 ≥ 0)

4. 퍼셉트론 동작 예시

- 강의 학습 여부를 예측하기 위한 데이터

오늘 나온 신작 드라마 수(x1) 확보한 여가 시간(x2) 강의 학습 여부(y)
2 4 1
5 4 1
7 1 0
3 0 0
0 2 1
4 1 0
... ... ...

5. 퍼셉트론을 활용한 선형 분류기

1) 퍼셉트론은 선형 분류기로서 데이터 분류 가능.

2) 하나의 선으로 분류할 수 없는 경우

   → 다층 퍼셉트론

 

 

 

 

6. 실습
1. perceptron의 예측 결과가 학습한다

: 1 이 나오도록 x1, x2x에 적절한 값을 입력하세요.
(활성화 함수는 ‘신호의 총합이 0 이상이면 학습하고, 0 미만이라면 학습하지 않는다‘는 규칙을 가진다.)

# 학습 여부를 예측하는 퍼셉트론 함수
"""
w0 : 다른 영향을 받지 않고 학습을 해야 한다는 의지
x1 : 오늘 나온 신작 드라마 수
w1 : 드라마 시청 욕구로 인한 영향
x2 : 확보한 여가 시간
w2 : 여가 시간에 공부하고 싶은 정도
y  : 엘리스 학습 여부(학습한다:1, 학습하지 않는다:0)
"""

def Perceptron(x_1,x_2):
    
    # 설정한 가중치값을 적용
    w_0 = -5    # 다른 영향을 받지 않고 학습을 해야 한다는 의지
    w_1 = -1    # 드라마 시청 욕구로 인한 영향
    w_2 = 5     # 여가 시간에 공부하고 싶은 정도
    
    # 활성화 함수에 들어갈 값을 계산
    output = w_0+w_1*x_1+w_2*x_2
    
    # 활성화 함수 결과를 계산
    if output < 0:
        y = 0
    else:
        y = 1
    
    return y, output


"""
1. perceptron의 예측 결과가 학습한다:1 이 나오도록
   x_1, x_2에 적절한 값을 입력하세요.
"""
x_1 = 0
x_2 = 2

result, go_out = Perceptron(x_1,x_2)

print("신호의 총합 : %d" % go_out)

if go_out > 0:
    print("학습 여부 : %d\n==> 학습한다!" % result)
else:
    print("학습 여부 : %d\n==> 학습하지 않는다!" % result)



>>> 신호의 총합 : 5
학습 여부 : 1
==> 학습한다!

DIY 퍼셉트론 만들기

1. 신호의 총합(output)과 그에 따른 결과 0 또는 1을
   반환하는 함수 perceptron을 완성합니다.
   
   Step01. 입력 받은 값을 이용하여
           신호의 총합을 구합니다.
           
   Step02. 신호의 총합(output)이 0 이상이면 1을, 
           그렇지 않으면 0인 y를 반환하는 활성화 
           함수를 작성해 perceptron함수를 완성

def perceptron(w, x):
    
    output = w[0] + w[1]*x[0] + w[2]*x[1] + w[3]*x[2] + w[4]*x[3]
    
    if output >= 0:
        y = 1
    else:
        y=0
    
    return y, output

# x_1, x_2, x_3, x_4의 값을 순서대로 list 형태로 저장
x = [1,2,3,4]

# w_0, w_1, w_2, w_3, w_4의 값을 순서대로 list 형태로 저장
w = [2, -1, 1, 3, -2]

# 퍼셉트론의 결과를 출력
y, output = perceptron(w,x)

print('output: ', output)
print('y: ', y)



>>> output:  4
y:  1

- 퍼셉트론의 알맞은 가중치 찾기


1. perceptron 함수의 입력으로 들어갈 가중치 값을 입력해주세요.
w 리스트 안의 값들은 순서대로 w0,w1,w2에 해당됩니다.

(주어진 데이터를 완벽히 분리하는 퍼셉트론을 직접 구현.
적절한 가중치(Weight)와 Bias 값을 찾아봅시다.)

import numpy as np


def perceptron(w, x):
    
    output = w[1] * x[0] + w[2] * x[1] + w[0]
    
    if output >= 0:
        y = 1
    else:
        y = 0
    
    return y



# Input 데이터
X = [[0,0], [0,1], [1,0], [1,1]]

'''
1. perceptron 함수의 입력으로 들어갈 가중치 값을 입력해주세요.
   순서대로 w_0, w_1, w_2에 해당됩니다.
'''
# 0보다 작은 값 : 0
w = [-2 , 1, 1]

# AND Gate를 만족하는지 출력하여 확인
print('perceptron 출력')

for x in X:
    print('Input: ',x[0], x[1], ', Output: ',perceptron(w, x))



>>> perceptron 출력
Input:  0 0 , Output:  0
Input:  0 1 , Output:  0
Input:  1 0 , Output:  0
Input:  1 1 , Output:  1
728x90
Comments