- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Python
- tapply
- MVC
- SQL
- 오블완
- swiftUI
- 연산자
- Observable
- deeplearning
- Linux
- substr
- barplot
- SWIFT
- cocoapods
- r
- rxswift
- decode
- sigmoid
- ios
- 딥러닝
- struct
- Optional
- 티스토리챌린지
- rest api
- ReLU
- HTTP
- 시각화
- Request
- scheduledTimer
- 명령어
iOS 개발 기록 블로그
딥러닝 소프트맥스(softmax) 함수 공식 구현 과정 본문
소프트맥스(softmax) 함수
분류를 위한 출력층 함수로 0~1 사이의 숫자를 출력하는 함수입니다.
공식은 다음과 같습니다.
소프트맥스 함수는 지수 함수를 사용하는데 이 지수함수가 쉽게 아주 큰 값을 반환합니다.
e(스위스 수학자 오일러가 발견한 무리수)의 10승은 20,000이 넘고
e의 100승은 40개가 넘고 e의 1000승은 무한대를 뜻하는 inf가 출력되어 돌아오므로
컴퓨터로 계산을 할 수가 없습니다.
예)
로그함수는 수를 작게 만들고 지수함수는 수를 크게 만듭니다.
소프트맥스 함수 공식에서 상수 C를 분모, 분자에 곱해주었습니다.
임의의 array를 하나 만들고 자연상수의 제곱으로 계산한 값은 아래와 같습니다.
리스트에서 가장 큰 값을 뽑는 함수는 numpy 라이브러리의 max라는 함수가 있습니다.
리스트의 각 요소에서 가장 큰 값을 빼보면 아래와 같습니다.
위의 결과에서 자연상수 e의 제곱으로 출력된 결과는 아래와 같습니다.
위에서 softmax function을 생성하기 위한 분자식을 구현해봅시다.
분모까지 포함해서 완전히 완성해봅시다.
참고로 신경망에서 학습 시에는 소프트맥스 함수를 사용하지만
테스트 시에는 어차피 결과가 같기 때문에 지수 함수 계산에 드는
자원 비용 낭비를 줄이기 위해 소프트맥스 함수를 사용하지 않습니다.
지난 게시글 마지막에 만들었던 3층 신경망 전체 코드에서 소프트맥스 함수를 추가해봅시다.
딥러닝 신경망의 내적, 3층 신경망 전체 코드
신경망의 내적 위에 신경망에서 x1과 x2가 각각 1과 2이면 y1과 y2의 값은 무엇일까? x1*1 + x2*2 = y1 x1*3 + x2*4 = y2 x1*5 + x2*6 = y3 그러면 위 신경망에서 만들어진 가중의 총합인 y값을 시그모이드 함수..
crazydeer.tistory.com
'Deep Learning' 카테고리의 다른 글
딥러닝 MNIST 손글씨 필기체 데이터 다루기 1부 (0) | 2022.01.23 |
---|---|
딥러닝 신경망의 내적, 3층 신경망 전체 코드 (0) | 2021.12.23 |
딥러닝의 시그모이드(sigmoid), 렐루(Relu), 행렬의 내적 (0) | 2021.12.05 |
신경망 함수 종류와 시각화 (step func, sigmoid func) (0) | 2021.12.04 |
딥러닝 파이썬으로 퍼셉트론 AND, OR, NAND, XOR 게이트 구현하기 (0) | 2021.12.03 |