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

NLP deep learning

by isdawell 2022. 3. 15.
728x90

๐Ÿ‘€ ์œ„ํ‚ค๋…์Šค : https://wikidocs.net/35476 ์˜ ๋”ฅ๋Ÿฌ๋‹ ๊ฐœ์š” ํŒŒํŠธ ๊ณต๋ถ€ํ•œ ๊ฒƒ ์ •๋ฆฌ (์ด๋ฏธ์ง€ ์ถœ์ฒ˜๋Š” ๋ชจ๋‘ ์œ„ํ‚ค๋…์Šค ํ™ˆํŽ˜์ด์ง€)

 

๐Ÿ“Œ ์†Œํ”„ํŠธ๋งฅ์Šค ํšŒ๊ท€ 

 

  • ๋กœ์ง€์Šคํ‹ฑํšŒ๊ท€ : ์ด์ง„ ๋ถ„๋ฅ˜ ๋ฌธ์ œ  VS ์†Œํ”„ํŠธ๋งฅ์Šค ํšŒ๊ท€ : ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ๋ฌธ์ œ 
  • ๋Œ€ํ‘œ์ ์ธ ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ์˜ˆ์ œ : iris ๋ถ“๊ฝƒ ํ’ˆ์ข… ๋ถ„๋ฅ˜ (k=3) 
  • Softmax function 
    • ํด๋ž˜์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ k ๊ฐœ์ผ ๋•Œ, k ์ฐจ์›์˜ ๋ฒกํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํ™•๋ฅ ์„ ์ถ”์ •ํ•œ๋‹ค. 
    • zi : k์ฐจ์›์˜ ๋ฒกํ„ฐ์—์„œ i ๋ฒˆ์งธ ์›์†Œ 
    • pi : i ๋ฒˆ์งธ ํด๋ž˜์Šค๊ฐ€ ์ •๋‹ต์ผ ํ™•๋ฅ  

k ์ฐจ์›์˜ ๋ฒกํ„ฐ๋ฅผ ์ž…๋ ฅ → ๋ฒกํ„ฐ ์›์†Œ ๊ฐ’์„ 0๊ณผ 1 ์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ  → ๋‹ค์‹œ k ์ฐจ์›์˜ ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ 

 

 

 

๐Ÿ‘€ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๋ฒกํ„ฐ(4์ฐจ์›) ์„ ์†Œํ”„ํŠธ๋งฅ์Šค ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๋ฒกํ„ฐ 3์ฐจ์›์œผ๋กœ ์ถ•์†Œํ•˜๋Š” ๋ฐฉ๋ฒ•?

 

๐Ÿ‘‰ ๊ฐ€์ค‘์น˜ ๊ณฑ์„ ์ง„ํ–‰ : ์˜ค์ฐจ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฐ€์ค‘์น˜ ๊ฐ’์œผ๋กœ update ํ•˜๋ฉด์„œ

 

 

 

๐Ÿ‘€ ์˜ค์ฐจ?

 

๐Ÿ‘‰ ์˜ค์ฐจ = (์˜ˆ์ธก๊ฐ’ - ์‹ค์ œ๊ฐ’) ์˜ ์ฐจ์ด

๐Ÿ‘‰ ์‹ค์ œ๊ฐ’์˜ ํ‘œํ˜„ : ์›ํ•ซ์ธ์ฝ”๋”ฉ ๋ฒกํ„ฐ 

 

โž• ์ •์ˆ˜์ธ์ฝ”๋”ฉ์ด ์•„๋‹Œ ์›ํ•ซ ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  : ์›-ํ•ซ ์ธ์ฝ”๋”ฉ์€ ๋ถ„๋ฅ˜ ๋ฌธ์ œ ๋ชจ๋“  ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐ →  ์˜ค์ฐจ๋„ ๊ท ๋“ฑํ•˜๊ฒŒ ๊ณ„์‚ฐ๋จ. BUT ์›ํ•ซ์ธ์ฝ”๋”ฉ์€ ๊ฐ ํด๋ž˜์Šค๋ฅผ ๋ฌด์ž‘์œ„์„ฑ ๊ด€๊ณ„๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์–ด์˜ '์œ ์‚ฌ์„ฑ'์€ ๊ตฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌ

 

 

 

๐Ÿ‘€ ์˜ค์ฐจ ๊ณ„์‚ฐ ๋ฐฉ๋ฒ•? 

 

๐Ÿ‘‰ ๋น„์šฉํ•จ์ˆ˜๋กœ ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ 

 

x : ์ž…๋ ฅ๋ฒกํ„ฐ , W : ๊ฐ€์ค‘์น˜ ํ–‰๋ ฌ, b : ํŽธํ•ญ

 

 

๐Ÿ‘€ ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ ํ•จ์ˆ˜?

 

º y : ์‹ค์ œ๊ฐ’, k : ํด๋ž˜์Šค์˜ ๊ฐœ์ˆ˜ 

º yj : ์‹ค์ œ๊ฐ’ ์›-ํ•ซ ๋ฒกํ„ฐ์˜ j๋ฒˆ์งธ ์ธ๋ฑ์Šค 

º pj : ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๊ฐ€ j ๋ฒˆ์งธ ํด๋ž˜์Šค์ผ ํ™•๋ฅ  

º cost ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•™์Šตํ•œ๋‹ค. 

pj = 1 ๋กœ ์‹ค์ œ๊ฐ’์„ ์ •ํ™•ํ•˜๊ฒŒ ์˜ˆ์ธกํ•œ ๊ฒฝ์šฐ -1*log(1)=0 ์ด ๋˜๋ฏ€๋กœ cost = 0
์ „์ฒด ๋ฐ์ดํ„ฐ n ๊ฐœ์— ๋Œ€ํ•œ ํ‰๊ท  : ์ตœ์ข… ๋น„์šฉ ํ•จ์ˆ˜ 

 

 

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# iris ๋ถ“๊ฝƒ ํ’ˆ์ข… ์˜ˆ์ œ : 3๊ฐœ class, 4๊ฐœ feautures

model = Sequential()
model.add(Dense(3, input_dim=4, activation='softmax'))
# ์ž…๋ ฅ ์ฐจ์› = 4, ์ถœ๋ ฅ ์ฐจ์› = 3, ํ™œ์„ฑํ™” ํ•จ์ˆ˜ = ์†Œํ”„ํŠธ๋งฅ์Šค ํ•จ์ˆ˜ 

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# ์˜ค์ฐจํ•จ์ˆ˜ = ํฌ๋กœ์Šค์—”ํŠธ๋กœํ”ผ ํ•จ์ˆ˜ 
# ์ตœ์ ํ™” = ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์˜ ์ผ์ข…์ธ adam ์„ ์‚ฌ์šฉ 

history = model.fit(X_train, y_train, epochs=200, batch_size=1, validation_data=(X_test, y_test))
# ์ „์ฒด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํ›ˆ๋ จ ํšŸ์ˆ˜ : epoch = 200 


print("\n ํ…Œ์ŠคํŠธ ์ •ํ™•๋„: %.4f" % (model.evaluate(X_test, y_test)[1]))
# ํ…Œ์ŠคํŠธ ์ •ํ™•๋„: 0.9667

 

 

 

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

 

  • ๋‹ค์ˆ˜์˜ ์ž…๋ ฅ์œผ๋กœ๋ถ€ํ„ฐ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ 

x : ์ž…๋ ฅ๊ฐ’, w : ๊ฐ€์ค‘์น˜, y : ์ถœ๋ ฅ๊ฐ’

  • ๊ฐ€์ค‘์น˜์˜ ๊ฐ’์ด ํฌ๋ฉด ํด์ˆ˜๋ก ํ•ด๋‹น ์ž…๋ ฅ๊ฐ’์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 
  • ๊ฐ ์ž…๋ ฅ๊ฐ’์ด ๊ฐ€์ค‘์น˜์™€ ๊ณฑํ•ด์ ธ ๋‰ด๋Ÿฐ์— ์ „์†ก → ๊ฐ ์ž…๋ ฅ๊ฐ’๊ณผ ๊ทธ์— ํ•ด๋‹น๋˜๋Š” ๊ฐ€์ค‘์น˜์˜ ๊ณฑ์˜ ์ „์ฒด ํ•ฉ์ด ์ž„๊ณ„์น˜(threshold)๋ฅผ ๋„˜์œผ๋ฉด ์ถœ๋ ฅ ์‹ ํ˜ธ๋กœ์„œ 1์„ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅ ๐Ÿ‘‰ ๊ณ„๋‹จํ•จ์ˆ˜ (ํ™œ์„ฑํ™” ํ•จ์ˆ˜) 

 

 

  • ์ž„๊ณ„์น˜๋ฅผ ์ขŒ๋ณ€์œผ๋กœ ๋„˜๊ฒจ์„œ ํŽธํ–ฅ b ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ํŽธํ–ฅ b ๋˜ํ•œ ๋”ฅ๋Ÿฌ๋‹์ด ์ตœ์ ์˜ ๊ฐ’์„ ์ฐพ์•„์•ผํ•  ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. 
  • ํ™œ์„ฑํ™” ํ•จ์ˆ˜ : ๋‰ด๋Ÿฐ์—์„œ ์ถœ๋ ฅ๊ฐ’์„ ๋ณ€๊ฒฝ ์‹œํ‚ค๋Š” ํ•จ์ˆ˜ (๊ณ„๋‹จํ•จ์ˆ˜, ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜, ์†Œํ”„ํŠธ๋งฅ์Šค ํ•จ์ˆ˜ ๋“ฑ) 

 

 

1. ๋‹จ์ธต ํผ์…‰ํŠธ๋ก 

 

  • XOR ๋ฌธ์ œ : ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ผ ๋•Œ๋งŒ 1, ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๋ฉด 0์˜ ์ถœ๋ ฅ๊ฐ’์„ ๊ฐ€์ง€๋Š” XOR ๊ฒŒ์ดํŠธ์—์„œ, ์ง์„  ํ•˜๋‚˜๋กœ ํ•˜์–€์ƒ‰ ์›๊ณผ ๊ฒ€์€์ƒ‰ ์›์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ฌธ์ œ. 

 

 

 

2. ๋‹ค์ธต ํผ์…‰ํŠธ๋ก  MLP

 

  • ์ค‘๊ฐ„์— ์ธต (์€๋‹‰์ธต) ์„ ๋” ์ถ”๊ฐ€ํ•œ ํผ์…‰ํŠธ๋ก  ๋ชจ๋ธ 

 

 

  • ์•„๋ž˜์™€ ๊ฐ™์ด ์€๋‹‰์ธต์ด 2๊ฐœ ์ด์ƒ์ธ ์‹ ๊ฒฝ๋ง์„ ์‹ฌ์ธต ์‹ ๊ฒฝ๋ง DNN ์ด๋ผ๊ณ  ํ•œ๋‹ค. 

 

โญ ๋”ฅ๋Ÿฌ๋‹ ํ‚ค์›Œ๋“œ : ํ›ˆ๋ จ(training), ์†์‹คํ•จ์ˆ˜(Loss function), ์˜ตํ‹ฐ๋งˆ์ด์ €(Optimizer) 

 

 

 

 

๐Ÿ“Œ ์ธ๊ณต์‹ ๊ฒฝ๋ง 

 

1. ํ”ผ๋“œ ํฌ์›Œ๋“œ ์‹ ๊ฒฝ๋ง FFNN

 

  • ์˜ค์ง ์ž…๋ ฅ์ธต์—์„œ ์ถœ๋ ฅ์ธต ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ์‚ฐ์ด ์ „๊ฐœ๋˜๋Š” ์‹ ๊ฒฝ๋ง 

 

 

 

  • ↔  ์ˆœํ™˜ ์‹ ๊ฒฝ๋ง RNN : ์€๋‹‰์ธต, ์ถœ๋ ฅ์ธต ์‚ฌ์ด์˜ ๋ฐฉํ–ฅ์„ฑ์ด ์ž์œ ๋กœ์šด ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ 

 

 

 

2. ์ „๊ฒฐํ•ฉ์ธต (Fully-connected layer, FC, Dense Layer) 

 

  • ์–ด๋–ค ์ธต์˜ ๋ชจ๋“  ๋‰ด๋Ÿฐ์ด ์ด์ „ ์ธต์˜ ๋ชจ๋“  ๋‰ด๋Ÿฐ๊ณผ ์—ฐ๊ฒฐ๋ผ ์žˆ๋Š” ์ธต์œผ๋กœ FC ํ˜น์€ Dense layer ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 
  • ์ผ€๋ผ์Šค์—์„œ๋Š” ๋ฐ€์ง‘์ธต์„ ๊ตฌํ˜„ํ•  ๋•Œ Dense() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

3. ํ™œ์„ฑํ™” ํ•จ์ˆ˜ (Activation Function) 

 

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

 

(1) ๊ณ„๋‹จํ•จ์ˆ˜ 

 

- ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ ์ธ๊ณต์‹ ๊ฒฝ๋ง์„ ์ฒ˜์Œ ๋ฐฐ์šธ๋•Œ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ํ™œ์„ฑํ™” ํ•จ์ˆ˜ 

 

(2) ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜ 

 

 

 

 

โญ ์ธ๊ณต์‹ ๊ฒฝ๋ง ํ•™์Šต ๊ณผ์ • 

 

  • ์ˆœ์ „ํŒŒ(forward propagation) ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์˜ˆ์ธก๊ฐ’ ๊ณ„์‚ฐ → ์˜ค์ฐจ (์˜ˆ์ธก๊ฐ’ - ์‹ค์ œ๊ฐ’) ๋ฅผ ์†์‹คํ•จ์ˆ˜๋กœ ๊ณ„์‚ฐ → ์†์‹ค(์˜ค์ฐจ)์˜ ๋ฏธ๋ถ„์„ ํ†ตํ•ด ๊ธฐ์šธ๊ธฐ(gradient) ๋ฅผ ๊ตฌํ•จ → ์—ญ์ „ํŒŒ(backpropagation) ์ˆ˜ํ–‰ : ์ถœ๋ ฅ์ธต์—์„œ ์ž…๋ ฅ์ธต ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€์ค‘์น˜์™€ ํŽธํ–ฅ์„ ์—…๋ฐ์ดํŠธ by ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• 

 

 

์ž…๋ ฅ์ฐจ์›์ด 3, ์ถœ๋ ฅ์ฐจ์›์ด 2์ผ๋•Œ ๊ฐ€์ค‘์น˜ + ํŽธํ–ฅ ํ–‰๋ ฌ ๊ณ„์‚ฐ ๊ณผ์ • : ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ด 8๊ฐœ (w,b)

 

 

 

๐Ÿ‘€ ์‹œ๊ทธ๋ชจ์ด๋“œ์˜ ๋ฌธ์ œ๋Š” ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ตฌํ•  ๋•Œ ๋ฐœ์ƒ 

 

 

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

   

์•ž๋‹จ์—๋Š” ๊ฑฐ์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ์ „ํŒŒ๋ฐ›์„ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ์ฆ‰ w ์—…๋ฐ์ดํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š์•„ ํ•™์Šต์ด ์ง„ํ–‰๋˜๊ธฐ ์–ด๋ ต๋‹ค.

 

 

  • ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์œผ๋กœ ์ธํ•ด ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜์˜ ์€๋‹‰์ธต์—์„œ์˜ ์‚ฌ์šฉ์€ ์ง€์–‘๋œ๋‹ค. ์ฃผ๋กœ ์ด์ง„๋ถ„๋ฅ˜๋ฅผ ์œ„ํ•ด '์ถœ๋ ฅ์ธต'์—์„œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค. 

 

 

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

  • ์ž…๋ ฅ๊ฐ’์„ -1๊ณผ 1 ์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ 

 

 

 

 

  • ์ด ์—ญ์‹œ๋„ -1๊ณผ 1์— ๊ฐ€๊นŒ์šด ์ถœ๋ ฅ๊ฐ’์ด ๋‚˜์˜ฌ๋•Œ ๋ฏธ๋ถ„ ๊ณผ์ •์—์„œ ์†Œ์‹ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธด ํ•˜๋‚˜, ๋ฏธ๋ถ„์˜ ์ตœ๋Œ€๊ฐ’์€ 1๋กœ, 0.25๋ณด๋‹ค๋Š” ํฌ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜๋ณด๋‹จ ํฐ ๋ฏธ๋ถ„๊ฐ’์ด ๋‚˜์˜ค๋ฏ€๋กœ ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค์ด ์ ์€ ํŽธ์ด๋ฉฐ, ์€๋‹‰์ธต์—์„œ ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜๋ณด๋‹ค๋Š” ์„ ํ˜ธ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. 

 

 

 

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

 

  • ์ธ๊ณต์‹ ๊ฒฝ๋ง์˜ ์€๋‹‰์ธต์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” ํ•จ์ˆ˜! 

 

 

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

 

(5) ๋ฆฌํ‚ค ๋ ๋ฃจ 

 

  • dying ReLU ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๋ณ€ํ˜•ํ•จ์ˆ˜ 
  • ์ž…๋ ฅ๊ฐ’์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ์— 0์ด ์•„๋‹ˆ๋ผ 0.001๊ณผ ๊ฐ™์€ ๋งค์šฐ ์ž‘์€ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค๊ณ„ 

 

์ž…๋ ฅ๊ฐ’์ด ์Œ์ˆ˜๋ผ๋„ ๊ธฐ์šธ๊ธฐ๊ฐ€ 0์ด ๋˜์ง€ ์•Š์œผ๋ฉด ReLU๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค. 

 

 

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

 

  • ์ถœ๋ ฅ์ธต์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ (์€๋‹‰์ธต์—์„œ๋Š” ๋ณ„๋กœ ์“ฐ์ด์ง€ ์•Š์Œ) ๋กœ ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ๋ฌธ์ œ์— ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

4. ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ 

 

  • ์ธ๊ณต์‹ ๊ฒฝ๋ง์— ํ–‰๋ ฌ๊ณฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘๋ ฌ ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

4๊ฐœ์˜ ์ƒ˜ํ”Œ์„ ๋™์‹œ์— ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ

 

 

๐Ÿ‘‰ ์ธ๊ณต ์‹ ๊ฒฝ๋ง์˜ 4๊ฐœ์˜ ์ƒ˜ํ”Œ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์ง€๋งŒ ํ•™์Šต ๊ฐ€๋Šฅํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜๋Š” ์—ฌ์ „ํžˆ 8๊ฐœ๋ผ๋Š”์ !

์ด๋ ‡๊ฒŒ ๋‹ค์ˆ˜์˜ ์ƒ˜ํ”Œ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ '๋ฐฐ์น˜ ์—ฐ์‚ฐ' ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 

 

 

์œ„์˜ ์ธ๊ณต์‹ ๊ฒฝ๋ง์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
์ž…๋ ฅ์ธต : 4๊ฐœ์˜ ์ž…๋ ฅ๊ณผ 8๊ฐœ์˜ ์ถœ๋ ฅ
์€๋‹‰์ธต1 : 8๊ฐœ์˜ ์ž…๋ ฅ๊ณผ 8๊ฐœ์˜ ์ถœ๋ ฅ
์€๋‹‰์ธต2 : 8๊ฐœ์˜ ์ž…๋ ฅ๊ณผ 3๊ฐœ์˜ ์ถœ๋ ฅ
์ถœ๋ ฅ์ธต : 3๊ฐœ์˜ ์ž…๋ ฅ๊ณผ 3๊ฐœ์˜ ์ถœ๋ ฅ

 

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()

# 4๊ฐœ์˜ ์ž…๋ ฅ๊ณผ 8๊ฐœ์˜ ์ถœ๋ ฅ
model.add(Dense(8, input_dim=4, activation='relu'))

# ์ด์–ด์„œ 8๊ฐœ์˜ ์ถœ๋ ฅ
model.add(Dense(8, activation='relu'))

# ์ด์–ด์„œ 3๊ฐœ์˜ ์ถœ๋ ฅ
model.add(Dense(3, activation='softmax'))

 

 

๐Ÿ“Œ ๋”ฅ๋Ÿฌ๋‹ ํ•™์Šต ๋ฐฉ๋ฒ• - ์—ญ์ „ํŒŒ ์ดํ•ดํ•˜๊ธฐ 

 

โญ ๋”ฅ๋Ÿฌ๋‹ ํ•™์Šต ํ‚คํฌ์ธํŠธ : ์†์‹คํ•จ์ˆ˜, ์˜ตํ‹ฐ๋งˆ์ด์ €, ์—ํฌํฌ 

 

1. ์†์‹คํ•จ์ˆ˜ 

 

  • ์‹ค์ œ๊ฐ’๊ณผ ์˜ˆ์ธก๊ฐ’์˜ ์ฐจ์ด (= ์˜ค์ฐจ) ๋ฅผ ์ˆ˜์น˜ํ™”ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜ 
  • ์˜ค์ฐจ์™€ ์†์‹คํ•จ์ˆ˜์˜ ๊ฐ’์€ ๋น„๋ก€๊ด€๊ณ„ 
  • ํšŒ๊ท€๋Š” MSE, ๋ถ„๋ฅ˜๋Š” ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ๋ฅผ ์†์‹คํ•จ์ˆ˜๋กœ (์ฃผ๋กœ) ์‚ฌ์šฉํ•œ๋‹ค. 

 

# 1.(ํšŒ๊ท€) MSE
model.compile(optimizer='adam', loss='mse', metrics=['mse'])

# 2.(๋ถ„๋ฅ˜) Binary Cross-Entropy
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])

# 3.(๋ถ„๋ฅ˜) Categorical cross entropy
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])

# 4. (๋ถ„๋ฅ˜) ์›ํ•ซ์ธ์ฝ”๋”ฉ์ด ์•„๋‹Œ ์ •์ˆ˜ ์ธ์ฝ”๋”ฉ์œผ๋กœ ๋ถ„๋ฅ˜ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด 
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['acc'])

 

2. ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• _ batch size 

 

 

 

  • ์˜ตํ‹ฐ๋งˆ์ด์ € : ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜. ์ตœ์ ํ™”๋ž€ ์†์‹คํ•จ์ˆ˜์˜ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

https://dbstndi6316.tistory.com/297

 

 

  • ๋ฐฐ์น˜ : ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘. ์ „์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์กฐ์ •ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋งŒ ๊ฐ€์ง€๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์กฐ์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 
  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์€ ์˜ตํ‹ฐ๋งˆ์ด์ € ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ๋ฐฐ์น˜ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•, SGD, Mini-batch GD ์˜ ์„ธ๋ถ€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜๋‰œ๋‹ค. 

 

 

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

 

  • ์˜ค์ฐจ loss ๋ฅผ ๊ตฌํ•  ๋•Œ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค. 1 epoch (ํ•œ ๋ฒˆ์˜ ํ›ˆ๋ จ์—) ์— ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. 
  • ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ คํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒŒ ์š”๊ตฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋‹จ์  

 

model.fit(X_train, y_train, batch_size=len(X_train))

 

 

(2) SGD : ๋ฐฐ์น˜ ํฌ๊ธฐ๊ฐ€ 1์ธ GD 

 

  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐ์ •์‹œ ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๋žœ๋ค์œผ๋กœ ์„ ํƒํ•œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜์˜ 
  • ๋น ๋ฅธ ์†๋„ , but ๋ณ€๊ฒฝ ํญ์ด ๋ถˆ์•ˆ์ • (์ •ํ™•๋„๊ฐ€ ๋‚ฎ์„ ์ˆ˜ ์žˆ์Œ) 

 

model.fit(X_train, y_train, batch_size=1)

 

 

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

 

  • ์ „์ฒด ๋ฐ์ดํ„ฐ๋‚˜ 1๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๋ง๊ณ , ํŠน์ •ํ•œ ๋ฐฐ์น˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•ด์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋งŒํผ์— ๋Œ€ํ•ด ๊ณ„์‚ฐ์„ ์ง„ํ–‰ํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์กฐ์ •ํ•˜๋Š” ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• 
  • ๋น ๋ฅธ ์†๋„, SGD ๋ณด๋‹ค ์•ˆ์ •์  
  • ๋ณดํ†ต ๋ฐฐ์น˜ ํฌ๊ธฐ๋Š” 2์˜ n์ œ๊ณฑ์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋กœ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋ณดํŽธ์ 

 

model.fit(X_train, y_train, batch_size=128)

 

 

3. ์˜ตํ‹ฐ๋งˆ์ด์ € 

 

(1) Momentum 

 

  • ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์—์„œ ๊ณ„์‚ฐ๋œ ์ ‘์„ ์˜ ๊ธฐ์šธ๊ธฐ์— ํ•œ ์‹œ์  ์ „์˜ ์ ‘์„ ์˜ ๊ธฐ์šธ๊ธฐ๊ฐ’์„ ์ผ์ •ํ•œ ๋น„์œจ๋งŒํผ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฅผ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์— '๊ด€์„ฑ' ์„ ๋”ํ•ด์ค€๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ( = gradient๊ฐ€ 0์ด ๋˜๊ฒŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค ) 
  • ๐Ÿง ๊ด€์„ฑ์„ ๋”ํ•ด์ค€๋‹ค? : ๋กœ์ปฌ ๋ฏธ๋‹ˆ๋ฉˆ์— ๋„๋‹ฌํ•˜์˜€์„ ๋•Œ ๊ธ€๋กœ๋ฒŒ ๋ฏธ๋‹ˆ๋ฉˆ์œผ๋กœ ์ž˜๋ชป ์ธ์‹ํ•˜์—ฌ ํƒˆ์ถœํ•˜์ง€ ๋ชปํ•˜์˜€์„ ์ƒํ™ฉ์—์„œ ๋ชจ๋ฉ˜ํ…€. ์ฆ‰, ๊ด€์„ฑ์˜ ํž˜์„ ๋นŒ๋ฆฌ๋ฉด ๊ฐ’์ด ์กฐ์ ˆ๋˜๋ฉด์„œ ํ˜„์žฌ์˜ ๋กœ์ปฌ ๋ฏธ๋‹ˆ๋ฉˆ์—์„œ ํƒˆ์ถœํ•˜๊ณ  ๊ธ€๋กœ๋ฒŒ ๋ฏธ๋‹ˆ๋ฉˆ ๋‚ด์ง€๋Š” ๋” ๋‚ฎ์€ ๋กœ์ปฌ ๋ฏธ๋‹ˆ๋ฉˆ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

tf.keras.optimizers.SGD(lr=0.01, momentum=0.9)

 

 

(2) Adagrad 

 

  • ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์„œ๋กœ ๋‹ค๋ฅธ ํ•™์Šต๋ฅ ์„ ์ ์šฉ์‹œํ‚ค๋Š” ๊ฒƒ 
  • ๋ณ€ํ™”๊ฐ€ ๋งŽ์€ (์—…๋ฐ์ดํŠธ ๋นˆ๋„์ˆ˜๊ฐ€ ๋งŽ์€) ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•™์Šต๋ฅ ์ด ์ž‘๊ฒŒ ์„ค์ •๋˜๊ณ  ๋ณ€ํ™”๊ฐ€ ์ ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•™์Šต๋ฅ ์„ ๋†’๊ฒŒ ์„ค์ •ํ•œ๋‹ค. 

 

tf.keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)

 

 

(3) RMSprop

  • Adagrad ์˜ ๋‹จ์  (ํŠน์ • ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํ•™์Šต๋ฅ ์ด ์ง€๋‚˜์น˜๊ฒŒ ๋–จ์–ด์ง„๋‹ค๋Š” ๋‹จ์ ) ์„ ๋ณด์™„ํ•œ ์ตœ์ ํ™” ๋ฐฉ์‹ 

 

tf.keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)

 

 

 

(4) Adam 

 

  • RMSprop ๊ณผ Momentum ๋‘ ๊ฐ€์ง€๋ฅผ ํ•ฉ์นœ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉํ–ฅ๊ณผ ํ•™์Šต๋ฅ  ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๊ณ ๋ คํ•œ๋‹ค. 
  • ํ˜„์žฌ ์ œ์ผ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ตœ์ ํ™” ๋ฐฉ์‹์ด๋‹ค. 

 

tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)

 

 

 

 

4. ์—ญ์ „ํŒŒ 

โญ ์˜ค์ฐจ ๊ณ„์‚ฐ ํ›„, ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์„ ์‚ฌ์šฉํ•ด ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ • 

 

https://wikidocs.net/37406 ํ•ด๋‹น ๋งํฌ๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ณ  ์ž์„ธํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ธฐ! (์ •๋ฆฌ PASS)

 

โญ Total error ๊ฐ’์„ ํŠน์ • ๊ฐ€์ค‘์น˜ wi ๋กœ ํŽธ๋ฏธ๋ถ„ ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ (Chain rule) 

(o1 ์€ ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜์˜ ์ถœ๋ ฅ๊ฐ’, z๋Š” ๊ฐ€์ค‘์น˜ w์™€ ์ž…๋ ฅ๊ฐ’ x์˜ ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ

 

โญ ์ธ๊ณต ์‹ ๊ฒฝ๋ง์˜ ํ•™์Šต์€ ์˜ค์ฐจ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฐ€์ค‘์น˜๋ฅผ ์ฐพ๋Š” ๋ชฉ์ ์œผ๋กœ ์ˆœ์ „ํŒŒ์™€ ์—ญ์ „ํŒŒ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ!

 

 

 

 

5. Epochs, Batch size, Iteration 

 

  • ํ•™์Šต : ์‹ค์ œ๊ฐ’๊ณผ ์˜ˆ์ธก๊ฐ’์˜ ์˜ค์ฐจ๋กœ๋ถ€ํ„ฐ, ์˜ตํ‹ฐ๋งˆ์ด์ €๋ฅผ ํ†ตํ•ด ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ • 
  • ๊ธฐ๊ณ„๋Š” ๋˜‘๊ฐ™์€ ๋ฌธ์ œ์ง€์™€ ์ •๋‹ต์ง€๋ฅผ ์ฃผ๋”๋ผ๋„, ํ•™์Šต ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•˜์—ฌ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด์— ๊ด€๋ จ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ epoch, batch size, iteration ! 

 

 

(1) Epochs 

 

  • ์ „์ฒด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ˆœ์ „ํŒŒ์™€ ์—ญ์ „ํŒŒ๊ฐ€ ๋๋‚œ ์ƒํƒœ 
  • ๊ฐ’์ด ๋„ˆ๋ฌด ํฌ๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ๊ณผ์ ํ•ฉ / ๊ณผ์†Œ์ ํ•ฉ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

(2) batch size

 

  • ๋ช‡ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๋‹จ์œ„๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š”์ง€๋ฅผ ๋งํ•œ๋‹ค. 
  • ํ˜„์‹ค์— ๋น„์œ ํ•˜๋ฉด ๋ฌธ์ œ์ง€์—์„œ ๋ช‡ ๊ฐœ์”ฉ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ ๋‚˜์„œ ์ •๋‹ต์ง€๋ฅผ ํ™•์ธํ•˜๋Š๋ƒ์˜ ๋ฌธ์ œ
  • ๋ฐฐ์น˜ ํฌ๊ธฐ ๋‹จ์œ„๋กœ ํ•™์Šตํ•˜๋ฉด์„œ ์ƒ˜ํ”Œ ํฌ๊ธฐ ๋‹จ์œ„๋งˆ๋‹ค ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค. 

 

(3) Iteration (Step) 

 

  • ํ•œ ๋ฒˆ์˜ ์—ํฌํฌ๋ฅผ ๋๋‚ด๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐฐ์น˜์˜ ์ˆ˜ 

 

๐Ÿ“Œ ๊ณผ์ ํ•ฉ์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ• 

 

  • ๊ณผ์ ํ•ฉ : ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์— ํฌํ•จ๋œ ๋…ธ์ด์ฆˆ๊นŒ์ง€ ํ•™์Šตํ•˜์—ฌ, ์ •์ž‘ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ (๊ฒ€์ฆ, ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ) ์—๋Š” ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ 

 

๐Ÿ‘€ ์ธ๊ณต์‹ ๊ฒฝ๋ง์˜ ๊ณผ์ ํ•ฉ์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ• 

 

 

1. ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ๋Š˜๋ฆฌ๊ธฐ 

 

       - ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ ์œผ๋ฉด ํŠน์ • ํŒจํ„ด์ด๋‚˜ ๋…ธ์ด์ฆˆ๊นŒ์ง€ ์‰ฝ๊ฒŒ ํ•™์Šตํ•˜๊ฒŒ ๋จ 

       - ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ๋Š˜๋ฆฌ๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์„ ํ•™์Šตํ•˜์—ฌ ๊ณผ์ ํ•ฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋จ 

       

โœ” Data Augmentation

 

   : ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ธˆ์”ฉ ๋ณ€ํ˜• + ์ถ”๊ฐ€ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์˜๋„์ ์œผ๋กœ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

   : ์ด๋ฏธ์ง€ → ์ด๋ฏธ์ง€๋ฅผ ๋Œ๋ฆฌ๊ฑฐ๋‚˜ ๋…ธ์ด์ฆˆ๋ฅผ ์ถ”๊ฐ€, ์ผ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฆ์‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Œ 

   : ํ…์ŠคํŠธ → ์žฌ๋ฒˆ์—ญ์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์—ญ๋ฒˆ์—ญ (Back Translation) ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ์žˆ์Œ

 

 

2. ๋ชจ๋ธ์˜ ๋ณต์žก๋„ ์ค„์ด๊ธฐ 

 

โœ” ์€๋‹‰์ธต์˜ ์ˆ˜ ํ˜น์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜๋ฅผ ์กฐ์ •ํ•œ๋‹ค. 

 

 

 

3. ๊ฐ€์ค‘์น˜ ๊ทœ์ œ Regularization ์ ์šฉํ•˜๊ธฐ 

 

โœ” ๊ฐ„๋‹จํ•œ ๋ชจ๋ธ = ์ ์€ ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋ชจ๋ธ 

 

โœ” ๊ฐ€์ค‘์น˜ ๊ทœ์ œ 

   โ—พ L1 ๊ทœ์ œ : ๊ฐ€์ค‘์น˜ w๋“ค์˜ ์ ˆ๋Œ€๊ฐ’ ํ•ฉ๊ณ„๋ฅผ ๋น„์šฉ ํ•จ์ˆ˜์— ์ถ”๊ฐ€. w ๋ฅผ 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ •ํ•œ ํŠน์„ฑ์€ ๋ชจ๋ธ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ธฐ๋„ ํ•œ๋‹ค. ์–ด๋–ค ํŠน์„ฑ๋“ค์ด ๋ชจ๋ธ์— ์˜ํ–ฅ์„ ์ฃผ๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์ •ํ™•ํžˆ ํŒ๋‹จํ•˜๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. 

 

   โ—พ L2 ๊ทœ์ œ : ๋ชจ๋“  ๊ฐ€์ค‘์น˜ w๋“ค์˜ ์ œ๊ณฑํ•ฉ์„ ๋น„์šฉ ํ•จ์ˆ˜์— ์ถ”๊ฐ€. w ๋ฅผ 0์— ๊ฐ€๊นŒ์šด ๊ฐ’์œผ๋กœ ๋งŒ๋“ ๋‹ค. L1 ๊ทœ์ œ๋ณด๋‹จ L2 ๊ทœ์ œ์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค. 

 

   โ—พ Lambda  λ : ๊ทœ์ œ์˜ ๊ฐ•๋„๋ฅผ ์ •ํ•˜๋Š” ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ → ๊ฐ’์ด ํฌ๋ฉด ๊ทœ์ œ์˜ ๊ฐ•๋„๊ฐ€ ํผ์„ ์˜๋ฏธ 

 

๋‘ ์‹ ๋ชจ๋‘ ๋น„์šฉ ํ•จ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์ค‘์น˜ w๋“ค์˜ ๊ฐ’์ด ์ž‘์•„์ ธ์•ผ ํ•œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค. 

 

 

 

4. Dropout 

 

  • ํ•™์Šต๊ณผ์ •์—์„œ ์‹ ๊ฒฝ๋ง์˜ ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ• 
  • ๋งค๋ฒˆ ๋žœ๋ค ์„ ํƒ์„ ํ†ตํ•ด ๋‰ด๋Ÿฐ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์‹ ๊ฒฝ๋ง๋“ค์„ ์•™์ƒ๋ธ” ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๋‚ด์–ด ๊ณผ์ ํ•ฉ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. 

๋“œ๋กญ์•„์›ƒ ๋น„์œจ์„ 0.5๋กœ ์„ค์ •ํ•˜์—ฌ ๊ฐ ํ•™์Šต ๊ณผ์ •๋งˆ๋‹ค ๋žœ๋ค์œผ๋กœ ์ ˆ๋ฐ˜์˜ ๋‰ด๋Ÿฐ๋งŒ ์‚ฌ์šฉํ•จ 

 

 

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Dense

max_words = 10000
num_classes = 46

model = Sequential()
model.add(Dense(256, input_shape=(max_words,), activation='relu'))
model.add(Dropout(0.5)) # ๋“œ๋กญ์•„์›ƒ ์ถ”๊ฐ€. ๋น„์œจ์€ 50%
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5)) # ๋“œ๋กญ์•„์›ƒ ์ถ”๊ฐ€. ๋น„์œจ์€ 50%
model.add(Dense(num_classes, activation='softmax'))

 

 

๐Ÿ“Œ ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค๊ณผ ํญ์ฃผ 

 

  • ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค 
    • ๊นŠ์€ ์ธ๊ณต์‹ ๊ฒฝ๋ง์—์„œ์˜ ์—ญ์ „ํŒŒ ๊ณผ์ •์„ ์ง„ํ–‰ํ•  ๋•Œ ์ž…๋ ฅ์ธต์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ๊ธฐ์šธ๊ธฐ๊ฐ€ ์ ์ฐจ์ ์œผ๋กœ ์ž‘์•„์ง€๋Š” ํ˜„์ƒ 
    • ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 
      1. ์€๋‹‰์ธต์—์„œ ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ฒƒ 
      2. ๋Œ€์‹  ์€๋‹‰์ธต์—์„œ๋Š” ReLU ํ•จ์ˆ˜์˜ ๋ณ€ํ˜•๋“ค์„ ์‚ฌ์šฉํ•  ๊ฒƒ 
      3. ๊ฐ€์ค‘์น˜ ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ• : ์„ธ์ด๋น„์–ด ์ดˆ๊ธฐํ™”, He ์ดˆ๊ธฐํ™” 

 

 

  • ๊ธฐ์šธ๊ธฐ ํญ์ฃผ 
    • ๊ธฐ์šธ๊ธฐ๊ฐ€ ์ ์ฐจ ์ปค์ง€๋”๋‹ˆ ๋น„์ •์ƒ์ ์œผ๋กœ ํฐ ๊ฐ’์ด ๋˜๋ฉด์„œ ๋ฐœ์‚ฐํ•˜๋Š” ๊ฒฝ์šฐ 
    • RNN ์—์„œ ์‰ฝ๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 
    • ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
      1. Gradient Clipping : ๊ธฐ์šธ๊ธฐ ๊ฐ’์„ ์ž๋ฅด๋Š” ๊ฒƒ์œผ๋กœ ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•ด ์ž„๊ณ„์น˜ ์ด์ƒ์˜ ๊ธฐ์šธ๊ธฐ๋Š” ๋‚˜์˜ค์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. 

 

 

from tensorflow.keras import optimizers

Adam = optimizers.Adam(lr=0.0001, clipnorm=1.)

 

 

  • ๋ฐฐ์น˜ ์ •๊ทœํ™” 
    • ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค ํ˜น์€ ํญ์ฃผ๋ฅผ ์™„ํ™”์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ• 
    • ์ธ๊ณต ์‹ ๊ฒฝ๋ง์˜ ๊ฐ ์ธต์— ๋“ค์–ด๊ฐ€๋Š” ์ž…๋ ฅ์„ ํ‰๊ท ๊ณผ ๋ถ„์‚ฐ์œผ๋กœ ์ •๊ทœํ™”ํ•˜์—ฌ ํ•™์Šต์„ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ ๋‹ค. 

 

 

 

  • ์ธต ์ •๊ทœํ™” 

 

 

๐Ÿ“Œ MLP ๋กœ ํ…์ŠคํŠธ ๋ถ„๋ฅ˜ํ•˜๊ธฐ 

 

๐Ÿ‘€ 20๊ฐœ ๋‰ด์Šค ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์‹ค์Šต 

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout

def fit_and_evaluate(X_train, y_train, X_test, y_test):
    model = Sequential()
    model.add(Dense(256, input_shape=(vocab_size,), activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(num_classes, activation='softmax'))

    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    model.fit(X_train, y_train, batch_size=128, epochs=5, verbose=1, validation_split=0.1)
    score = model.evaluate(X_test, y_test, batch_size=128, verbose=0)
    return score[1]

 

 

 

๐Ÿ“Œ NNLM ํ”ผ๋“œํฌ์›Œ๋“œ ์‹ ๊ฒฝ๋ง ์–ธ์–ด๋ชจ๋ธ 

 

  • ๊ณผ๊ฑฐ์— ์ž์—ฐ์–ด๋ฅผ ํ•™์Šตํ•  ๋• ํ†ต๊ณ„์ ์ธ ์ ‘๊ทผ์„ ์‚ฌ์šฉํ•˜์˜€์œผ๋‚˜, ์ตœ๊ทผ์—๋Š” ์ธ๊ณต์‹ ๊ฒฝ๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด NLP ์—์„œ ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. 
  • ์‹ ๊ฒฝ๋ง ์–ธ์–ด ๋ชจ๋ธ์˜ ์‹œ์ดˆ์ธ NNLM 

 

โญ ์–ธ์–ด๋ชจ๋ธ : ๋ฌธ์žฅ์— ํ™•๋ฅ ์„ ํ• ๋‹นํ•˜๋Š” ๋ชจ๋ธ 

โญ ์–ธ์–ด ๋ชจ๋ธ๋ง : ์ฃผ์–ด์ง„ ๋ฌธ๋งฅ์œผ๋กœ๋ถ€ํ„ฐ ์•„์ง ๋ชจ๋ฅด๋Š” ๋‹จ์–ด๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๊ฒƒ 

 

  • N-gram ์–ธ์–ด ๋ชจ๋ธ์˜ ํ•œ๊ณ„ : ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€์ธกํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ, ์–ธ์–ด๋ฅผ ์ •ํ™•ํžˆ ๋ชจ๋ธ๋งํ•˜์ง€ ๋ชปํ•˜๋Š” ํฌ์†Œ ๋ฌธ์ œ(sparsity problem) ๋ฐœ์ƒ 
  • ๋‹จ์–ด์˜ ์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ : ๋‹จ์–ด์˜ ์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค๋ฉด, ํ›ˆ๋ จ ์ฝ”ํผ์Šค์— ์—†๋Š” ๋‹จ์–ด ์‹œํ€€์Šค์— ๋Œ€ํ•œ ์˜ˆ์ธก์ด๋ผ๋„ ์œ ์‚ฌํ•œ ๋‹จ์–ด๊ฐ€ ์‚ฌ์šฉ๋œ ๋‹จ์–ด ์‹œํ€€์Šค๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋ณด๋‹ค ์ •ํ™•ํ•œ ์˜ˆ์ธก์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. NNLM ์ด ์ด๋Ÿฌํ•œ ์•„์ด๋””์–ด๋ฅผ ๋ฐ˜์˜ํ•œ ๋ชจ๋ธ! (+์›Œ๋“œ ์ž„๋ฒ ๋”ฉ์˜ ์•„์ด๋””์–ด) 

 

Projection layer ์—๋Š” ํ™œ์„ฑํ™” ํ•จ์ˆ˜๊ฐ€ ์—†๋Š”๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

 

โœ” lookup table ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋œ ๋‹จ์–ด๋ฒกํ„ฐ๊ฐ€ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ! 

 

 

 

โœ” ํˆฌ์‚ฌ์ธต์—์„œ ๋ชจ๋“  ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ ๊ฐ’๋“ค์€ ์—ฐ๊ฒฐ๋œ๋‹ค. (์ด์–ด๋ถ™์ž„) 

 

 

 

 

์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ฝ”ํผ์Šค๋ฅผ ํ•™์Šตํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ˆ˜๋งŽ์€ ๋ฌธ์žฅ์—์„œ ์œ ์‚ฌํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด๋“ค์€ ๊ฒฐ๊ตญ ์œ ์‚ฌํ•œ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ๊ฐ’์„ ์–ป๊ฒŒ๋œ๋‹ค. ๋‹จ์–ด ๊ฐ„ ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ์˜ ์•„์ด๋””์–ด๋Š” Word2Vec, FastText, GloVe ๋“ฑ์œผ๋กœ ๋ฐœ์ „๋˜์–ด์„œ ๋”ฅ ๋Ÿฌ๋‹ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ ๋ชจ๋ธ์—์„œ๋Š” ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ๋˜์—ˆ๋‹ค. 

 

 

โญ NNLM ๋ชจ๋ธ์˜ ์ด์  : ๋‹จ์–ด์˜ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅ, ํฌ์†Œ ๋ฌธ์ œ ํ•ด๊ฒฐ 

โญ ํ•œ๊ณ„ : (๊ณ ์ •๋œ ๋ฒกํ„ฐ ๊ธธ์ด) ์ •ํ•ด์ง„ ์ฃผ๋ณ€๋‹จ์–ด n ๊ฐœ๋งŒ์„ ์ฐธ๊ณ ํ•˜๋Š” ๋ฌธ์ œ (๋ชจ๋“  ์ด์ „ ๋‹จ์–ด๋ฅผ ์ฐธ๊ณ ํ•  ์ˆ˜ ์—†์Œ) ๐Ÿ‘‰ RNN ์„ ํ†ตํ•ด ํ•ด๊ฒฐ 

728x90

๋Œ“๊ธ€