딥러닝 기초 - 퍼셉트론

·2025년 1월 9일

딥러닝

목록 보기
1/4

퍼셉트론 이야기

1958년 퍼셉트론의 탄생

로젠블랫이 1958년에 발표한 논문 THE PERCEPTRON: A PROBABILISTIC MODEL FOR INFORMATION STORAGE AND ORGAZNIZATION IN THE BRAIN

If we are eventually to understand the capability of higher organisms for perceptual recognition, generalization, recall, and thinking, we must first have answers to three fundamental question
1. How is information about the physical world sensed, or detected, by the biological system?
2. In what form is information stored, or remembered?
3. How does information contained in storage, or in memory, influence recognition and behavior?

  • 인공지능의 시대가 올 것이라는 낙관론이 퍼짐 - 1950년대말, 1960년대 초

인공지능 단어를 만든 민스키

민스키는 조건문을 사용하는 전문가 시스템인 기호주의를 주류로 만들었다.
로젠블랫은 기호주의 대신 연결주의를 선택

기호주의
인간의 지식을 기호화해 컴퓨터에 입력하면 사람과 똑같은 출력을 내줄 것

연결주의, 퍼셉트론
컴퓨터도 인간 뇌의 신경망처럼 학습시키면 근삿값을 출력할 것

AI 윈터 - 그 후

  • 민스키가 퍼셉트론을 비판하면서 1970년부터 AI 윈터가 옴
  • 1986년 제프리 힌튼에 의해 다층 퍼셉트론과 역전파 알고리즘이 재발견



퍼셉트론 알아보기

입력이 2개인 퍼셉트론

입력 x1,x2x_1, x_2와 각각 가중치 w1,w2w_1, w_2에 따른 결과 y라고 할 때,

y={0if w1x1+w2x2θ1if w1x1+w2x2>θy = \begin{cases} 0 & \text{if } w_1x_1 + w_2x_2 \leq \theta \\ 1 & \text{if } w_1x_1 + w_2x_2 > \theta \end{cases}

여기서 θ\theta 는 threshold

θ\thetab-b(bias) 로 바꾸면,

y={0if b+w1x1+w2x2θ1if b+w1x1+w2x2>θy = \begin{cases} 0 & \text{if } b + w_1x_1 + w_2x_2 \leq \theta \\ 1 & \text{if } b + w_1x_1 + w_2x_2 > \theta \end{cases}



퍼셉트론의 한계

  • XOR 문제는 단일 퍼셉트론으로 해결 불가(게이트 하나로 해결하지 못함)
  • 두 개의 은닉층 퍼셉트론으로 XOR 문제 해결 가능
    1. 첫번째 층에서 AND/OR 게이트 구현
    1. 두번째 층에서 AND 결과를 뒤집는 NOT 게이트로 XOR 구현
def XOR(x1, x2):
	s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    
    return y

-> 다층의 퍼셉트론이 필요



신경망

활성화 함수(activation function)

여기서는 활성화 함수를 hh 로 표현

시그모이드

출력을 0과 1사이로 제한해줌

  • 수식

    h(x)=11+exp(x)h(x) = \frac{1}{1+exp(-x)}
  • 파이썬 코드

def sigmoid(x):
	return 1 / (1 + np.exp(-x))

ReLU

  • 수식

    h(x)={xif x>00if x0h(x) = \begin{cases} x & \text{if } x > 0 \\ 0 & \text{if } x \leq 0 \end{cases}
  • 파이썬 코드

def relu(x):
	return np.maximum(0, x)

신경망에는 행렬 곱이 많이 사용됨

X = np.array([1, 2])
W = np.array([[1, 3, 5], [2, 4, 6]])

np.dot(X, M)



출력층의 종류

뉴럿넷에게 답을 회신받는 3가지 방법

  • Value 그자체 : output을 그냥 받음
  • O/X : output에 sigmoid
  • Category : output에 softmax

Softmax

  • 수식

    yk=exp(ak)i=1nexp(ai)y_k = \frac{\exp(a_k)}{\sum_{i=1}^n \exp(a_i)}
  • 파이썬 코드

def softmax(a):
	return np.exp(a) / np.sum(np.exp(a))

-> 출력을 다 더하면 1

exp의 overflow 문제

-> 당연히 softmax도 에러가 남

극복하는 파이썬 코드

def softmax(a):
	c = np.max(a)
    exp_a = np.exp(a - c)
    return exp_a / np.sum(exp_a)

실습 코드




제로베이스 강의를 수강하며 작성한 글입니다.

0개의 댓글