๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
1๏ธโƒฃ AI•DS/๐Ÿ“’ Deep learning

[๋”ฅ๋Ÿฌ๋‹ ํŒŒ์ดํ† ์น˜ ๊ต๊ณผ์„œ] 4์žฅ ๋”ฅ๋Ÿฌ๋‹ ์‹œ์ž‘

by isdawell 2022. 10. 4.
728x90

https://colab.research.google.com/drive/1j9ghqmP-QboSbipZ7LjzbRrpTq4Mhqo8?usp=sharing 

 

[๋”ฅ๋Ÿฌ๋‹ ํŒŒ์ดํ† ์น˜ ๊ต๊ณผ์„œ] chapter 04 ๋”ฅ๋Ÿฌ๋‹ ์‹œ์ž‘.ipynb

Colaboratory notebook

colab.research.google.com

 

 

 

 

 

1๏ธโƒฃ  ์ธ๊ณต ์‹ ๊ฒฝ๋ง์˜ ํ•œ๊ณ„์™€ ๋”ฅ๋Ÿฌ๋‹ ์ถœํ˜„ 


 

๐Ÿ”น  XOR ๋น„์„ ํ˜• ๋ฌธ์ œ 

 

๐ŸŒ   ํผ์…‰ํŠธ๋ก  

 

 

•  ์„ ํ˜• ๋ถ„๋ฅ˜๊ธฐ๋กœ ๋”ฅ๋Ÿฌ๋‹์˜ ๊ธฐ์›์ด ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ 

•  ๋‹ค์ˆ˜์˜ ์‹ ํ˜ธ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ํ•˜๋‚˜์˜ ์‹ ํ˜ธ (1 ๋˜๋Š” 0 : ํ๋ฅธ๋‹ค/์•ˆํ๋ฅธ๋‹ค) ๋ฅผ ์ถœ๋ ฅ 

 

 

๐ŸŒ   ๋…ผ๋ฆฌ ๊ฒŒ์ดํŠธ 

 

 

https://wikidocs.net/24958

 

•  OR ๊ณผ AND ๊ฒŒ์ดํŠธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์„ ํ˜•์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค. 

 

 

•  XOR ๊ฒŒ์ดํŠธ๋Š” ๋ฒ ํƒ€์  ๋…ผ๋ฆฌํ•ฉ ๊ตฌ์กฐ (์ž…๋ ฅ ๋‘๊ฐœ ์ค‘ ํ•œ๊ฐœ๋งŒ 1์ผ ๋•Œ ์ž‘๋™ํ•˜๋Š” ๋…ผ๋ฆฌ์—ฐ์‚ฐ) ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋น„์„ ํ˜•์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ธต ํผ์…‰ํŠธ๋กœ(์„ ํ˜• ๋ถ„๋ฅ˜๊ธฐ) ๋Š” ํ•™์Šต์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

•  MLP ๋‹ค์ธต ํผ์…‰ํŠธ๋ก  → XOR ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ์€๋‹‰์ธต์„ ๋‘์–ด์„œ ๋น„์„ ํ˜•์ ์ธ ํ•™์Šต์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•จ 

 

 

 

 

2๏ธโƒฃ  ๋”ฅ๋Ÿฌ๋‹ ๊ตฌ์กฐ 


 

๋”ฅ๋Ÿฌ๋‹ : ์—ฌ๋Ÿฌ ์ธต์„ ๊ฐ€์ง„ ์ธ๊ณต์‹ ๊ฒฝ๋ง์„ ์‚ฌ์šฉํ•ด ํ•™์Šต์„ ์ˆ˜ํ–‰ 

 

๐Ÿ”น  ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ 

 

https://thebook.io/080289/ch04/02/01/

 

 

โ‘  ๊ฐ€์ค‘์น˜ 

 

 

โˆ˜  ์ž…๋ ฅ๊ฐ’ (ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ) ์ด ์—ฐ์‚ฐ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๋ ฅ์„ ์กฐ์ ˆํ•˜๋Š” ์š”์†Œ 

 

 

 

โ‘ก ๊ฐ€์ค‘ํ•ฉ ๋˜๋Š” ์ „๋‹ฌํ•จ์ˆ˜ 

 

โˆ˜  ๊ฐ ๋…ธ๋“œ์—์„œ ๋“ค์–ด์˜ค๋Š” ์‹ ํ˜ธ์— ๊ฐ€์ค‘์น˜๋ฅผ ๊ณฑํ•ด ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ „๋‹ฌ๋˜๋Š”๋ฐ ์ด ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•œ ํ•ฉ๊ณ„๋ฅผ ๊ฐ€์ค‘ํ•ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค. 

โˆ˜  ๊ฐ€์ค‘ํ•ฉ์€ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋กœ ๋ณด๋‚ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ „๋‹ฌํ•จ์ˆ˜๋ผ๊ณ ๋„ ํ•œ๋‹ค. 

 

๊ฐ€์ค‘ํ•ฉ ๊ณต์‹

 

 

โ‘ข ํ™œ์„ฑํ™” ํ•จ์ˆ˜ 

 

 

โˆ˜  ์ผ์ • ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ถœ๋ ฅ ๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๋น„์„ ํ˜• ํ•จ์ˆ˜ 

โˆ˜  ์‹œ๊ทธ๋ชจ์ด๋“œ, ํ•˜์ดํผ๋ณผ๋ฆญ ํƒ„์  ํŠธ, ๋ ๋ฃจ ๋“ฑ์˜ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. 

 

 

(1) ์‹œ๊ทธ๋ชจ์ด๋“œ

 

 

  • ์„ ํ˜• ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ 0๊ณผ 1์‚ฌ์ด์—์„œ ๋น„์„ ํ˜• ํ˜•ํƒœ๋กœ ๋ณ€ํ˜•
  • ๋ถ„๋ฅ˜ ๋ฌธ์ œ๋ฅผ ํ™•๋ฅ ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ EX. ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ 
  • ๊ธฐ์šธ๊ธฐ ์†Œ๋ฉธ ๋ฌธ์ œ ์กด์žฌ 

 

(2) ํ•˜์ดํผ๋ณผ๋ฆญ ํƒ„์  ํŠธ ํ•จ์ˆ˜ 

 

  • ์„ ํ˜•ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ -1 ๊ณผ 1 ์‚ฌ์ด์—์„œ ๋น„์„ ํ˜• ํ˜•ํƒœ๋กœ ๋ณ€ํ˜• 
  • ์‹œ๊ทธ๋ชจ์ด๋“œ์˜ ์–‘์ˆ˜๋กœ ํŽธํ–ฅ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์œผ๋‚˜ ๊ธฐ์šธ๊ธฐ ์†Œ๋ฉธ ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์กด์žฌ 

 

(3) ๋ ๋ฃจ ํ•จ์ˆ˜ 

 

  • ์ตœ๊ทผ ํ™œ๋ฐœํžˆ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ 
  • ์ž…๋ ฅ์ด ์Œ์ˆ˜ → 0์„ ์ถœ๋ ฅ 
  • ์ž…๋ ฅ์ด ์–‘์ˆ˜ → ์ˆซ์ž ๊ทธ๋Œ€๋กœ๋ฅผ ์ถœ๋ ฅ (y=x) 
  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„ (๋„ํ•จ์ˆ˜ ๋ฏธ๋ถ„ํ•ด๋„ 1) ํ•™์Šต ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ๊ธฐ์šธ๊ธฐ ์†Œ๋ฉธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ 
  • ๋ ๋ฃจ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์€๋‹‰์ธต์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. 
  • ๋‹จ์  : ์Œ์ˆ˜๊ฐ’์„ ๋ฐ›์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•˜๋ฏ€๋กœ ํ•™์Šต ๋Šฅ๋ ฅ์ด ๊ฐ์†Œ → ๋ฆฌํ‚ค ๋ ๋ฃจ ํ•จ์ˆ˜ ๋“ฑ์žฅ 

 

(4) ๋ฆฌํ‚ค๋ ๋ฃจ ํ•จ์ˆ˜ 

 

  • ์ž…๋ ฅ๊ฐ’์ด ์Œ์ˆ˜์ด๋ฉด 0.0001 ์ฒ˜๋Ÿผ ๋งค์šฐ ์ž‘์€ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜์—ฌ ๋ ๋ฃจ ํ•จ์ˆ˜์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐ 

 

(5) ์†Œํ”„ํŠธ๋งฅ์Šค ํ•จ์ˆ˜ 

 

 

  • ์ž…๋ ฅ๊ฐ’์„ 0~1 ์‚ฌ์ด๋กœ ์ถœ๋ ฅ๋˜๋„๋ก ์ •๊ทœํ™”ํ•˜์—ฌ ์ถœ๋ ฅ๊ฐ’๋“ค์˜ ์ดํ•ฉ์ด ํ•ญ์ƒ 1์ด ๋˜๋„๋ก ํ•œ๋‹ค. 
  • ๋ณดํ†ต ์ถœ๋ ฅ ๋…ธ๋“œ์˜ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. 

 

import torch
import torch.nn as nn

class Net(torch.nn.Module) : 
  def __init__(self, n_feature, n_hidden, n_output) : 
    super(Net, self).__init__() 
    self.hidden = torch.nn.Linear(n_feature, n_hidden) # ์€๋‹‰์ธต 
    self.relu = torch.nn.ReLu(inplace=True) # ๋ ๋ฃจ ํ™œ์„ฑํ™” ํ•จ์ˆ˜ 
    self.out = torch.nn.Linear(n_hidden, n_output) # ์ถœ๋ ฅ์ธต 
    self.softmax = torch.nn.Softmax(dim = n_output) # ์†Œํ”„ํŠธ๋งฅ์Šค ํ™œ์„ฑํ™” ํ•จ์ˆ˜ 

  def forward(self, x) : 
    x = self.hidden(x) 
    x = self.relu(x) # ์€๋‹‰์ธต์„ ์œ„ํ•œ ๋ ๋ฃจ ํ•จ์ˆ˜ 
    x = self.out(x) 
    x = self.softmax(x) # ์ถœ๋ ฅ์ธต์„ ์œ„ํ•œ ์†Œํ”„ํŠธ๋งฅ์Šค ํ™œ์„ฑํ™” ํ•จ์ˆ˜

 

 

๐Ÿ—จ ๋น„์„ ํ˜• ํ•จ์ˆ˜ : ์ง์„ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํ•จ์ˆ˜ 

๐Ÿ—จ ๊ธฐ์šธ๊ธฐ ์†Œ๋ฉธ ๋ฌธ์ œ : ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ๊ณ„์‚ฐ ๊ณผ์ •์—์„œ ๋„ํ•จ์ˆ˜ ๊ฐ’์ด ๊ณ„์† ๊ณฑํ•ด์ง€๋ฉฐ ๊ฐ€์ค‘์น˜ ๊ฒฐ๊ณผ๊ฐ’์ด 0์ด ๋˜์–ด ๋”์ด์ƒ ๊ณ„์‚ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ 

 

 

 

 

โ‘ฃ ์†์‹คํ•จ์ˆ˜ 

 

๐ŸŒ   ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• 

 

•  ํ•™์Šต๋ฅ  learning rate ์™€ ์†์‹คํ•จ์ˆ˜์˜ ์ˆœ๊ฐ„ ๊ธฐ์šธ๊ธฐ๋ฅผ ์ด์šฉํ•ด ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ• 

•  ๋ฏธ๋ถ„์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ์ด์šฉํ•ด ์˜ค์ฐจ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์ด๋ฅผ ์ตœ์†Œํ™” ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ• 

 

E : ์†์‹คํ•จ์ˆ˜

 

๐ŸŒ   ์†์‹คํ•จ์ˆ˜

 

•  ์˜ค์ฐจ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• , ํ•™์Šต์„ ํ†ตํ•ด ์–ป์€ ๋ฐ์ดํ„ฐ์˜ ์ถ”์ •์น˜๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ์™€ ์–ผ๋งˆ๋‚˜ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”์ง€ ํ‰๊ฐ€ํ•˜๋Š” ์ง€ํ‘œ 

•  ๊ฐ’์ด ํด์ˆ˜๋ก ๋งŽ์ด ํ‹€๋ ธ๋‹ค๋Š” ์˜๋ฏธ 

 

 

(1) ์†์‹คํ•จ์ˆ˜ - ํ‰๊ท ์ œ๊ณฑ์˜ค์ฐจ MSE

 

 

ํšŒ๊ท€์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์†์‹คํ•จ์ˆ˜ 

 

https://intrepidgeeks.com/tutorial/implementation-method-of-pytorch-mselos-computing-average

 

 

loss_fn = torch.nn.MSELoss(reduction = 'sum') 
y_pred = model(x) 
loss = loss_fn(y_pred, y)

 

 

(2) ์†์‹คํ•จ์ˆ˜ - ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ ์˜ค์ฐจ 

 

 

• ๋ถ„๋ฅ˜๋ฌธ์ œ์—์„œ ์›ํ•ซ์ธ์ฝ”๋”ฉ์„ ํ–ˆ์„ ๋•Œ์—๋งŒ ์‚ฌ์šฉ

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

 

loss = nn.CrossEntropyLoss()  # โญ
input = torch.randn(5,6, requires_grad = True) # 5x6 ํ–‰๋ ฌ 
# torch.randn : ํ‰๊ท ์ด 0์ด๊ณ  ํ‘œ์ค€ํŽธ์ฐจ๊ฐ€ 1์ธ ๊ฐ€์šฐ์‹œ์•ˆ ์ •๊ทœ๋ถ„ํฌ๋ฅผ ์ด์šฉํ•ด ์ˆซ์ž๋ฅผ ์ƒ์„ฑ

target = torch.empty(3, dtype = torch.long).random_(5) # ๊ธธ์ด๊ฐ€ 3์ธ ๋ฒกํ„ฐ 
# torch.empty.random_() : 5 ์ดํ•˜์˜ ๋žœ๋คํ•œ ๊ฐ’ (float32) ์œผ๋กœ ์ฑ„์›Œ์ง„ ํ…์„œ๋ฅผ ๋ฐ˜ํ™˜

output = loss(input, target) # โญ
output.backward()

 

 

๐Ÿ”น  ๋”ฅ๋Ÿฌ๋‹ ํ•™์Šต 

 

https://thebook.io/080289/ch04/02/02/

 

 

โ‘  ์ˆœ์ „ํŒŒ 

 

โˆ˜  ํ›ˆ๋ จ๋ฐ์ดํ„ฐ๊ฐ€ ๋„คํŠธ์›Œํฌ๊ฒŒ ์ž…๋ ฅ ๋˜์—ˆ์„ ๋•Œ, ์ „์ฒด ์‹ ๊ฒฝ๋ง์„ ๊ต์ฐจํ•ด ๋‚˜๊ฐ€๋Š” ๊ณผ์ • 

โˆ˜  ๋ชจ๋“  ๋‰ด๋Ÿฐ์ด ์ด์ „ ์ธต์˜ ๋‰ด๋Ÿฐ์—์„œ ์ˆ˜์‹ ํ•œ ์ •๋ณด์—, ๊ฐ€์ค‘ํ•ฉ๊ณผ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ๋‹ค์Œ์ธต์˜ ๋‰ด๋Ÿฐ์œผ๋กœ ์ „์†ก 

 

 

 

โ‘ก ์—ญ์ „ํŒŒ 

 

โˆ˜  ์ˆœ์ „ํŒŒ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์ตœ์ข… ์ถœ๋ ฅ์ธต์—์„œ ๋„์ถœ๋œ ์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ๊ฐ’์˜ ์ฐจ์ด๋ฅผ ์†์‹คํ•จ์ˆ˜๋กœ ์ถ”์ •ํ•˜๊ณ , ์†์‹คํ•จ์ˆ˜๊ฐ€ ๊ฒฐ๊ณผ์ ์œผ๋กœ 0์— ๊ฐ€๊น๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์ด ํ›ˆ๋ จ์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ฐ€์ค‘์น˜๋ฅผ ์กฐ์ •ํ•œ๋‹ค. 

โˆ˜  ์˜ค์ฐจ๊ฐ€ ๊ณ„์‚ฐ๋˜๋ฉด ์ถœ๋ ฅ์ธต → ์€๋‹‰์ธต → ์ž…๋ ฅ์ธต ์ˆœ์œผ๋กœ ์ •๋ณด๊ฐ€ ์—ญ์œผ๋กœ ์ „ํŒŒ๋œ๋‹ค. 

 

 

 

๐Ÿ”น  ๋”ฅ๋Ÿฌ๋‹ ํ•™์Šต ์‹œ ๋ฌธ์ œ์  

 

์€๋‹‰์ธต ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ๋ถ„๋ฅ˜๋œ๋‹ค.

 

โ‘  ๊ณผ์ ํ•ฉ 

 

โˆ˜  ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณผํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์—์„œ๋Š” ํ•™์Šต์ด ์ž˜ ์•ˆ๋˜๋Š” ํ˜„์ƒ (๊ฒ€์ฆ ๋ฐ์ดํ„ฐ์—๋Š” ์˜ค์ฐจ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋จ) 

โˆ˜  Solution : Dropout 

 

"ํ•™์Šต" ๊ณผ์ •์—์„œ ์ผ๋ถ€ ๋…ธ๋“œ๋“ค์„ ์ œ์™ธ

 

 

import torch.nn.functional as F 

class DropoutModel(torch.nn.Module) : 
  def __init__(self) : 
    super(DropoutModel, self).__init__() 
    self.layer1 = torch.nn.Linear(784,1200) 
    self.droppout1 = torch.nn.Dropout(0.5) # 50% ๋…ธ๋“œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
    self.layer2 = torch.nn.Linear(1200, 1200) 
    self.dropout2 = torch.nn.Droput(0.5) 
    self.layer3 = torch.nn.Linear(1200,10) 

  def forward(self,x) : 
    x = F.relu(self.layer1(x)) 
    x = self.dropout1(x) 
    x = F.relu(self.layer2(x)) 
    x = self.dropout2(x) 
    return self.layer3(x)

 

๐Ÿ—จ torch.nn.funtional : https://pytorch.org/docs/stable/nn.functional.html 

 

 

 

โ‘ก ๊ธฐ์šธ๊ธฐ ์†Œ๋ฉธ 

 

โˆ˜  ์ถœ๋ ฅ์ธต์—์„œ ์€๋‹‰์ธต์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ์˜ค์ฐจ๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“ค์–ด ํ•™์Šต์ด ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ 

โˆ˜  ๊ธฐ์šธ๊ธฐ๊ฐ€ ์†Œ๋ฉธ๋˜์–ด ํ•™์Šต์ด ๋”๋””๊ฒŒ ์ง„ํ–‰๋˜๋‹ค ์˜ค์ฐจ๋ฅผ ๋” ์ค„์ด์ง€ ๋ชปํ•˜๊ณ  ๊ทธ ์ƒํƒœ๋กœ ์ˆ˜๋ ดํ•˜๋Š” ํ˜„์ƒ 

โˆ˜  Solution : ๋ ๋ฃจ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ 

 

 

 

โ‘ข ์„ฑ๋Šฅ์ด ๋‚˜๋น ์ง€๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ → ๋‹ค์–‘ํ•œ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ๋ฐฉ์‹ ๋“ฑ์žฅ, ์˜ตํ‹ฐ๋งˆ์ด์ €

 

 

โˆ˜  ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์€ ์†์‹คํ•จ์ˆ˜์˜ ๋น„์šฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ์ง€์ ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ์šธ๊ธฐ๊ฐ€ ๋‚ฎ์€ ์ชฝ์œผ๋กœ ๊ณ„์† ์ด๋™ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ, ์ด๋•Œ local minimum ์— ๋น ์ ธ global minimum ์„ ์ฐพ์ง€ ๋ชปํ•ด ์„ฑ๋Šฅ์ด ๋‚˜๋น ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

 

 

 

 

(1) ๋ฐฐ์น˜ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• BGD 

 

•  ์ „์ฒด ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•ด ๊ฐ€์ค‘์น˜๋ฅผ ํŽธ๋ฏธ๋ถ„ ํ•˜๋Š” ๋ฐฉ๋ฒ• 

•  ๊ธฐ์šธ๊ธฐ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•ด ์—…๋ฐ์ดํŠธ 

•  ๋‹จ์  : ํ•™์Šต์ด ์˜ค๋ž˜๊ฑธ๋ฆผ 

 

 

(2) ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• SGD

 

•  ์ž„์˜๋กœ ์„ ํƒํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ• 

•  ์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋น ๋ฅธ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅ 

•  ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝํญ์ด ๋ถˆ์•ˆ์ •ํ•˜๊ณ , ๋•Œ๋ก  ์ •ํ™•๋„๊ฐ€ BGD ๋ณด๋‹ค ๋‚ฎ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ํ•™์Šต ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. 

 

 

 

(3) ๋ฏธ๋‹ˆ๋ฐฐ์น˜ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• 

 

•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋‹ˆ๋ฐฐ์น˜ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋‚˜๋ˆ„๊ณ , ๋ฏธ๋‹ˆ๋ฐฐ์น˜ ํ•œ ๊ฐœ๋งˆ๋‹ค ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ตฌํ•œ ํ›„, ๊ทธ๊ฒƒ์˜ ํ‰๊ท  ๊ธฐ์šธ๊ธฐ๋ฅผ ์ด์šฉํ•ด ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธ ํ•ด์„œ ํ•™์Šตํ•˜๋Š” ๋ฐฉ์‹ 

 

 

•  ํ™•๋ฅ ์  ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•๋ณด๋‹ค ์•ˆ์ •์ ์ด๋ผ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

 

 

from torch.utils.data import Dataset
from torch.utils.data import DataLoader

class CustomDataset(Dataset) : 

  def __init__(self) : 
    self.x_data = [[1,2,3],[4,5,6],[7,8,9]]
    self.y_data = [[12],[18],[11]] 

  def __len__(self) : 
    return len(self.x_data) 
  
  def __getitem__(self,idx) : 
    x = torch.FloatTensor(self.x_data[idx]) 
    y = torch.FloatTensor(self.y_data[idx]) 
    return x, y 

dataset = CustomDataset() 
dataloader = DataLoader(
    dataset, 
    batch_size = 2 # ๋ฏธ๋‹ˆ๋ฐฐ์น˜ํฌ๊ธฐ๋กœ 2์˜ ์ œ๊ณฑ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ 
    suffle = True # ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ๋งˆ๋‹ค ๋žœ๋ค์œผ๋กœ ์„ž์–ด ๋ถˆ๋Ÿฌ์˜ด 
)

 

 

(4) ์˜ตํ‹ฐ๋งˆ์ด์ € 

 

โˆ˜ ํ™•๋ฅ ์  ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ ํญ์ด ๋ถˆ์•ˆ์ •ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•™์Šต ์†๋„์™€ ์šด๋™๋Ÿ‰์„ ์กฐ์ ˆํ•˜๋Š” optimizer ๋ฅผ ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

โœ”  ์†๋„์กฐ์ • : Adagrad, Adadelta, RMSProp 

 

 

 

•  torch.optim.Adagrad(model.parameters(), lr = 0.01)

 

•  torch.optim.Adadelta(model.parameters(), lr = 1.0)

 

•  torch.optim.RMSprop(model.parameters(), lr = 0.01)

 

 

โœ” ์šด๋™๋Ÿ‰ ์กฐ์ • : Momentum, NAG

 

 

•  torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

•  torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9, nesterov = True)

 

 

 

 

โœ” ํ˜ผ์šฉ : Adam 

 

๊ฐ€์žฅ ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๋‹ค.

 

•  torch.optim.Adam(model.parameters(), lr=0.01)

 

 

๐Ÿ”น  ๋”ฅ๋Ÿฌ๋‹์˜ ์ด์  

 

 

โ‘  ํŠน์„ฑ ์ถ”์ถœ  

 

โˆ˜  ์‚ฌ๋žŒ์ด ์ง์ ‘ feature ๋ฅผ ์ •์˜ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ์ „ํ†ต์ ์ธ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ฐฉ๋ฒ•๋ก ๊ณผ ๋‹ฌ๋ฆฌ ๋”ฅ๋Ÿฌ๋‹์—์„œ๋Š” ์Šค์Šค๋กœ ํŠน์„ฑ์„ ์ถ”์ถœํ•ด๋‚ธ๋‹ค. 

 

 

โ‘ก ๋น…๋ฐ์ดํ„ฐ์˜ ํšจ์œจ์  ํ™œ์šฉ 

 

โˆ˜  ๋”ฅ๋Ÿฌ๋‹์€ ๋ฐ์ดํ„ฐ ์‚ฌ๋ก€๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค. 

โˆ˜  ํ™•๋ณด๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ๋‹ค๋ฉด, ๋”ฅ๋Ÿฌ๋‹์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ ๋จธ์‹ ๋Ÿฌ๋‹์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. 

 

 

 

 

3๏ธโƒฃ  ๋”ฅ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 


 

๐Ÿ”น  ์‹ฌ์ธต ์‹ ๊ฒฝ๋ง 

 

โˆ˜  ๋‹ค์ˆ˜์˜ ์€๋‹‰์ธต์„ ํฌํ•จํ•˜๋Š” ์ธ๊ณต์‹ ๊ฒฝ๋ง 

โˆ˜  ์—ฐ์‚ฐ๋Ÿ‰์ด ๋งŽ๊ณ  ๊ธฐ์šธ๊ธฐ ์†Œ๋ฉธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋“œ๋กญ์•„์›ƒ, ๋ ๋ฃจํ•จ์ˆ˜, ๋ฐฐ์น˜ ์ •๊ทœํ™” ๋“ฑ์„ ์ ์šฉํ•œ๋‹ค. 

 

 

๐Ÿ”น  ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง 

 

 

โˆ˜  Convolutional layer + Pooling layer 

โˆ˜  ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ์ข‹์€ ์ธ๊ณต ์‹ ๊ฒฝ๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜ 

โˆ˜  ๊ฐ์ฒด ํƒ์ƒ‰, ๊ฐ์ฒด ์œ„์น˜๋ฅผ ์ฐพ์•„๋‚ด๋Š”๋ฐ ์œ ์šฉํ•œ ์‹ ๊ฒฝ๋ง 

 

 

๐Ÿ”น  ์ˆœํ™˜ ์‹ ๊ฒฝ๋ง 

 

 

 

โˆ˜  ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ (์Œ์•…, ์˜์ƒ ๋“ฑ) ๊ฐ™์€ ์‹œ๊ฐ„ ํ๋ฆ„์— ๋”ฐ๋ผ ๋ณ€ํ™”ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•œ ์ธ๊ณต ์‹ ๊ฒฝ๋ง ์ด๋‹ค. 

โˆ˜  ์ˆœํ™˜ = ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐ = ํ˜„์žฌ ๊ฒฐ๊ณผ๊ฐ€ ์ด์ „ ๊ฒฐ๊ณผ์™€ ์—ฐ๊ด€์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ 

โˆ˜  ๋ฐ์ดํ„ฐ๋Š” ๋™์ ์ด๊ณ  ๊ธธ์ด๊ฐ€ ๊ฐ€๋ณ€์ ์ด๋‹ค. 

โˆ˜  ์–ธ์–ด๋ชจ๋ธ๋ง, ํ…์ŠคํŠธ ์ƒ์„ฑ, ์ž๋™๋ฒˆ์—ญ, ์Œ์„ฑ์ธ์‹, ์ด๋ฏธ์ง€ ์บก์…˜ ์ƒ์„ฑ ๋“ฑ ๋‹ค์–‘ํ•œ ์˜ˆ์‹œ๊ฐ€ ์žˆ๋‹ค. 

 

 

๐Ÿ”น  ์ œํ•œ๋œ ๋ณผ์ธ ๋งŒ ๋จธ์‹  

 

โˆ˜  ๊ฐ€์‹œ์ธต 

 

 

 

 

๐Ÿ”น  ์‹ฌ์ธต ์‹ ๋ขฐ ์‹ ๊ฒฝ๋ง 

 

 

 

 

 

๋จธ์‹ ๋Ÿฌ๋‹๊ณผ ๋”ฅ๋Ÿฌ๋‹์€ ์šฐ๋ฆฌ๊ฐ€ ์–ป๊ณ  ์‹ถ์€ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋‹ค. ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์„ ํƒํ–ˆ์„ ๋•Œ ๋” ์ข‹์€ ์„ฑ๋Šฅ๊ณผ ํšจ๊ณผ๋ฅผ ์–ป์„์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ์‚ฌ๋žŒ๋งŒ์ด ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

728x90

๋Œ“๊ธ€