일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 활성화함수파이썬
- 신경망
- 8086CPU레지스터
- c언어
- BOF
- 딥러닝파이썬
- 백준
- C알고리즘
- 백준알고리즘
- 밑바닥부터시작하는딥러닝
- 보안
- 알고리즘
- BOJ
- C언어 알고리즘
- 정보보안
- 버퍼오버플로우
- 파이썬신경망
- 머신러닝
- 인공지능
- 달고나bof
- 신경망파이썬
- C언어알고리즘
- 딥러닝
- 소프트맥스함수
- 항등함수
- 신경망구현
- 스트림암호
- 파이썬
- FTZlevel10
- 신경망 학습
- Today
- Total
HeeJ's
[05] 항등 함수와 소프트맥스 함수 본문
머신러닝 문제는 분류와 회귀 두 가지로 나뉘는데,
일반적으로 분류에서는 소프트맥스 함수를, 회귀에는 항등 함수를 이용한다.
분류 ; 어느 클래스에 속하느냐 분류하는 문제
회귀 ; 입력 데이터에서 (연속적인) 수치를 예측하는 문제
항등 함수
identity function
입력과 출력이 항상 같다.
x = y
소프트맥스 함수
softmax function
exp(x)는 e^x를 뜻하는 지수 함수이다. (e는 자연 상수)
n은 출력층의 뉴런 수
y_k는 그 중 k번째 출력
위의 식에서 볼 수 있듯이, 소프틈낵스 함수의 분자는 입력 신호 a_k의 지수 함수, 분모는 모든 입력 신호의 지수 함수의 합으로 구성된다.
이 소프트맥스 함수를 파이썬으로 구현해보면
import numpy as np
def softmax(a):
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
이렇게 나타낼 수 있다.
하지만 위의 코드는 오버플로를 일으킬 수 있다는 문제를 갖고있다.
소프트맥스 함수는 지수 함수를 사용하는데, 지수 함수는 크게는 inf까지 출력하기 때문에,
무한한 데이터를 다룰 수 없는 컴퓨터에는 오버플로가 일어나게 된다.
그리고 이런 큰 값끼리 나눗셈을 하게 되면 결과의 수치가 불안정해진다.
위의 오버플로 문제점을 개선한 식이다.
위의 식이 뜻하는 것은 소프트맥스의 지수 함수를 계산할 때 어떤 정수를 더하거나 빼도 결과는 바뀌지 않는다는 것이다.
여기서 C에서 어느 값을 대입해도 상관이 없지만 오버플로를 막는 목적으로 주로 입력 신호 중 최댓값을 이용한다.
이를 바탕으로 소프트맥스 함수를 다시 구현하면 이렇게 나타낼 수 있다.
import numpy as np
def softmax(a):
c = np.max(a) #추가된 부분
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
이를 출력해보면 0과 1.0 사이의 실수들로 값이 나오는데,
이 출력 값의 총합은 1이다. (이는 소프트맥스 함수의 중요한 성질이다.)
출력 값의 총합이 1이라는 것은 이 출력 값을 '확률'로 해석할 수 있다는 것을 나타내게 된다.
주의할 점으로는 소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않는다.
지수 함수 y = exp(x)가 단조 증가 함수이기 때문이다.
신경망을 이용한 분류는 일반적으로 가장 큰 출력을 내는 뉴런에 해당하는 클래스로만 인식한다.
또, 소프트맥스 함수를 적용해도 출력이 가장 큰 뉴런의 위치는 달라지지 않는다.
결과적으로, 신경망으로 분류할 때는 출력층의 소프트맥스 함수를 생략해도 문제가 없다.
출처 - 밑바닥부터 시작하는 딥러닝
'<Machine Learning>' 카테고리의 다른 글
[07] 신경망 학습 (2) (0) | 2020.11.14 |
---|---|
[06] 신경망 학습 (1) (0) | 2020.11.04 |
[04] 신경망(2) (0) | 2020.10.07 |
[03] 신경망(1) (0) | 2020.09.30 |
[02] 퍼셉트론 (0) | 2020.09.25 |