5. 신경망의 활성함수
페이지 정보
작성자 관리자 댓글 0건 조회 2,383회 작성일 20-02-23 13:25본문
5. 신경망의 활성함수
기계 학습의 문제 :
- 분류(classfication)
- 회귀(regression)
신경망에서는 회귀에 사용하는 활성함수로 항등함수를 사용하며,
다중 분류에 사용하는 활성함수로 소프트맥스 함수를 사용한다.
2가지를 분류할 때는 시그모이드 함수를 사용한다.
항등함수는 입력과 출력이 같다.
[ 소프트맥스 함수 정의 ]
n은 뉴런(노드)의 수
K번째 출력을 의미한다.
1부터 n번까지 의 합계를 나타낸다.
실습.
# -*- coding: utf-8 -*-
import numpy as np
a = np.array([0.2, 2.9, 4.0])
print(a)
print("---------------------")
exp_a = np.exp(a) # 지수함수
print(exp_a)
print("---------------------")
sum_exp_a = np.sum(exp_a)
print(sum_exp_a)
print("---------------------")
y = exp_a / sum_exp_a
print(y)
print("---------------------")
결과.
파이썬으로 구현하면 다음과 같다.
def softmax(a):
exp_a = np.exp(a) # 지수함수
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
지수함수는 결과가 커지기 때문에 컴퓨터로 저장시 오버플로우가 나와 오류가 나올 수 있다.
[ 개선된 소프트맥스 함수의 정의 ]
는 log C를 나타낸다.
파이썬 함수로 구현하면 다음과 같다.
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
실습.
# -*- coding: utf-8 -*-
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([3.4, 4.0, 2.1, 5.3, 6.3])
print(a)
print("---------------------")
y = softmax(a)
print(y)
print("---------------------")
결과.
[ 소프트맥스 함수의 특징]
소프트맥스 함수에 의한 출력은 0에서 1.0사이의 실수 값이 출력된다.
이때의 출력값의 총 합은 항상 1이 된다는 점이 소프트맥스 함수의 특징이다.
이 특징은 이함수의 중요한 특성이다.
즉, 이출력값은 확률로 해석할 수 있다. 문제를 통계적으로 대응할 수 있다
각 원소의 대소 관계는 소프트맥스 함수의 출력값의 대소관계와 동일하다.
신경망을 이용한 분류에서는 출력층의 소프트맥스 함수를 생략해도 무방하다.
소프트 맥스 함수를 적용하지 않더라도 결과는 동일 하기 때문이다.
현업에서는 실질적으로 지수 함수 계산에 드는 자원 낭비를 줄일 수 있기 때문에
일반적으로 출력층에서 소프트 맥스 함수를 생략하여 사용한다.
댓글목록
등록된 댓글이 없습니다.