[Supervised Learning] ์ง€๋„ ํ•™์Šต

2023. 2. 8. 17:55
๐Ÿง‘๐Ÿป‍๐Ÿ’ป์šฉ์–ด ์ •๋ฆฌ

Supervised Learning

์ง€๋„ ํ•™์Šต

  • ํŠน์ง• : ์ด๋ฏธ ์ธก์ •๋œ ๋ฐ์ดํ„ฐ์˜ ์†์„ฑ ์‚ฌ์ด์˜ ๊ด€๊ณ„
  • "์ด๋ฏธ ์ธก์ •๋œ"

 

  • ์—ฌ๋Ÿฌ ์ˆซ์ž๋ฅผ ๋ชจ์•„ ํ–‰์œผ๋กœ ๋‚˜ํƒ€๋‚ด์–ด ndarray ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ฐฐ์น˜ batch๋ฅผ ๋งŒ๋“ค์–ด ๋ชจ๋ธ์— ์ž…๋ ฅ.
  • ๊ฐ ๊ด€์ฐฐ์— ๋Œ€ํ•œ ์˜ˆ์ธก ๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ธด ํ–‰์œผ๋กœ ๊ตฌ์„ฑ๋œ ndarray ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜.
  • ํ–‰์˜ ๊ธธ์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ํŠน์ง•, ์ฆ‰ feature์˜ ๊ฐœ์ˆ˜์ด๋‹ค.
  • feature๋Š” category์— ๋”ฐ๋ผ ๋‚˜๋ˆ„์–ด ๋ถ„๋ฅ˜ํ•œ๋‹ค.
  • ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๊ฐ€ - target

 

 

์ง€๋„ ํ•™์Šต ๋ชจ๋ธ

  • ์ง€๋„ ํ•™์Šต์˜ ๋ชฉ์ ์€ ndarray ๊ฐ์ฒด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋˜ ๋‹ค๋ฅธ ndarray ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„ ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด ํ•จ์ˆ˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ํŠน์ง•๊ฐ’์„ ๋‹ด์€ ndarray๊ฐ์ฒด๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ณ , ๋ชฉํ‘œ ์†์„ฑ์˜ ํŠน์ง•๊ณผ ๊ฐ€๊นŒ์šด ๊ฐ’์„ ๋‹ด์Œ ndarray ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ด€์ฐฐ์˜ ์†์„ฑ๊ฐ’์„ ๋ชฉํ‘œ ์†์„ฑ๊ณผ ๋Œ€์‘์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

 

์„ ํ˜•ํšŒ๊ท€ (linear regression)

์ถœ์ฒ˜ : https://www.wallstreetmojo.com/regression-formula/

 

linear combination๊ณผ ์˜ˆ์ธก๊ฐ’์„ ๊ธฐ์ค€์„ ์„ ์กฐ์ •ํ•˜๋Š” ํ•ญ์œผ๋กœ ๋ชฉํ‘œ์‚พ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ.

 

 

X์™€ W์˜ ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ.

์ถœ์ฒ˜ : https://github.com/flourscent/DLFS_code/blob/master/02_fundamentals/math.ipynb

์œ„์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ด€์ฐฐ์ด ๋‹ด๊ธด ๋ฐฐ์น˜์— ๋Œ€ํ•œ ์˜ˆ์ธก๊ฐ’๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ ํ•œ ๋ฒˆ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ด€์ธก์— ๋Œ€ํ•ด ์„ ํ˜•ํšŒ๊ท€ ๋ชจํ˜•์„ ๋”ฐ๋ฅด๋Š” ์˜ˆ์ธก๊ฐ’์„ ํ•œ ๋ฒˆ์— ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์„ ํ˜•ํšŒ๊ท€ ๋ชจ๋ธ ํ•™์Šตํ•˜๊ธฐ

 

  • ๋ชจ๋ธ์„ ํ•™์Šตํ•œ๋‹ค๋Š” ๊ฑด, ์ถ”์ƒ์ ์œผ๋กœ ๋ณด๋ฉด ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํŒŒ๋ผ๋ฏธํ„ฐ parameter๋ฅผ ์ด์šฉํ•ด ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์ข…์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ทจํ•ฉํ•˜์—ฌ ์˜ˆ์ธก๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ์„ ํ˜•ํšŒ๊ท€ ๋ชจํ˜•์€ ๋ฐ์ดํ„ฐ X์™€ ํŒŒ๋ผ๋ฏธํ„ฐ W๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์˜ˆ์ธก๊ฐ’ P๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ๋ชจ๋ธ ํ•™์Šต์„ ์œ„ํ•ด ๋ชจ๋ธ์ด ๊ณ„์‹ผํ•œ ์˜ˆ์ธก๊ฐ’์ด ์ •ํ™•ํ•œ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋” ํ•„์š”ํ•˜๋‹ค.
  • ์ด๋ฅผ ์œ„ํ•ด, Xbatch์˜ ๊ฐ ๊ด€์ฐฐ์— ๋Œ€์‘ํ•˜๋Š” ์˜ณ์€ ์˜ˆ์ธก๊ฐ’์„ ๋ชจ์€ ์ƒˆ๋กœ์šด ๋ฒกํ„ฐ Ybatch๋ฅผ ๋„์ž…ํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  Ybatch์™€ Pbatch์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ์ด ๊ฐ’์€ ๋ชจ๋ธ์˜ ์˜ˆ์ธก์ด ์–ผ๋งˆ๋‚˜ ์ •ํ™•ํ–ˆ๋Š”์ง€๋ฅผ ๋”ฐ์ ธ ๊ทธ ์ •ํ™•๋„์— ๋”ฐ๋ผ ๋ชจ๋ธ์— ๋ถ€์—ฌ๋˜๋Š” '๋ฒŒ์ '์—ญํ• ์„ ํ•œ๋‹ค.
  • ์ด ๋ฒŒ์ ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ MSE (Mean Squared Error, ํ‰๊ท ์ œ๊ณฑ์˜ค์ฐจ)๊ฐ€ ์ ๋‹นํ•˜๋‹ค.
  • ํ‰๊ท ์ œ๊ณฑ์˜ค์ฐจ๋Š” ๊ฐ ๊ด€์ฐฐ์˜ ์˜ˆ์ธก๊ฐ’๊ณผ ์ •๋‹ต์˜ ์˜ค์ฐจ์˜ ์ œ๊ณฑ์„ ํ‰๊ท  ๋‚ธ ๊ฐ’์ด๋‹ค.
  • ์ด ๊ฐ’์„ ํ†ตํ•ด W์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•œ ์ด ๊ฐ’์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ถœ์ฒ˜ : https://github.com/flourscent/DLFS_code/blob/master/02_fundamentals/math.ipynb

 

์œ„ ๊ณผ์ •์— ํŽธํ–ฅ b๊นŒ์ง€ ๋”ํ•ด์ฃผ๋ฉด ์œ„์™€ ๊ฐ™์€ ์ˆ˜์‹์ด ์™„์„ฑ๋œ๋‹ค.

 

์œ„ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด์ž.

 

def forward_linear_regression(X_batch: ndarray,
                              y_batch: ndarray,
                              weights: Dict[str, ndarray]
                              )-> Tuple[float, Dict[str, ndarray]]:
    '''
    ์„ ํ˜•ํšŒ๊ท€์˜ ์ˆœ๋ฐฉํ–ฅ ๊ณ„์‚ฐ ๊ณผ์ •
    '''
    # X์™€ y์˜ ๋ฐฐ์น˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธ
    assert X_batch.shape[0] == y_batch.shape[0]

    # ํ–‰๋ ฌ๊ณฑ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ
    assert X_batch.shape[1] == weights['W'].shape[0]

    # B์˜ ๋ชจ์–‘์ด 1x1์ธ์ง€ ํ™•์ธ
    assert weights['B'].shape[0] == weights['B'].shape[1] == 1

    # ์ˆœ๋ฐฉํ–ฅ ๊ณ„์‚ฐ ์ˆ˜ํ–‰
    N = np.dot(X_batch, weights['W'])

    P = N + weights['B']

    loss = np.mean(np.power(y_batch - P, 2))

    # ์ˆœ๋ฐฉํ–ฅ ๊ณ„์‚ฐ ๊ณผ์ •์˜ ์ค‘๊ฐ„๊ฐ’ ์ €์žฅ
    forward_info: Dict[str, ndarray] = {}
    forward_info['X'] = X_batch
    forward_info['N'] = N
    forward_info['P'] = P
    forward_info['y'] = y_batch

    return loss, forward_info

 

BELATED ARTICLES

more