728x90
반응형
항등 함수
- 일반적으로 회귀에 사용
- 입력을 그대로 출력한다. - 입력과 출력이 항상 같다는 뜻
** 신경망은 분류와 회귀 모두에 이용할 수 있다.
소프트맥스 함수
- 일반적으로 분류에 사용
- 소프트맥스의 출력은 모든 입력 신호로부터 화살표를 받는다.
- 출력층의 각 뉴런이 모든 입력 신호에서 영향을 받기 때문이다.
exp(x)는 e^x를 뜻하는 지수 함수다. (e는 자연함수) n은 출력층의 뉴런 수, yk는 그 중 k번째 출력임을 뜻한다.
소프트맥스 함수의 분자는 입력 신호 ak의 지수 함수, 분모는 모든 입력 신호의 지수 함수의 합으로 구성된다.
* 지수함수
- 지수 함수란 거듭제곱의 지수를 변수로 하고, 정의역을 실수 전체로 정의하는 초월함수이다. 로그 함수의 역함수이다.
소프트맥스 결과 출력해보기
# 소프트맥스 함수 구현
import numpy as np
a = np.array([0.3, 2.9, 4.0])
exp_a = np.exp(a) # 지수 함수
print("지수 함수 : " , exp_a)
sum_exp_a = np.sum(exp_a) # 지수 함수의 합
print("지수 함수의 합 : ",sum_exp_a)
y = exp_a /sum_exp_a
print("결과 : ", y)
함수
# 소프트맥스 함수
def softmax(a):
exp_a = np_exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
주의 *
컴퓨터로 계산할 때는 오버플로 문제 때문에 결함이 있다.
지수 함수는 쉽게 아주 큰 값을 내뱉기 때문이다.
e^10은 20,000이 넘고 e^100은 0이 40개가 넘고 e^1000은 무한대를 뜻하는 inf가 돌아온다.
이렇게 큰 값끼리 나눗셈을 하면 결과 수치가 '불안정' 해진다.
오버플로 대책 구현 코드
import numpy as np
def softmax(a):
c = np.max(a)
exp_a = np.exp(a - c) # 오버플로 대책
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
a = np.array([1100,990, 970])
y = softmax(a)
print(y)
print(np.sum(y))
소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않는다.
지수 함수 = exp(x)가 단조 증가 함수이기 때문이다.
출처 : 밑바닥부터 시작하는 딥러닝
https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198
728x90
반응형
최근댓글