딥러닝 개론 - 퍼셉트론

·2021년 12월 12일
0

NIPA AI 교육

목록 보기
17/31

1. 신경망 이전의 연구

얼굴 인식, 숫자 및 문자 인식
(몇가지 패턴을 정해서 맞는지 안맞는지 검사)
이 '인식을 위한 특정한 패턴'을 사람이 직접 파악, 결정
어떤 패턴이 있어야 얼굴이냐, 어떤 패턴이 있어야 숫자 '9'이냐 같은 것.

신경망은 이 패턴 파악을 신경망이 하게 됨

2. 1958년 초기 신경망 퍼셉트론의 등장

딥러닝의 가장 기본적인 단위, 이것만으로도 어느 정도 분류나 회귀가 가능

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

사람의 신경세포인 뉴런과 비슷하게 만듦.

뉴런의 inputs(다른 신경세포로 부터 신호가 전달되어 들어오는 부분, n개의 돌기가 있음)
-> 하나로 합쳐져서 다발로 전달
-> n개로 outputs -> 다른 신경세포로 전달

4. 퍼셉트론의 기본 구조

간단한 예제로 보기 위해 두 개의 입력값만 있는 경우로 예시를 들어보자.

가중치: 들어오는 신호에 대해 얼만큼 증폭시킬 것인가 => 해당 신호(x값)에 곱해짐

bias는 입력값에 상관없이 무조건 입력되는 값. (약간 1차함수 y절편 느낌?)

summation 을 통과 => 모두 더하라는 뜻(bais+w1x1+w2x2)

활성화함수 Activation function 를 거쳐야 최종적인 y값이 나옴

5. 활성화함수 Activation function

생각보다 단순
들어오는 값 x가 0보다 크거나 같으면 1을 리턴
들어오는 값 x가 0보다 작으면 0을 리턴

6. 퍼셉트론 동작 예시

신작드라마 편수와 확보한 여가시간에 따른 학습여부 예측

1이면 학습, 0이면 학습안함

이 직선을 얼마나 잘 구하느냐가 퍼셉트론의 예측 정확도

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

퍼셉트론은 선형분류기로써 데이터 분류 가능함
선형분류기란: 선을 통해서 분류를 함(선을 그어서 해당 선의 어느 쪽 영역에 속하느냐에 따라 분류)

8. 하나의 선으로 분류할 수 없는 문제의 등장

퍼셉트론의 한계
-> 1969년부터 이것을 해결하지 못하는 동안 첫 인공지능의 겨울시기가 도래

9. 실습1

퍼셉트론 작동 예시 구현하기
이번 실습에서는 이론 영상을 통해 학습한 퍼셉트론의 작동 예시를 직접 수행해보겠습니다.

신작 드라마 수(x1)와 확보한 여가 시간(x2)에 따른 엘리스 코딩 학습 여부(y)를 예측하는 모델을 구현했을 때, 아래와 같은 변수들을 가정합니다.

지시사항
perceptron의 예측 결과가 학습한다:1 이 나오도록 x1, x2에 적절한 값을 입력하세요.

활성화 함수는 신호의 총합이 0 이상이면 학습하고, 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 = 1
x_2 = 3

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)

10. 실습2

DIY 퍼셉트론 만들기

지시사항
신호의 총합 output을 정의하고, output이 0 이상이면 1을, 그렇지 않으면 0인 y를 반환하는 활성화 함수를 작성해 perceptron 함수를 완성합니다.

'''
1. 신호의 총합과 그에 따른 결과 0 또는 1을
   반환하는 함수 perceptron을 완성합니다.
   
   Step01. 입력 받은 값을 이용하여
           신호의 총합을 구합니다.
           
   Step02. 신호의 총합이 0 이상이면 1을, 
           그렇지 않으면 0을 반환하는 활성화 
           함수를 작성합니다.
'''
def perceptron(w, x):
    
    output = w[0]
    for i in range(0,len(x)):
        output += w[i+1] * x[i]
    
    if output < 0:
        y = 0
    else:
        y = 1
    
    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)

11. 실습3

퍼셉트론의 알맞은 가중치 찾기
이번 실습에서는 주어진 데이터를 완벽히 분리하는 퍼셉트론을 직접 구현해보도록 하겠습니다.

단층 퍼셉트론을 직접 구현해보며 적절한 가중치(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에 해당됩니다.
'''
w = [-2, 1, 1]

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

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

profile
백엔드 개발자. 공동의 목표를 함께 이해한 상태에서 솔직하게 소통하며 일하는 게 가장 즐겁고 효율적이라고 믿는 사람.

0개의 댓글