인공신경망의 목표는 데이터에서 발견할 수 있는 복잡한 관계를 학습할 수 있는 강력한 알고리즘과 데이터 구조를 만드는 것 !!
x1과 x2라는 두 신호를 입력받아 y를 출력하는 퍼셉트론이다.
#퍼셉트론 수식
y = 0 (b + w1x1 + w2x2 <= 0)
or
y = 1 (b + w1x1 + w2x2 > 0)
여기서 b는 편향을 나타내는 매개변수로, 뉴런이 얼마나 쉽게 활성화되느냐를 제어한다.
w1과 w2는 각 신호의 가중치를 나타내는 매개변수로, 각 신호의 영향력을 제어한다.
아래 그림은 편향을 명시한 퍼셉트론이다.
이 퍼셉트론의 동작은 x1, x2, 1이라는 3개의 신호가 뉴런에 입력되어 각 신호에 가중치를 곱한 후, 다음 뉴런에 전달된다. 다음 뉴런에서는 이 신호들의 값을 더하여 그 합이 0을 넘으면 1을 출력, 그렇지 않으면 0을 출력한다.
위의 식을 더 간결히 표현하기 위해 0을 넘으면 1을 출력, 그렇지 않으면 0을 출력하는 동작을 하나의 함수로 나타낸다. 이를 h(x)
로 표현한다.
y = h(b + w1x1 + w2x2)
h(x) = 0 (x <= 0)
or
h(x) = 1 (x > 1)
입력 신호의 총합이 h(x)
라는 함수를 거쳐 변환되어, 그 변환된 값이 y의 출력이 된다. 결과적으로 두 식이 하는 역할은 같다.
위의 h(x)
처럼 입력 신호의 총합을 출력 신호로 변환하는 함수를 활성화 함수라고 부른다.
입력 신호의 총합을 출력 신호로 변환하는 함수.
즉, 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 한다.
#위의 식을 변형하여 활성화 함수 식 작성
a = b + w1x1 + w2x2
y = h(a)
신경망에서 각 노드는 활성화 함수를 가지고 있는데, 일반적으로 각 층에는 같은 종류의 활성화 함수를 가지고 있다.
실제 뉴런세포에서 신호를 전달(activate or fire)할지 안 할지를 결정하는 기능을 말하는데, 인공신경망에서 활성화 함수는 다음 층으로 신호를 얼마만큼 전달할지를 결정한다.
그래서 때때로 전달함수(transfer function)이라고 부르기도 한다.
입력이 0을 넘으면 1을 출력, 그 외에는 0을 출력하는 함수
# 함수 정의
def step_function(x):
return np.array(x>0, dtype=np.int)
계단 함수 구현 예시
# 샘플 데이터를 확인합니다.
x = np.array([-1, 1, 2])
print(x)
# 0보다 큰가?
y = x>0
print(y)
# 논리형태를 0과 1로 표현해보기
y = y.astype(np.int)
print(y)
#결과
[-1 1 2]
[False True True]
[0 1 1]
계단 함수 그래프 구현
# 그래프 그리기
x = np.linspace(-1, 1, 100)
plt.step(x, step_function(x))
plt.show()
def sigmoid(x):
return 1/ (1+np.exp(-x))
시그모이드 함수 그래프 구현
x = np.linspace(-10, 10, 100)
plt.plot(x, sigmoid(x))
plt.xlabel("x")
plt.ylabel("Sigmoid(X)")
plt.show()
Rectified Linear Unit의 줄임말
실제로 가장 많이 사용하는 활성 함수이다.
입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하이면 0을 출력하는 함수
def relu(x):
return np.maximun(0,x)
안녕하세요! 도움이 많이 되었어요 ㅎㅎ 별건 아니지만 h(x) 표현식에서 x 범위에 오타가 있어서 댓글 달아요! h(x) = 1 (x > 1) 라고 되어있는데 (x > 0)이 되어야 할 것 같아요!