๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Develop Study ๐Ÿ’ป

๋”ฅ๋Ÿฌ๋‹ ์† ์ˆ˜ํ•™ ๊ธฐ์ดˆ + ๊ฒฝ์‚ฌ๋ฒ• ์ˆ˜์น˜๋ฏธ๋ถ„ ํŒŒ์ด์ฌ

728x90

๊ธฐ๋ณธ์ ์ธ ๋”ฅ๋Ÿฌ๋‹์˜ ๋‹จ๊ณ„๋ฅผ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด ์•Œ์•„๋ณด๊ณ 

๋”ฅ๋Ÿฌ๋‹ ๋‹จ๊ณ„

1. ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต (ํ†ต๊ณ„)

2. ๋ชจ๋ธ ์„ค๊ณ„ (์„ ํ˜•๋Œ€์ˆ˜)

3. ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹ (๋ฏธ๋ถ„&์ ๋ถ„)

4. ๋ชจ๋ธ ํ…Œ์ŠคํŠธ

๋”ฅ๋Ÿฌ๋‹์˜ ๊ธฐ์ดˆ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผํ• 

์„ ํ˜•๋Œ€์ˆ˜

แ„‰แ…ฅแ†ซแ„’แ…งแ†ผแ„ƒแ…ขแ„‰แ…ฎ.pdf
0.19MB

ํ†ต๊ณ„

แ„แ…ฉแ†ผแ„€แ…จ.pdf
1.30MB

๋ฏธ์ ๋ถ„

แ„†แ…ตแ„‡แ…ฎแ†ซแ„€แ…ชแ„Œแ…ฅแ†จแ„‡แ…ฎแ†ซ.pdf
0.26MB

์ค‘ ๋ฏธ์ ๋ถ„์„ ์•Œ์•„๋ณด์ž

์ฒจ๋ถ€๋œ ํŒŒ์ผ์„ ํ™•์ธํ•˜๋ฉด ๋‚ ๊ฐœ๋…๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.



๐Ÿ“Œ 1. ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต

๋”ฅ๋Ÿฌ๋‹์—์„œ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ชจ๋ธ์— ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

์ด์— ์žˆ์–ด์„œ ํ•™์Šต์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ, ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ณ„ํ•ด, ํŠธ๋ ˆ์ด๋‹๊ณผ ํ…Œ์ŠคํŠธ์— ์œ ๋ฆฌํ•˜๋„๋ก ๋ณ€ํ™˜ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค

์—ฌ๊ธฐ์„œ ํ†ต๊ณ„์˜ ์ •๊ทœํ™” ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค.

์ •๊ทœํ™”๋ž€?
๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ค๊ณ„์—์„œ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •๊ทœํ™”๋ผ๊ณ  ํ•จ. ํ•จ์ˆ˜์˜ ์ข…์†์„ฑ์„ ์ด์šฉํ•ด ์—ฐ๊ด€์„ฑ ์žˆ๋Š” ์†์„ฑ๋“ค์„ ๋ถ„๋ฅ˜ํ•˜๊ณ , ๊ฐ ๋ฆด๋ ˆ์ด์…˜๋“ค์—์„œ ์ด์ƒํ˜„์ƒ์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•จ.
๋”ฅ๋Ÿฌ๋‹์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๊ฐ€ ๋™์ผํ•œ ์ •๋„์˜ ์Šค์ผ€์ผ(์ค‘์š”๋„)๋กœ ๋ฐ˜์˜๋˜๋„๋ก ํ•ด์ฃผ๋Š”๊ฒŒ ์ •๊ทœํ™”์˜ ๋ชฉํ‘œ์ด๋‹ค.
๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๋ฐ์ดํ„ฐ ๋‹จ์œ„์˜ ๋ถˆ์ผ์น˜๋กœ ์ธํ•ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ค‘ ํ•˜๋‚˜์ด๋‹ค. ํ‘œ์ค€ํ™”์˜ ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

- ์ •๊ทœํ™”
๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๊ตฌ๊ฐ„์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ฒ™๋„๋ฒ•์ž„
(์ธก์ •๊ฐ’ - ์ตœ์†Œ๊ฐ’) / (์ตœ๋Œ€๊ฐ’ - ์ตœ์†Œ๊ฐ’)
๋ฐ์ดํ„ฐ ๊ตฐ ๋‚ด์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์ง€๋Š” ์œ„์น˜๋ฅผ ๋ณผ ๋•Œ ์‚ฌ์šฉ๋จ
ํ˜„์žฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋Š ์œ„์น˜์—์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์ข‹๋‹ค

- ํ‘œ์ค€ํ™”
๋ฐ์ดํ„ฐ๋ฅผ 0์„ ์ค‘์‹ฌ์œผ๋กœ ์–‘์ชฝ์œผ๋กœ ๋ถ„ํฌ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ž„.
ํ‰๊ท ์„ ๊ธฐ์ค€์œผ๋กœ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋จ.
ํ•™๊ต <ํ™•๋ฅ ๊ณผ ํ†ต๊ณ„> ์‹œ๊ฐ„์— ๋ฐฐ์šฐ๋Š” ํ‘œ์ค€ํ™”( ์ธก์ •๊ฐ’ - ํ‰๊ท  / ํ‘œ์ค€ํŽธ์ฐจ )๋„ ๋‹จ์œ„์ฐจ์ด์˜ ๋ฌธ์ œ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ข…๋ฅ˜์ค‘ ํ•˜๋‚˜์ด๋‹ค.

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ •๊ทœํ™” ๋ฐฉ์‹์€ MIN-MAX ์ •๊ทœํ™”์ด๋‹ค.

(๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” Z-Score ์ •๊ทœํ™” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.)

๋‘ ์ •๊ทœํ™”์˜ ๋ฐฉ์‹์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ์•Œ์•„๋ณด์ž (?


๐Ÿ“Œ 2. ๋ชจ๋ธ ์„ค๊ณ„

๋ฐ์ดํ„ฐ๋ฅผ ์•Œ๋งž๊ฒŒ ๋ชจ์•˜๋‹ค๋ฉด ๋”ฅ๋Ÿฌ๋‹์ด ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์„ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฐ์ดํ„ฐ ํ˜•์‹๊ณผ ๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ ๋ฐฉ์‹์— ์žˆ์–ด์„œ ์„ ํ˜•๋Œ€์ˆ˜ ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค .

๐Ÿ“Œ ๋ฐ์ดํ„ฐ ํ˜•์‹

์ดํ•ดํ•˜๊ธฐ ์ข‹์„ ๊ทธ๋ฆผ์„ ๊ฐ€์ ธ์™”๋‹ค2

์„ ํ˜•๋Œ€์ˆ˜์—์„œ ํฌ๊ฒŒ ์Šค์นผ๋ผ(0์ฐจ), ๋ฒกํ„ฐ(1์ฐจ), ํ–‰๋ ฌ(2์ฐจ), ํ…์„œ(N)์˜ 4๊ฐ€์ง€์˜ ํ˜•์‹์„ ๊ฐ€์ง„๋‹ค.

๋”ฅ๋Ÿฌ๋‹์—์„œ ๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ…์„œ(N์ฐจ)์ธ๋ฐ

ํ…์„œ๊ฐ€ 0์ฐจ์› : ์Šค์นผ๋ผ

ํ…์„œ๊ฐ€ 1์ฐจ์› : ๋ฒกํ„ฐ

ํ…์„œ๊ฐ€ 2์ฐจ์› : ํ–‰๋ ฌ

์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋”ฅ๋Ÿฌ๋‹์—์„œ ์ด๋Ÿฌํ•œ ํ…์„œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฐ์‚ฐ ์ˆ˜ํ–‰์„ ํ†ตํ•ด ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ฒŒ ๋œ๋‹ค.

๐Ÿ“Œ๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜๋ฐ”์™€ ๊ฐ™์ด ๋”ฅ๋Ÿฌ๋‹์—์„œ ๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ๋Š” **ํ…์„œ**์ด๋‹ค.

์ด๋ฅผ ์—ฐ์‚ฐํ•˜๊ธฐ ์œ„ํ•ด **ํ–‰๋ ฌ์˜ ์—ฐ์‚ฐ**์ด ์“ฐ์ธ๋‹ค

ํ–‰๋ ฌ์˜ ์—ฐ์‚ฐ๊ณผ์ •์€ ๊ณ ๋“ฑํ•™๊ต์—์„œ ๋ฐฐ์šฐ๋Š” ๊ณผ์ •์ด์ง€๋งŒ 2015๊ต์œก๊ณผ์ •์„ ๊ธฐ์ ์œผ๋กœ ์‚ฌ๋ผ์กŒ๋‹ค. ์‚ฌ์‹ค

๋‚˜๋„ ๋ฐฐ์šด์  ์—†๋‹ค

ํ–‰๋ ฌ์˜ ์—ฐ์‚ฐ ์ค‘ ๊ณฑ์…ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ดํ•ดํ•˜๊ธฐ ์ข‹์„ ๊ทธ๋ฆผ์„ ๊ฐ€์ ธ์™”๋‹ค2

์ดํ•ด์— ์ข‹์„ ๊ทธ๋ฆผ์„ ๊ฐ€์ ธ์™”๋‹ค 3

๊ทธ ์™ธ์˜ ์—ฐ์‚ฐ๋ฐฉ๋ฒ•๋“ค์€ ์œ„์— ์ฒจ๋ถ€๋œ pdf๋ฅผ ์ฐธ๊ณ ํ•˜์ž


๐Ÿ“Œ 3. ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹

๋”ฅ๋Ÿฌ๋‹์—์„œ ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹์€ Trial-Error๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ

๋ง ๊ทธ๋Œ€๋กœ ์ผ๋‹จํ•ด๋ด„ โ˜ž ์˜ค์ฐจ ๊ณ„์‚ฐ โ˜ž ์˜ค์ฐจ๋งŒํผ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ๋ณด์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ๋ณด์ •ํ•˜๋Š”๋ฐ ๋ฏธ๋ถ„&์ ๋ถ„์˜ ๊ฐœ๋…์ด ์ด์šฉ๋œ๋‹ค.

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณด์ •์€ **Gradient Descent ๋ฐฉ๋ฒ•**์ด๋‹ค.

์˜ค์ฐจ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” W๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฏธ๋ถ„์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ Gradient๊ฐ’์— ๋”ฐ๋ผ W๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

1์ฐจ ๊ทผ์‚ฟ๊ฐ’ ๋ฐœ๊ฒฌ์šฉ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

ํ•จ์ˆ˜์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ตฌํ•œ ํ›„ ๊ธฐ์šธ๊ธฐ๊ฐ€ ๋‚ฎ์€์ชฝ์œผ๋กœ ๊ณ„์† ์ด๋™์‹œ์ผœ ๊ทน๊ฐ’์— ์ด๋ฅผ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ๋Š๋‚Œ์ž„

์ด๋Ÿฐ๋Š๋‚Œ...2 3์ฐจ์› ๊ทธ๋ฆฌ๋‹ค ์‹คํŒจํ•œ๊ฑฐ ๋งž๋‹ค


๐Ÿ“Œ

๊ฒฝ์‚ฌ๋ฒ•, ์ˆ˜์น˜ ๋ฏธ๋ถ„

ํŒŒ์ด์ฌ ๊ตฌํ˜„

๊ฐ„๋‹จํžˆ ์•„์ฃผ ์ž‘์€ ๊ฐ„๊ฒฉ์˜ ๊ตฌ๊ฐ„์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ตฌํ•˜๋Š”๊ฒƒ์ด๋‹ค.

ํ•™๊ต์—์„œ ๋ฐฐ์šฐ๋Š” ์ •์ ๋ถ„๊ณผ ๋ถ€์ •์ ๋ถ„ ๊ฐœ๋…์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋ฏธ๋ถ„ํ•˜๋Š” ๊ณผ์ •์„ ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•ด ๋ณด์ž (ํŒŒ์ด์„  defํ•จ์ˆ˜ ๋งž์Šต๋‹ˆ๋‹ค. ํ‹ฐ์Šคํ† ๋ฆฌ ์ฝ”๋“œ๋ธ”๋Ÿญ์ด ์ต์ˆ™์น˜ ์•Š์•„์„œ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ์•ˆ๋งž์„๋ฟ)

def numerical_diff(f,x):
    h = 1e-4 #h๊ฐ’์„ ๊ฐ€๊ธ‰์  ์ž‘์€ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๊ณ ์ž e๋ฅผ ์ด์šฉํ–ˆ๋‹ค -> 0.0001
    return (f(x+h)-f(x-h))/2*h

    # ์˜ค์ฐจ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ์ค‘์‹ฌ์ฐจ๋ถ„์„ ์ด์šฉํ•จ 
    # ๊ณ ๋“ฑํ•™๊ต์—์„œ x+h-(x-h) =2h๋กœ ๊ณ„์‚ฐํ•˜๋˜ ๊ทธ ๊ณผ์ • ๋งž๋‹ค

๊ฐ„๋‹จํžˆ 2์ฐจํ•จ์ˆ˜ (y = 0.01x^2 + 0.1x) ๋ฅผ ๊ทธ๋ฆฌ๊ณ  ๋ฏธ๋ถ„ํ•œ ๊ฐ’์„ ํ™•์ธํ•ด ๋ณด์ž

#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt

def numerical_diff(f,x):
    h = 1e-4
    return(f(x+h)-f(x-h))/2*h



def function(x):
    return 0.01*x**2 + 0.1 * x


#๊ทธ๋ž˜ํ”„๋กœ 
x = np.arange(0.0,20.0,0.1)
y = function(x)
plt.xlable("x")
plt.ylable("f(x)")
plt.plot(x,y)
plt.show()

print(numerical\_diff(function,5))๋ฅผ ์ฐ์–ด๋ณด๋ฉด x๊ฐ€ 5์ผ๋•Œ์˜ ๋ฏธ๋ถ„๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

1.9999999999908982e-09๋กœ ๋‚˜์˜ค๋Š”๋ฐ ๋ฏธ๋ถ„ํ–ˆ์„ ๋•Œ ๊ฐ’์ด 0.2์ธ๊ฑธ ๋ณด๋ฉด ๊ฑฐ์˜ ์˜ค์ฐจ๊ฐ€ ์—†์„ ์ •๋„์ด๋‹ค

๋ฏธ๋ถ„์ด ๋˜๋Š”๊ฑธ ํ™•์ธ ํ–ˆ์œผ๋‹ˆ ์‹ค์ œ ๋”ฅ๋Ÿฌ๋‹์—์„œ ์“ฐ์ด๋Š” ํŽธ๋ฏธ๋ถ„(๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฟ)์„ ํ•ด๋ณด์ž

์—ฌ๊ธฐ๋ถ€ํ„ฐ๋Š” https://m.blog.naver.com/ssdyka/221299637545์„ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค

๋ณ€์ˆ˜๊ฐ€ x0, x1๋กœ ๋‘๊ฐœ์ด๋‹ค

def function_2(x):
    return x[0]**2 + x[1]**2

ํŽธ๋ฏธ๋ถ„์„ ๋™์‹œ์— ๊ณ„์‚ฐ (๊ฐ ๋ณ€์ˆ˜๋ณ„๋กœ ๋”ฐ๋กœ ๊ณ„์‚ฐํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋™์‹œ์—)ํ•˜๊ณ ์ž ํ•˜๋ฉด

๋ชจ๋“  ๋ณ€์ˆ˜์˜ ํŽธ๋ฏธ๋ถ„์˜ ๋ฒกํ„ฐ๋กœ ์ •๋ฆฌํ•ด ๊ณ„์‚ฐํ•˜๊ณ  ์ด๊ฒƒ์„ ๊ธฐ์šธ๊ธฐ(gradient)๋ผ ํ•œ๋‹ค.

(x0,x1)์˜ ๊ฐ ์ ์—์„œ ๊ธฐ์šธ๊ธฐ๋ฅผ ๋™์‹œ์— ์–ป์„ ์ˆ˜ ์žˆ๋‹ค

# coding: utf-8

import numpy as np



def numerucal_gradient(f,x):

    h = 1e-4  #0.0001

    # x์™€ ํ˜•์ƒ์ด ๊ฐ™์€ ๋ฐฐ์—ด์— ๋ชจ๋‘0์ธ ๊ฐ’

    grad = np.zeros_like(x)



    for idx in range(x.size):

        tmp_val = x[idx]

        # f(x+h) ๊ณ„์‚ฐ

        x[idx] = tmp_val+h

        fxh1 = f(x)



        # f(x-h) ๊ณ„์‚ฐ

        x[idx] = tmp_val-h

        fxh2 = f(x)    



        grad[idx] = (fxh1-fxh2)/(2*h)

        x[idx] = tmp_val

    return grad



def function_2(x):

#     return x[0]**2 + x[1]**2

    return np.sum(x**2)



print(numerucal_gradient(function_2, np.array([3.0,4.0])))

print(numerucal_gradient(function_2, np.array([0.0,2.0])))

print(numerucal_gradient(function_2, np.array([3.0,0.0])))

# [6. 8.]

# [0. 4.]

# [6. 0.]

๊ธฐ์šธ๊ธฐ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค ํ™”์‚ดํ‘œ๋กœ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค (๋ฒกํ„ฐ๊ฐ’)

# coding: utf-8

# cf.http://d.hatena.ne.jp/white_wheels/20100327/p3

import numpy as np

import matplotlib.pylab as plt

from mpl_toolkits.mplot3d import Axes3D



def _numerical_gradient_no_batch(f, x):

    h = 1e-4 # 0.0001

    grad = np.zeros_like(x) # x์™€ ํ˜•์ƒ์ด ๊ฐ™์€ ๋ฐฐ์—ด์„ ์ƒ์„ฑ



    for idx in range(x.size):

        tmp_val = x[idx]



        # f(x+h) ๊ณ„์‚ฐ

        x[idx] = float(tmp_val) + h

        fxh1 = f(x)



        # f(x-h) ๊ณ„์‚ฐ

        x[idx] = tmp_val - h 

        fxh2 = f(x) 



        grad[idx] = (fxh1 - fxh2) / (2*h)

        x[idx] = tmp_val # ๊ฐ’ ๋ณต์›



    return grad



def numerical_gradient(f, X):

    if X.ndim == 1:

        return _numerical_gradient_no_batch(f, X)

    else:

        grad = np.zeros_like(X)



        for idx, x in enumerate(X):

            grad[idx] = _numerical_gradient_no_batch(f, x)



        return grad



def function_2(x):

    if x.ndim == 1:

        return np.sum(x**2)

    else:

        return np.sum(x**2, axis=1)



def tangent_line(f, x):

    d = numerical_gradient(f, x)

    print(d)

    y = f(x) - d*x

    return lambda t: d*t + y



if __name__ == '__main__':

    x0 = np.arange(-2, 2.5, 0.25)

    x1 = np.arange(-2, 2.5, 0.25)

    X, Y = np.meshgrid(x0, x1)



    X = X.flatten()

    Y = Y.flatten()



    grad = numerical_gradient(function_2, np.array([X, Y]) )



    plt.figure()

    plt.quiver(X, Y, -grad[0], -grad[1],  angles="xy",color="#666666")#,headwidth=10,scale=40,color="#444444")

    plt.xlim([-2, 2])

    plt.ylim([-2, 2])

    plt.xlabel('x0')

    plt.ylabel('x1')

    plt.grid()

    plt.legend()

    plt.draw()

    plt.show()

๊ฐ€์žฅ ๋‚ฎ์€ ์žฅ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜์–ด์žˆ์œผ๋ฉฐ

๊ฐ€์žฅ ๋‚ฎ์€๊ณณ๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์–ด์ง์— ๋”ฐ๋ผ ํ™”์‚ดํ‘œ์˜ ํฌ๊ธฐ๋„ ๋”ฐ๋ผ ์ปค์ง„๋‹ค.

๊ฐ€์žฅ ๋‚ฎ์€๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ํ™”์‚ดํ‘œ์˜ ๋ฐฉํ–ฅ์ฒ˜๋Ÿผ ๋”ฅ๋Ÿฌ๋‹์˜ ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹ ๊ณผ์ •์€ j(w)์˜ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’์„ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •์ด๋‹ค.

728x90