본문 바로가기
딥러닝관련/기초 이론

신경망 정리 1 (퍼셉트론, 활성화 함수, 시그모이드, 계단함수...)

by 머리올리자 2021. 5. 1.

better-tomorrow.tistory.com/entry/Perceptron-%ED%8D%BC%EC%85%89%ED%8A%B8%EB%A1%A0

 

Perceptron (퍼셉트론)

퍼셉트론 정의 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력 퍼셉트론의 신호는 흐른다/안 흐른다 (1이나 0)의 두 가지 값만 가질 수 있다. 위 이미지를 보면 입력으로 2개의 신호

better-tomorrow.tistory.com

위 내용을 통해 알 수 있는 점은 퍼셉트론으로 복잡한 함수를 표현할 있다는 점

 

다만 가중치를 설정하는 작업은 여전히 사람이 수동으로 한다는 것

 

신경망은 위 가중치 설정을 수동으로 하는 것이 아닌 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습한다.

 

신경망의 예시

 

은닉층은 사람 눈이 보이지 않기 때문에 은닉층

 

2층짜리 신경망으로 볼 수 있다. (입력층은 제외)

 

 

퍼셉트론

원래의 퍼셉트론 식을 변형해보자

 

조건 분기의 동작(0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력)을 하나의 함수로 표현

 

이를 h(x)로 표현

 

그러면 아래와 같이 표현 가능

 

입력 신호의 총합이 h(x)라는 함수를 거쳐 변환되어, 그 값이 y의 출력이 됨

 

h(x) 함수는 입력이 0을 넘으면 1을 돌려주고 그렇지 않으면 0을 돌려준다.

 

활성화 함수의 등장

 

이처럼 입력 신호의 총합을 출력 신호로 변화하는 함수를 일반적으로 활성화 함수(activation function) 라 한다.

 

활성화는 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할

 

활성화 함수의 처리 과정

 

활성화 함수

활성화 함수는 임계값을 경계로 출력이 바뀐다.

 

이런 함수를 계단 함수(step function)이라고 한다.

 

그렇다면 계단 함수 이외의 함수를 사용하면?

 

시그모이드 함수

 

신경망에서 자주 이용하는 활성화 함수인 시그모이드(sigmoid)함수

 

출처 : https://ko.wikipedia.org/wiki/%EC%8B%9C%EA%B7%B8%EB%AA%A8%EC%9D%B4%EB%93%9C_%ED%95%A8%EC%88%98

e는 자연상수로 2.7182...의 값을 가지는 실수

 

시그모이드 함수도 단순한 '함수' -> 입력을 주면 출력을 한다.

 

신경망에서는 활성화 함수로 시그모이드 함수를 이용하여 신호를 변환하고, 그 변환된 신호를 다음 뉴런에 전달.

 

퍼셉트론과 신경망의 주된 차이는 이 활성화 함수를 적용한 것

 

여러 층으로 이어지는 구조 및 신호 전달하는 방법은 기존 퍼셉트론과 동일

 

계단 함수 구현

 

import numpy as np

def step_function(x):
    y =  x > 0
    return y.astype(np.int32)

print(step_function(np.array([1.0 , 2.0])))
출력

[1 1]

 

그래프로 출력

import numpy as np
import matplotlib.pylab as plt

def step_function(x):
    return np.array(x > 0, dtype=np.int32)

x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x,y)
plt.ylim(-0.1, 1.1)
plt.show()

0을 경계로 출력이 0과 1로 바뀐다.

 

모양의 변화가 계단과 유사하여 step function

 

시그모이드 함수 구현

 

파이썬 구현

import numpy as np

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

x = np.array([-3.0, -2.0, 2.0, 3.0])
print(sigmoid(x))
결과

[0.04742587 0.11920292 0.88079708 0.95257413]

 

시그모이드 함수를 그래프로

import numpy as np
import matplotlib.pylab as plt

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

x = np.arange(-5.0 , 5.0 , 0.1)
y = sigmoid(x)

plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

 

시그모이드 함수와 계단 함수 비교

 

 

차이점

 

- '매끄러움'의 차이가 있음

   시그모이드 함수는 부드러운 곡선, 입력에 따라 출력이 연속적으로 변화

   계단 함수는 0을 경계로 출력이 갑자기 바뀐다.

 

- 시그모이드 함수의 매끈함이 신경망 학습에서 아주 중요한 역할을 하게 된다.

 

- 계단 함수는 0과 1 중 하나의 값만 돌려주는 반면, 시그모이드 함수는 실수를 돌려준다.

- [퍼셉트론의 output] : 0과 1, [신경망의 output] : 연속적인 실수

 

공통점

 

 - 매끄러움이라는 점에서 다르지만 큰 관점에서 본다면 둘은 같은 모양을 하고 있다.

 - 둘 다 입력이 작을 때의 출력은 0에 가깝거나 0이고, 입력이 커지면 1에 가까워지거나 1이되는 고주

 - 입력이 중요하면 큰 값을 출력하고 입력이 중요하지 않으면 작은 값을 출력

 

내용 참고

book.naver.com/bookdb/book_detail.nhn?bid=11492334

 

밑바닥부터 시작하는 딥러닝

직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서!『밑바닥부터 시작하는 딥러닝』은 라이브러리나 프레임워크에 의존하지 않고, 딥러닝의 핵심을 ‘밑바닥부터’ 직접 만들어보며

book.naver.com