๋จธ์ ๋ฌ๋์ ๋ํ ์ฑ ์ 5๊ถ์์ 6๊ถ์ ๋ ์ฝ๊ณ ์๋๋ฐ ์ ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ์ด ์ฐธ ๋ง์ต๋๋ค. ๊ทธ๋์ ๋ด์ฉ์ ํ์ฌํ๋ฉด์ ์ง์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด์ ๋ฐ๋ณตํด์ ๋ณด๊ณ ์์ต๋๋ค. ์๋ ์ ๋ณด์๋ ๋ด์ฉ๋ค๋ณด๋ค ๋ ๋ง์ด ์ดํด๊ฐ ๋๊ณ ์ ์ ์ฝ๊ฒ ๋๊ปด์ง๋ ๋ถ๋ถ๋ ์๊ธฐ๋ค์. ^^ ๋๋ผ์ด ๋ณํ ์ ๋๋ค.
์๋์ ๊ฐ์ ์์๋ก ์ฑ ์ ๋ณด์๋ฉด๋ฉ๋๋ค. ํ์ด์ฌ ์ธ์ด๋ฅผ ๊ณต๋ถํด์ผ ํฉ๋๋ค. => ํ๋ค์ค๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. => ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋์ ๊ณต๋ถํ ์ ์์ต๋๋ค. ์ ๊ฐ ์ ๋ฆฌํ ๊ธ์ ์์ต๋๋ค. ์ด๋ฐ ์์๋ก ๊ณต๋ถํ๊ณ ์ ํ๋์๋ ๋ฏธ๋ถ์ ๋ํ ๋ด์ฉ์ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ํ์ฑ ์ผ๋ก ๋ฐ๋ก ์ ๋ฆฌํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ข์ ๊ณผ ํฌ์ด์ ๋ฐ๋ณตํ๋ฉด์ ๋ณด๊ณ ์๋๋ฐ ์ ์ ์ข์ ๋ณด๋ค๋ ํฌ๋ง์ ๋ณด๊ณ ์์ต๋๋ค. ๊ธฐ๊ณํ์ต๊ณผ ๊ฐํ ํ์ต์ ๊ณต๋ถํ์๋ ๋ชจ๋ ๋ถ๋ค ํ์ดํ ์ ๋๋ค. ~~~~
https://steemit.com/kr/@papasmf1/73cj22
ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ ์ฑ ์ ์์ค๋ ์๋์ ๊นํ๋ธ์ ์์ต๋๋ค. ์ฐธ๊ณ ํ์ค ์ ์์ต๋๋ค.
https://github.com/rickiepark/handson-ml
์ ๊ฐ ํ ์คํธํ๊ณ ์ค์ตํ๋ ํ๊ฒฝ์ ๋งฅ์ ์๋์ฝ๋ค ์ต๊ทผ ํจํค์ง๋ฅผ ์ค์นํด์ ์ฃผํผํฐ๋ฉ์ผ๋ก ์คํํ๊ณ ์์ต๋๋ค. ์๋์ฝ๋ค ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ํ ์ํ๋ก๋ ์ฝ๊ฒ ์ค์นํ ์ ์์ต๋๋ค. ^^
10์ฅ ์ธ๊ณต์ ๊ฒฝ๋ง ์๊ฐ๋ฅผ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค. ^^
์ง๋ฅ์ ์ธ ๊ธฐ๊ณ์ ๋ํ ์๊ฐ์ ์ป๊ธฐ ์ํด์๋ ๋์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์
๋๋ค. ์ด๊ฒ์ด ์ธ๊ณต ์ ๊ฒฝ๋ง artificial neural networks(ANN)์ ๋ง๋ค์ด๋ธ ํต์ฌ ์์ด๋์ด ์
๋๋ค.
์ธ๊ณต ์ ๊ฒฝ๋ง์ ๋ฅ๋ฌ๋์ ํต์ฌ์
๋๋ค ์ธ๊ณต ์ ๊ฒฝ๋ง์ ๋ค์ฌ๋ค๋ฅํ๊ณ ๊ฐ๋ ฅํ๊ณ ํ์ฅ์ฑ์ด ์ขใท์์ ์๋ฐฑ๋ง ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฅํ๊ฑฐ๋ ์์ฑ ์ธ์ ์๋น์ค์ ์ฑ๋ฅ์ ๋์ด๊ฑฐ๋ ๋งค์ธ ์์ต ๋ช
์ ์ฌ์ฉ์์๊ฒ ๊ฐ์ฅ ์ข์ ๋น๋์ค๋ฅผ ์ถ์ฒํด์ฃผ๊ฑฐ๋, ์ธ๊ณ ๋ฐ๋
์ฐธํผ์ธ์ ์ด๊ธฐ๊ธฐ ์ํด ์๋ฐฑ๋ง ๊ฐ์ ๊ธฐ๋ณด๋ฅผ ์ตํ๊ณ ์๊ธฐ ์์ ๊ณผ ๊ฒ์ํ๋ฉด์ ํ์ตํ๋(๋ฅ๋ง์ธ๋์ ์ํ๊ณ ) ๊ฒฝ์ฐ ๋ฑ ์์ฃผ ๋ณต์กํ ๋๊ท๋ชจ ๋จธ์ ๋ฌ๋ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ ํฉํฉ๋๋ค.
10.1 ์๋ฌผํ์ ๋ด๋ฐ์์ ์ธ๊ณต ๋ด๋ฐ๊น์ง
1943๋
์ ๊ฒฝ์๋ฆฌํ์ ์๋ฐ ๋งฅ์ปฌ๋ก๊ณผ ์ํ์ ์ํฐ ํผ์ธ ๊ฐ ์ด๋ฅผ ์ฒ์ ์๊ฐํ์ต๋๋ค.
1960๋
๋๊น์ง ์ธ๊ณต ์ ๊ฒฝ๋ง์ ์ด๊ธฐ ์ฑ๊ณต์ ๊ณง ์ง๋ฅ์ ๊ฐ์ง ๊ธฐ๊ณ์ ๋ํ๋ฅผ ๋๋ ์ ์์ ๊ฒ์ด๋ ๋ฏฟ์์ ๋๋ฆฌ ํผ๋จ๋ ธ์ต๋๋ค. ์ด ์ญ์์ด ์ง์ผ์ง ์ ์๋ค๋ ๊ฒ์ด ๋ช
๋ฐฑํด์ง๋ฉด์ ๋ค๋ฅธ ๋ถ์ผ๋ก ํฌ์๊ฐ ์ฎ๊ฒจ๊ฐ๊ณ ์ธ๊ณต ์ ๊ฒฝ๋ง์ ๊ธด ์นจ์ฒด๊ธฐ์ ๋ค์ด์๊ฒ ๋ฉ๋๋ค.
1990๋
๋๊น์ง๋ ๋๋ถ๋ถ์ ์ฐ๊ตฌ์๊ฐ ์ํฌํธ ๋ฒกํฐ ๋จธ์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ๋ ฅํ ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฒ์ ์ ํธํ์ต๋๋ค
10.1.1 ์๋ฌผํ์ ๋ด๋ฐ
์๋ฌผํ์ ๋ด๋ฐ์ ๊ฐ๋จํ ์ดํด๋ณด๋๋ก ํฉ๋๋ค. ์ด ์ด์ํ๊ฒ ์๊ธด ์ธํฌ๋ ๋๋ถ๋ถ ๋๋ฌผ์ ๋๋ ํผ์ง์์ ๋ฐ๊ฒฌ๋๋ฉฐ ํต์ ํฌํจํ ์ธํฌ์ฒด cell body์ ์ธํฌ์ ๋ณต์กํ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์๋๊ธฐ dendrite๋ผ๋ ๋๋ญ๊ฐ์ง ๋ชจ์์ ๋๊ธฐ์ ์ถ์ญ๋๊ธฐ axon๋ผ๋ ์์ฃผ ๊ธด ๋๊ธฐ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ถ์ด๋๊ธฐ์ ๊ธธ์ด๋ ์ธํฌ์ฒด์ ๋ช ๋ฐฐ ์ ๋์์ 4๋ง ๋ฐฐ๊น์ง ๋๊ธฐ๋ ํฉ๋๋ค. ์ถ์ด๋๊ธฐ์ ๋์ ์ถ์ญ๋๊ฐ์ง telodendria๋ผ ๋ถ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ง๋ก ๋๋๊ณ , ์ด ๊ฐ์ง์ ๋์ ์๋
์ค ๋ง๋จ synaptic terminals(๋๋ ๊ฐ๋จํ ์๋
์ค synapse)๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ฏธ์ธํ ๊ตฌ์กฐ์ด๊ณ ๋ค๋ฅธ ๋ด๋ฐ์ ์์๋๊ธฐ์ (๋๋ ์ธํฌ์ฒด์ ์ง์ ) ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์๋ฌผํ์ ๋ด๋ฐ์ ์ด๋ฐ ์๋
์ค๋ฅผ ํตํด ๋ค๋ฅธ ๋ด๋ฐ์ผ๋ก๋ถํฐ ์งง์ ์ ๊ธฐ ์๊ทน ์ ํธ signal์ ๋ฐ์ต๋๋ค.
10.1.2 ๋ด๋ฐ์ ์ฌ์ฉํ ๋
ผ๋ฆฌ ์ฐ์ฐ
์๋ฐ ๋งฅ์ปฌ๋ก๊ณผ ์ํฐ ํผ์ธ ๋ ๋งค์ฐ ๋จ์ํ ์๋ฌผํ์ ๋ด๋ฐ ๋ชจ๋ธ์ ์ ์ํ๋๋ฐ ๋์ค์ ์ด๊ฒ์ด ์ธ๊ณต๋ด๋ฐ์ด ๋์์ต๋๋ค. ์ด ๋ชจ๋ธ์ ํ๋ ์ด์์ ์ด์ง ์
๋ ฅ๊ณผ ํ๋์ ์ด์ง ์ถ๋ ฅ์ ๊ฐ์ง๋๋ค. ์ธ๊ณต ๋ด๋ฐ์ ๋จ์ํ ์ผ์ ๊ฐ์์ ์
๋ ฅ์ด ํ์ฑํ๋์์ ๋ ์ถ๋ ฅ์ ๋ด๋ณด๋
๋๋ค.
10.1.3 ํผ์
ํธ๋ก
ํผ์
ํธ๋ก Perceptron์ ๊ฐ์ฅ ๊ฐ๋จํ ์ธ๊ณต ์ ๊ฒฝ๋ง ๊ตฌ์กฐ ์ค ํ๋๋ก 1957๋
์ ํ๋ํฌ ๋ก์ ๋ธ๋ผํธ๊ฐ ์ ์ํ์ต๋๋ค. ํผ์
ํธ๋ก ์ TLU threshold logic unit๋ผ๋ ์กฐ๊ธ ๋ค๋ฅธ ํํ์ ์ธ๊ณต ๋ด๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
ํผ์
ํธ๋ก ์ ์ธต์ด ํ๋๋ฟ์ธ TLU๋ก ๊ตฌ์ฑ๋๋๋ค. ๊ฐ ๋ด๋ฐ์ ๋ชจ๋ ์
๋ ฅ์ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์ด ๋ด๋ฐ์ ๋ฌด์์ด ์ฃผ์
๋๋ ์
๋ ฅ์ ๊ทธ๋ฅ ์ถ๋ ฅ์ผ๋ก ํต๊ณผ์ํต๋๋ค. ๋ณดํต ๊ฑฐ๊ธฐ์ ํธํฅ ํน์ฑ์ด ๋ํด์ง๋๋ค. ์ ํ์ ์ผ๋ก ์ด ํธํฅ ํน์ฑ์ ํญ์ 1์ ์ถ๋ ฅํ๋ ํน๋ณํ ์ข
๋ฅ์ ๋ด๋ฐ์ธ ํธํฅ ๋ด๋ฐ bias neuron์ผ๋ก ํํ๋ฉ๋๋ค.
1969๋
ํผ์
ํธ๋ก ์ด๋ ์ ๋ชฉ์ ๋
ผ๋ฌธ์์ ๋ง๋น ๋ฏผ์คํค์ ์๋ชจ์ด ํํผํธ๋ ํผ์
ํธ๋ก ์ ์ฌ๋ฌ ๊ฐ์ง ์ฌ๊ฐํ ์ฝ์ ์ ์ธ๊ธํ์ต๋๋ค. ํนํ ์ค์ ๋ก ์ผ๋ถ ๊ฐ๋จํ ๋ฌธ์ ๋ฅผ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฐ๊ตฌ์๋ค์ ํผ์
ํธ๋ก ์์ ๋ ๋ง์ ๊ฒ์ ๊ธฐ๋ํ๊ธฐ ๋๋ฌธ์ ์ค๋ง์ด ์ปธ์ต๋๋ค. ๊ฒฐ๊ตญ ๋ง์ ์ฐ๊ตฌ์๊ฐ ๋
ผ๋ฆฌํ, ๋ฌธ์ ํด๊ฒฐ, ๊ฒ์ ๊ฐ์ ๊ณ ์์ค์ ๋ฌธ์ ๋ฅผ ์ฐ๊ตฌํ๊ธฐ ์ํด ์ด ๋ถ์ผ(์ฆ ์ ๊ฒฝ๋ง ์ฐ๊ตฌ)๋ฅผ ๋ ๋ฌ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๋ฌ ํผ์
ํธ๋ก ์ ์์์ฌ๋ ค ์ผ๋ถ ์ ์ฝ์ ์ค์ผ ์ ์๋ค๋ ์ฌ์ค์ด ๋ฐํ์ก์ต๋๋ค. ์ด๋ฐ ์ธ๊ณต ์ ๊ฒฝ๋ง์ ๋ค์ธต ํผ์
ํธ๋ก Multi-Layer Perceptron(MLP)๋ผ๊ณ ํฉ๋๋ค. ๋ค์ธต ํผ์
ํธ๋ก ์ XOR๋ฌธ์ ๋ฅผ ํ ์ ์์ต๋๋ค.
10.1.4 ๋ค์ธต ํผ์
ํธ๋ก ๊ณผ ์ญ์ ํ
๋ค์ธต ํผ์
ํธ๋ก ์ (ํต๊ณผ) ์
๋ ฅ์ธต ํ๋์ ์๋์ธต hidden layer๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋ ์ด์์ TLU ์ธต๊ณผ ๋ง์ง๋ง ์ธต์ธ ์ถ๋ ฅ์ธต output layer์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ถ๋ ฅ์ธต์ ์ ์ธํ๊ณ ๋ชจ๋ ์ธต์ ํธํฅ ๋ด๋ฐ์ ํฌํจํ๋ฉฐ ๋ค์ ์ธต๊ณผ ์์ ํ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์ธ๊ณต ์ ๊ฒฝ๋ง์ ์๋์ธต์ด 2๊ฐ ์ด์์ผ ๋ ์ด๋ฅผ ์ฌ์ธต ์ ๊ฒฝ๋ง deep neural network(DNN)์ด๋ผ๊ณ ํฉ๋๋ค.
1986๋
์ญ์ ํ backpropagation ํ๋ จ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํ๋ ํ๊ธฐ์ ์ธ ๋
ผ๋ฌธ์ด ๊ณต๊ฐ๋์์ต๋๋ค. ์์ฆ์๋ ์ด๋ฅผ ํ์ง ๋ชจ๋ ์๋ ๋ฏธ๋ถ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ผ๋ก ๊ธฐ์ ํฉ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ ํ๋ จ ์ํ์ ๋คํธ์ํฌ์ ์ฃผ์
ํ๊ณ ์ฐ์๋๋ ๊ฐ ์ธต์ ๋ด๋ฐ๋ง๋ค ์ถ๋ ฅ์ ๊ณ์ฐํฉ๋๋ค. ์ด๋ ์์ธก์ ๋ง๋ค ๋์ ๊ฐ์ ์ ๋ฐฉํฅ ๊ณ์ฐ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋คํธ์ํฌ์ ์ถ๋ ฅ ์ค์ฐจ(๊ธฐ๋๊ฐ๊ณผ ๋คํธ์ํฌ ์ค์ ์ถ๋ ฅ๊ณผ์ ์ฐจ์ด)๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ถ๋ ฅ ๋ด๋ฐ์ ์ค์ฐจ์ ๋ง์ง๋ง ์๋์ธต์ ๋ด๋ฐ์ด ์ผ๋ง๋ ๊ธฐ์ฌํ๋์ง ์ธก์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด์ ์๋์ธต์ ๋ด๋ฐ์ด ์ฌ๊ธฐ์ ๋ ์ผ๋ง๋ ๊ธฐ์ฌํ๋์ง ์ธก์ ํฉ๋๋ค. ์ด๋ฐ ์์ผ๋ก ์
๋ ฅ์ธต์ ๋๋ฌํ ๋๊น์ง ๊ณ์ ์ธก์ ํฉ๋๋ค. ์ด ์ญ๋ฐฉํฅ ๊ณผ์ ์ ์ค์ฐจ ๊ทธ๋๋์ธํธ๋ฅผ ํ๋ฐฉ์ผ๋ก ์ ํํจ์ผ๋ก์จ ๋คํธ์ํฌ์ ๋ชจ๋ ์ฐ๊ฒฐ ๊ฐ์ค์น์ ๋ํ ์ค์ฐจ ๊ทธ๋๋์ธํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ณ์ฐํฉ๋๋ค. ๊ทธ๋์ ์ด๋ฆ์ด ์ญ์ ํ์
๋๋ค.
๋ ๊ฐ๋จํ ๋งํ๋ฉด ๊ฐ ํ๋ จ ์ํ์ ๋ํด ์ญ์ ํ ์๊ณ ๋ฆฌ์ฆ์ด ๋จผ์ ์์ธก์ ๋ง๋ค๊ณ (์ ๋ฐฉํฅ ๊ณ์ฐ), ์ค์ฐจ๋ฅผ ์ธก์ ํ๊ณ , ๊ทธ๋ฐ ๋ค์ ์ญ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ธต์ ๊ฑฐ์น๋ฉด์ ๊ฐ ์ฐ๊ฒฐ์ด ์ค์ฐจ์ ๊ธฐ์ฌํ ์ ๋๋ฅผ ์ธก์ ํฉ๋๋ค(์ญ๋ฐฉํฅ ๊ณ์ฐ). ๋ง์ง๋ง์ผ๋ก ์ด ์ค์ฐจ๊ฐ ๊ฐ์ํ๋๋ก ๊ฐ์ค์น๋ฅผ ์กฐ๊ธ์ฉ ์กฐ์ ํฉ๋๋ค(๊ฒฝ์ฌ ํ๊ฐ๋ฒ ์คํ
).
๋๋ฆฌ ์ฐ์ด๋ ํ์ฑํ ํจ์๋ 2๊ฐ
ํ์ดํผ๋ณผ๋ฆญ ํ์ ํธ ํจ์(์๊ณก ํ์ ํธ ํจ์)
ReLU ํจ์
์ ํธ๊ฐ (์ ๋ ฅ์์ ์ถ๋ ฅ์ผ๋ก) ํ ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ํผ๋ ํฌ์๋ ์ ๊ฒฝ๋ง feed forward neural networkI(FNN)์ด๋ผ๊ณ ํฉ๋๋ค.
10.2 ํ
์ํ๋ก์ ๊ณ ์์ค API๋ก ๋ค์ธต ํผ์
ํธ๋ก ํ๋ จํ๊ธฐ
ํ
์ํ๋ก๋ก ๋ค์ธต ํผ์
ํธ๋ก (MLP)๋ฅผ ํ๋ จ์ํค๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ฌ์ดํท๋ฐ๊ณผ ํธํ๋๋ ๊ณ ์์ค API์ธ TF.Learn์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. DNNClassifierํ์ด์ฌ ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ์ ์๋์ธต๊ณผ ํด๋์ค์ ํ๋ฅ ์ถ์ ์ ์ํ ์ํํธ๋งฅ์ค ์ถ๋ ฅ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ฌ์ธต ์ ๊ฒฝ๋ง์ ๋งค์ฐ ์ฝ๊ฒ ํ๋ จ์์ผ์ค๋๋ค.
import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron
iris = load_iris()
X = iris.data[:, (2, 3)] # ๊ฝ์ ๊ธธ์ด, ๊ฝ์ ๋๋น
y = (iris.target == 0).astype(np.int)
per_clf = Perceptron(max_iter=100, random_state=42)
per_clf.fit(X, y)
y_pred = per_clf.predict([[2, 0.5]])
y_pred
array([1])
a = -per_clf.coef_[0][0] / per_clf.coef_[0][1]
b = -per_clf.intercept_ / per_clf.coef_[0][1]
axes = [0, 5, 0, 2]
x0, x1 = np.meshgrid(
np.linspace(axes[0], axes[1], 500).reshape(-1, 1),
np.linspace(axes[2], axes[3], 200).reshape(-1, 1),
)
X_new = np.c_[x0.ravel(), x1.ravel()]
y_predict = per_clf.predict(X_new)
zz = y_predict.reshape(x0.shape)
plt.figure(figsize=(10, 4))
plt.plot(X[y0, 0], X[y0, 1], "bs", label="Iris-Setosa ์๋")
plt.plot(X[y1, 0], X[y1, 1], "yo", label="Iris-Setosa")
plt.plot([axes[0], axes[1]], [a * axes[0] + b, a * axes[1] + b], "k-", linewidth=3)
from matplotlib.colors import ListedColormap
custom_cmap = ListedColormap(['#9898ff', '#fafab0'])
plt.contourf(x0, x1, zz, cmap=custom_cmap)
plt.xlabel("๊ฝ์ ๊ธธ์ด", fontsize=14)
plt.ylabel("๊ฝ์ ๋๋น", fontsize=14)
plt.legend(loc="lower right", fontsize=14)
plt.axis(axes)
save_fig("perceptron_iris_plot")
plt.show()
#ํ์ฑํ ํจ์
def logit(z):
return 1 / (1 + np.exp(-z))
def relu(z):
return np.maximum(0, z)
def derivative(f, z, eps=0.000001):
return (f(z + eps) - f(z - eps))/(2 * eps)
z = np.linspace(-5, 5, 200)
plt.figure(figsize=(11,4))
plt.subplot(121)
plt.plot(z, np.sign(z), "r-", linewidth=2, label="์คํ
")
plt.plot(z, logit(z), "g--", linewidth=2, label="๋ก์ง์คํฑ")
plt.plot(z, np.tanh(z), "b-", linewidth=2, label="Tanh")
plt.plot(z, relu(z), "m-.", linewidth=2, label="ReLU")
plt.grid(True)
plt.legend(loc="center right", fontsize=14)
plt.title("ํ์ฑํ ํจ์", fontsize=14)
plt.axis([-5, 5, -1.2, 1.2])
plt.subplot(122)
plt.plot(z, derivative(np.sign, z), "r-", linewidth=2, label="Step")
plt.plot(0, 0, "ro", markersize=5)
plt.plot(0, 0, "rx", markersize=10)
plt.plot(z, derivative(logit, z), "g--", linewidth=2, label="Logit")
plt.plot(z, derivative(np.tanh, z), "b-", linewidth=2, label="Tanh")
plt.plot(z, derivative(relu, z), "m-.", linewidth=2, label="ReLU")
plt.grid(True)
plt.title("๋ํจ์", fontsize=14)
plt.axis([-5, 5, -0.2, 1.2])
save_fig("activation_functions_plot")
plt.show()
def heaviside(z):
return (z >= 0).astype(z.dtype)
def sigmoid(z):
return 1/(1+np.exp(-z))
def mlp_xor(x1, x2, activation=heaviside):
return activation(-activation(x1 + x2 - 1.5) + activation(x1 + x2 - 0.5) - 0.5)
x1s = np.linspace(-0.2, 1.2, 100)
x2s = np.linspace(-0.2, 1.2, 100)
x1, x2 = np.meshgrid(x1s, x2s)
z1 = mlp_xor(x1, x2, activation=heaviside)
z2 = mlp_xor(x1, x2, activation=sigmoid)
plt.figure(figsize=(10,4))
plt.subplot(121)
plt.contourf(x1, x2, z1)
plt.plot([0, 1], [0, 1], "gs", markersize=20)
plt.plot([0, 1], [1, 0], "y^", markersize=20)
plt.title("ํ์ฑํ ํจ์: ํค๋น์ฌ์ด๋", fontsize=14)
plt.grid(True)
plt.subplot(122)
plt.contourf(x1, x2, z2)
plt.plot([0, 1], [0, 1], "gs", markersize=20)
plt.plot([0, 1], [1, 0], "y^", markersize=20)
plt.title("ํ์ฑํ ํจ์: ์๊ทธ๋ชจ์ด๋", fontsize=14)
plt.grid(True)
10.3 ํ
์ํ๋ก์ ์ ์์ค API๋ก ์ฌ์ธต ์ ๊ฒฝ๋ง ํ๋ จํ๊ธฐ
๋คํธ์ํฌ์ ๊ตฌ์กฐ๋ฅผ ๋ ์์ธํ ์ ์ดํ๊ณ ์ถ๋ค๋ฉด ํ
์ํ๋ก์ ์ ์์ค ํ์ด์ฌ API๊ฐ ๋์์ง๋ ๋ชจ๋ฆ
๋๋ค. ์ด ์ ์์๋ ์ ์์ค API๋ก ์ด์ ๊ณผ ๊ฐ์ ๋ชจ๋ธ์ ๋ง๋ค๊ณ MNIST๋ฐ์ดํฐ์
์์ ํํํ๊ธฐ ์ํด ๋ฏธ๋๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. ์ฒซ๋ฒ์งธ ์คํ
์ ํ
์ํ๋ก ๊ณ์ฐ ๊ทธ๋ํ๋ฅผ ๋ง๋๋ ๊ตฌ์ฑ ๋จ๊ณ์ด๊ณ , ๋ ๋ฒ์งธ ์คํ
์ ์ค์ ๋ก ์ด ๊ทธ๋ํ๋ฅผ ์คํํด ๋ชจ๋ธ์ ํ๋ จ์ํค๋ ์คํ ๋จ๊ณ์
๋๋ค.
10.3.1 ๊ตฌ์ฑ ๋จ๊ณ
์
๋ ฅ๊ณผ ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๊ณ ์๋ฆญ์ธต์ ๋ด๋ฐ ์๋ฅผ ์ค์ ํฉ๋๋ค.
import tensorflow as tf
n_inputs = 28 * 28. #MNIST
n_hidden1 = 300
n_hidden2 = 100
n_outputs = 10
X์ ํฌ๊ธฐ๋ ์ผ๋ถ๋ถ๋ง ์ ์๋ฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์๋ ๊ฒ์ โ์ฒซ ๋ฒ์งธ ์ฐจ์์ ๋ฐ๋ผ ์ํ์ด ์๊ณ ๋ ๋ฒ์งธ ์ฐจ์์ ๋ฐ๋ผ ํน์ฑ์ด ์๋โ 2D ํ ์(์ฆ, ํ๋ ฌ)๋ผ๋ ์ ์ ๋๋ค. ํน์ฑ์ ์๋ 28 * 28(ํฝ์ ๋น ํ๋์ ํน์ฑ)์ ๋๋ค. ํ์ง๋ง ์์ง ํ๋ จ ๋ฐฐ์น์ ๋ช ๊ฐ์ ์ํ์ด ํฌํจ๋ ์ง ๋ชจ๋ฆ ๋๋ค. ๊ทธ๋์ X์ ํฌ๊ธฐ๋ (None, n_inputs)์ ๋๋ค. ๋น์ทํ๊ฒ y๋ ๊ฐ์ด ์ํ๋น ํ๋์ธ 1์ฐจ์ ํ ์๋ผ๋ ๊ฒ์ ์์ง๋ง, ์ญ์ ์ง๊ธ ์์ ์ ํ๋ จ ๋ฐฐ์น์ ํฌ๊ธฐ๋ฅผ ์ ์ ์์ด ์ด ํฌ๊ธฐ๋ (None)์ ๋๋ค.
X = tf.placeholder(tf.float32, shape=(None, n_inputs), name="X")
y = tf.placeholder(tf.int32, shape=(None), name="y")
ํ๋ ์ด์คํ๋ X๋ ์ ๋ ฅ์ธต์ ์ญํ ์ ํฉ๋๋ค. ์คํ ๋จ๊ณ ๋์ ํ ๋ฒ์ ํ๋์ฉ ํ๋ จ ๋ฐฐ์น๋ก ๋ฐ๋๊ฒ ๋ฉ๋๋ค. ์ด์ ๋ ๊ฐ์ ์๋์ธต๊ณผ ํ๋์ ์ถ๋ ฅ์ธต์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋ ์๋์ธต์ ๊ฑฐ์ ๊ฐ๊ณ ์ฐ๊ฒฐ๋ ์ ๋ ฅ๊ณผ ๋ด๋ฐ ์๋ง ๋ค๋ฆ ๋๋ค.
10.4 ์ ๊ฒฝ๋ง ํ์ดํผ๋ผ๋ผ๋ฏธํฐ ํ๋ํ๊ธฐ
์ ๊ฒฝ๋ง์ ์ ์ฐ์ฑ์ ์ค์ํ ๋จ์ ์ด ๋๊ธฐ๋ ํฉ๋๋ค. ์ฆ, ์กฐ์ ํด์ผ ํ ํ์ดํผํ๋ผ๋ฏธํฐ๊ฐ ๋ง์์ง๋๋ค. ์์ํ ์ ์๋ ์ด๋ค ๋คํธ์ํฌ ํ ํด๋ก์ง network topology(๋ด๋ฐ์ด ์ฐ๊ฒฐ๋ ๋ฐฉ์)๋ ์ฌ์ฉํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๊ฐ๋จํ ๋ค์ธต ํผ์
ํธ๋ก ์กฐ์ฐจ๋ ์ธต ์๋ ์ธต๋ง๋ค์ ๋ด๋ฐ ์, ๊ฐ ์ธต์์ ์ฌ์ฉํ๋ ํ์ฑํ ํจ์, ๊ฐ์ค์น ์ด๊ธฐํ ๋ฐฉ์ ๋ฑ์ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์ด๋ค ํ์ดํผํ๋ผ๋ฏธํฐ์ ์กฐํฉ์ด ์ต์ ์ธ์ง ์ด๋ป๊ฒ ์ ์ ์์๊น์?
๋ฌผ๋ก ์ด์ ์ฅ์์ ํ ๊ฒ์ฒ๋ผ ์ ์ ํ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ต์ฐจ ๊ฒ์ฆ์ ํ์ฉํ ๊ทธ๋ฆฌ๋ ํ์์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์กฐ์ ํ ํ์ดํผํ๋ผ๋ฏธํฐ๊ฐ ๋ง๊ณ ๋๊ท๋ชจ ๋ฐ์ดํฐ์
์ ์ ๊ฒฝ๋ง์ ํ๋ จํ ๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ฃผ์ด์ง ์๊ฐ ์์ ์ ์ฒด ํ์ดํผํ๋ผ๋ฏธํฐ ๊ณต๊ฐ ์ค ์์ ๋ถ๋ถ๋ง ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์ 2์ฅ์์ ์ด์ผ๊ธฐํ ๋๋ค ํ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ซ์ต๋๋ค.
10.4.1 ์๋์ธต์ ์
๋ง์ ๋ฌธ์ ๊ฐ ์๋์ธต ํ๋๋ก ์์ํด๋ ์ธ ๋งํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ฌ์ค ์๋์ธต์ด ํ๋์ธ ๋ค์ธต ํผ์
ํธ๋ก ์ด๋๋ผ๋ ๋ด๋ฐ ์๊ฐ ์ถฉ๋ถํ๋ฉด ์์ฃผ ๋ณต์กํ ํจ์๋ ๋ชจ๋ธ๋งํ ์ ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์ด๋ฐ ์ฌ์ค ๋๋ฌธ์ ์ค๋ฌ๋์ ์ฐ๊ตฌ์๋ค์ ๋ ๊น์ ์ ๊ฒฝ๋ง์ ์ฐ๊ตฌํ ํ์๋ฅผ ๋๋ผ์ง ๋ชปํ์ต๋๋ค. ํ์ง๋ง ์ฌ์ธต ์ ๊ฒฝ๋ง์ด ์์ ์ ๊ฒฝ๋ง๋ณด๋ค ํ๋ผ๋ฏธํฐ ํจ์จ์ฑ์ด ํจ์ฌ ์ข๋ค๋ ๊ฒ์ ๊ฐ๊ณผํ์ต๋๋ค. ์ฌ์ธต ์ ๊ฒฝ๋ง์ ๋ณต์กํ ์ผ์๋ฅผ ๋ชจ๋ธ๋งํ๋ ๋ฐ ์์ ์ ๊ฒฝ๋ง๋ณด๋ค ํจ์ฌ ์ ์ ์์ ๋ด๋ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฅด๊ฒ ํ๋ จ๋ฉ๋๋ค.
์ ๊ทธ๋ฐ์ง ์ดํดํ๊ธฐ ์ํด ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ๊ธฐ๋ฅ์ด ์๋ ๋๋ก์ ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํด ์ฒ์ ๋๋ ค์ผ ํ๋ค๊ณ ์๊ฐํด๋ด
์๋ค. ์ด ๊ฒฝ์ฐ ๋๋ฌด, ๊ฐ์ง, ์์ ํ๋ํ๋ ๋ชจ๋ ๊ฐ๋ณ์ ์ผ๋ก ๊ทธ๋ ค์ผ ํ ๊ฒ์
๋๋ค. ๋ง์ผ ์ ํ๋๋ฅผ ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋๋ญ๊ฐ์ง์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ณ , ์ด ๊ฐ์ง๋ฅผ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ก ๋๋ฌด๋ฅผ ๋ง๋ค๊ณ , ์ด ๋๋ฌด๋ฅผ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ก ์ฒ์ ๋ง๋ค ์ ์๋ค๋ฉด ๊ธ์ธ ์ผ์ ๋ง์น ์ ์์ ๊ฒ์
๋๋ค. ์ค์ ๋ก ๋ฐ์ดํฐ๋ ์ด๋ฐ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๋ง์์ ์ฌ์ธต ์ ๊ฒฝ๋ง์ ์๋์ ์ผ๋ก ์ด๋ฐ ์ ์์ ์ ๋ฆฌํฉ๋๋ค. ์๋์ชฝ ์๋์ธต์ ์ ์์ค์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ธ๋งํ๊ณ (์๋ฅผ ๋ค๋ฉด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉํฅ์ด๋ ํํ์ ์ ๋ถ), ์ค๊ฐ ์๋์ธต์ ์ ์์ค์ ๊ตฌ์กฐ๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ค๊ฐ ์์ค์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ธ๋งํฉ๋๋ค(์๋ฅผ ๋ค๋ฉด ์ฌ๊ฐํ ์). ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์์ชฝ ์๋์ธต๊ณผ ์ถ๋ ฅ์ธต์ ์ด๋ฐ ์ค๊ฐ ์์ค์ ๊ตฌ์กฐ๋ฅผ ์ฐ๊ฒฐํ์ฌ ๊ณ ์์ค์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ธ๋งํฉ๋๋ค(์๋ฅผ ๋ค๋ฉด ์ผ๊ตด).
10.4.2 ์๋์ธต์ ๋ด๋ฐ ์
์
๋ ฅ์ธต๊ณผ ์ถ๋ ฅ์ธต์ ๋ด๋ฐ ์๋ ํด๋น ์์
์ ํ์ํ ์
๋ ฅ๊ณผ ์ถ๋ ฅ์ ํํ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด MNIST๋ 28 * 28 = 784๊ฐ์ ์
๋ ฅ ๋ด๋ฐ๊ณผ 10๊ฐ์ ์ถ๋ ฅ ๋ด๋ฐ์ด ํ์ํฉ๋๋ค. ์ธ๋์ธต์ ๊ตฌ์ฑ ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ์ธต์ ๋ด๋ฐ์ ์ ์ ์ค์ฌ์ ๊น๋๊ธฐ์ฒ๋ผ ๊ตฌ์ฑํฉ๋๋ค. ์ ์์ค์ ๋ง์ ํน์ฑ์ด ๊ณ ์์ค์ ์ ์ ํน์ฑ์ผ๋ก ํฉ์ณ์ง ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋จ์ ์ ๊ทผ ๋ฐฉ์์ ์ค์ ํ์ํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์ธต๊ณผ ๋ด๋ฐ์ ๊ฐ์ง ๋ชจ๋ธ์ ์ ํํ๊ณ , ๊ทธ๋ฐ ๋ค์ ๊ณผ๋์ ํฉ๋์ง ์๋๋ก ์กฐ๊ธฐ ์ข
๋ฃ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ โ์คํธ๋ ์น ํฌ์ธ stretch pantsโ๋ฐฉ์์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ฆ, ๋์๊ฒ ๋ง๋ ์ฌ์ด์ฆ์ ๋ฐ์ง๋ฅผ ์ฐพ๋๋ผ ์๊ฐ์ ๋ญ๋นํ๋ ๋์ ์ ๊ทธ๋ฅ ํฐ ์คํธ๋ ์น ํฌ์ธ ๋ฅผ ์ฌ๊ณ ๋์ค์ ์๋ง๊ฒ ์ค์ด๋ ๊ฒ์
๋๋ค.