softmax#
k๊ฐ์ ์ค์๋ก ์ด๋ฃจ์ด์ง ๋ฒกํฐ๋ฅผ k๊ฐ์ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ์ ๋ํ ํ๋ฅ ๋ถํฌ๋ก ๋ณํํ๋ ํจ์
๋ก์ง์คํฑ ํจ์(Logistic function)์ ๋ค์ฐจ์ ํ์ฅ์ด๋ฉฐ, ๋คํญ ๋ก์ง์คํฑ ํ๊ท๋ ์ธ๊ณต์ ๊ฒฝ๋ง์์ ์ฌ์ฉ๋๋ค.
์ํํธ๋งฅ์ค ํจ์๋ ์ฃผ๋ก ๋ค์ค ํด๋์ค ๋ถ๋ฅ ๋ฌธ์ ์ ์ฌ์ฉ๋๋ ํ์ฑํ ํจ์ ์ค ํ๋๋ค. ์ํํธ๋งฅ์ค๋ input์ ํ๋ฅ ๋ก ๋ณํํ๋ฉฐ, ๊ฐ ํด๋์ค์ ๋ํ ํ๋ฅ ๋ถํฌ๋ฅผ ์์ฑํ๋ค. ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ฌ์ฉ๋๋ค. ์ด์ง ๋ถ๋ฅ์ ๋น๊ตํด์ ์๊ฐํด๋ณด๋ฉด ์ข ๋ ์ฉ์ดํ๋ค. sigmoid๋ yes or no ๋ง์ ์ํด ์ฌ์ฉ๋์๋ค๋ฉด, ์ฌ๋ฌ ๋ฑ๊ธ์ด๋ ํด๋์ค๋ก ๋๋๋ ๊ฒฝ์ฐ์ softmax๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
๋ค์ค ํด๋์ค ๋ถ๋ฅ : ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ํด ์ฌ๋ฌ ํด๋์ค ์ค ํ๋๋ฅผ ์ ํํ๋ ๋ฌธ์ (์ด๋ฏธ์ง ๋ถ๋ฅ, ์์ฐ์ด ์ฒ๋ฆฌ ์ธ์ด ๋ชจ๋ธ)
ํ๋ฅ ๋ถํฌ ์์ฑ : ๊ฐ ํด๋์ค์ ์ํ ํ๋ฅ ์ ๊ณ์ฐํ๊ณ , ๊ฐ์ฅ ํ๋ฅ ์ด ๋์ ํด๋์ค๋ฅผ ์ ํํ๋๋ฐ ์ฌ์ฉ๋จ
softmax function์ ํต๊ณผํ ๋ชจ๋ output๊ฐ๋ค์ ํฉ์ 1์ด ๋๋ค. ์ด๋ฅผ ๋ค์ ๋งํ๋ฉด ํ๋ฅ (Probability)
๊ฐ ๋๋ ๊ฒ์ด๋ค. sigmoid๊ฐ output layer๊ฐ์ ๋ณด๊ณ threshold(๋ณดํต 0.5)๋ณด๋ค ํฌ๋ฉด 1, ์์ผ๋ฉด 0์ผ๋ก ์ด์ง๋ถ๋ฅ ๋ฐ์ ๋ชปํ๋๋ฐ, softmax output layer๋ ๋์ค๋ ๋ชจ๋ ๊ฐ๋ค์ normalizing ํด๋ฒ๋ฆฌ๊ณ , ๊ฐ๊ฐ์ ๋ํ ํ๋ฅ ์ ๊ตฌํด๋ธ๋ค.
input vector z์ ๋ํด์ output์ i๋ฒ์งธ ํด๋์ค์ ๋ํ ํ๋ฅ ์ ๋งํ๋ค. \(e^{z_i}\)๋ i๋ฒ์งธ ์ ๋ ฅ ์์์ ์ง์ ํจ์๋ฅผ ๋ํ๋ธ๋ค.
softmax ๊ตฌํ#
import numpy as np
def softmax(x):
e_x = np.exp(x-np.max(x)) #์ค๋ฒํ๋ฌ์ฐ ๋ฐฉ์ง๋ฅผ ์ํด ์
๋ ฅ๊ฐ ์ค ์ต๋๊ฐ์ ๋นผ์ค
return e_x / e_x.sum()
x = np.array([1,1,2])
y = softmax(x)
print(y) # [0.2,0.2,0.6]