๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ/AI ๐Ÿค–

[2์ฃผ์ฐจ] ํŒŒ๋ผ๋ฉ”ํ„ฐ ํŠœ๋‹ - 'ํŠน์ง•' ์‚ด๋ฆฌ๊ธฐ

by narang111 2021. 10. 2.

์ˆ˜์—…๋ชฉํ‘œ

ํŠน์ง•์„ ์ž˜ ์‚ด๋ ค๋‚ด๋Š” ๋”ฅ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฐ์šฐ๊ณ  ์‹ค์ œ ๋ฐ์ดํ„ฐ์— ํ™œ์šฉํ•ด์„œ ์ทจ์†Œ์œจ, ์ฃผ๊ฐ€ ๋“ฑ์„ ์˜ˆ์ธกํ•œ๋‹ค.

 

- ๋”ฅ๋Ÿฌ๋‹์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ feature extraction ์ด๋‹ค.

์ด๋Ÿฌํ•œ ์žฅ์ ์„ ์˜ˆ์ธก ์‹œ์Šคํ…œ์— ์ ์šฉ์„ ํ•˜๋А๋ƒ!

 

 

ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹

 

ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ๋…

⇒ ์ตœ์ ์˜ ๋ชจ๋ธ ๊ตฌํ˜„์„ ์œ„ํ•ด ํ•™์Šต๋ฅ , ๋ฐฐ์น˜ํฌ๊ธฐ, ํ›ˆ๋ จ๋ฐ˜๋ณตํšŒ์ˆ˜, ๊ฐ€์ค‘์น˜ ์ดˆ๊ธฐํ™”๋ฐฉ๋ฒ• ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•˜๋Š” ๋ณ€์ˆ˜

⇒ ์ผ๋ฐ˜์ ์œผ๋กœ Parameter Tuning ์ด๋ผ๊ณ  ํ•˜์ง€๋งŒ

  ์‹ค์ œ๋กœ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” ๋ชจ๋ธ์ด ํ•™์Šตํ•˜๋Š” ๋ณ€์ˆ˜๋กœ Weight, Bias๋“ฑ์ด๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์„ค์ •ํ•˜๋Š” ๋ณ€์ˆ˜๋“ค์€ ํ•˜์ดํผํŒŒ๋ผ๋ฉ”ํ„ฐ

 

 

ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ชจ๋ธ์ด ์•Œ์•„์„œ ํ•™์Šตํ•˜๋Š” ์•„์ด๋“ค์ด๊ณ 

์šฐ๋ฆฌ๋“ค์€ ์–ด๋–ค ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์–ด๋–ค์‹์œผ๋กœ ๋ณ€ํ˜•ํ•˜๋ฉด ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์•˜๋‹ค.

 

 

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๋Š”?

 

1) ์€๋‹‰์ธต ์ˆ˜์™€ ์€๋‹‰ ๋…ธ๋“œ ์ˆ˜

- input, output layer ์‚ฌ์ด์— ์€๋‹‰์ธต์„ ๋„ฃ์–ด์„œ ์„ ํ˜•๋ชจ๋ธ์ด ์•„๋‹Œ ๋น„์„ ํ˜•๋ชจ๋ธ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ๋” ๋ณต์žก๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ์—ˆ๋‹ค.

- Hidden Layer์˜ ๋…ธ๋“œ์ˆซ์ž๋Š” Input layer ์ˆซ์ž๋ณด๋‹ค ํฐ ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ํšจ๊ณผ์ ์ด๋‹ค.

- ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ๊ฑฐ๋‚˜ ์ ์€ ๋…ธ๋“œ, layer๋Š” Overfitting, Underfitting ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

- overfitting: ์‹œ๊ฐ„์ด๋‚˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์†Œ๋น„๋  ์ˆ˜ ์žˆ๋‹ค.

- Underfitting: ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์•„์ง€๊ณ , ์†๋„๋Š” ๋นจ๋ผ์ง€์ง€๋งŒ ์ œ๋Œ€๋กœ ํ•™์Šต๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

Python ์˜ˆ์‹œ

# ์„ ์–ธ - layer sequence๋ผ๋Š” ๋ชจ๋ธ์„ ์Œ“๋Š”๋‹ค. 
multi_step_model = tf.keras.models.Sequential()

# ๊ฐ layer์˜ ๋…ธ๋“œ ์ˆ˜ - 32
# ์„ ์–ธ - LSTM, LSTM, Dense layer ์ด๋ ‡๊ฒŒ ์„ธ๊ฐ€์ง€ ์ธต์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ฒ ๋‹ค.
multi_step_model.add(tf.keras.layers.LSTM(32,
                                          return_sequences=True,
                                          input_shape=x_train_multi.shape[-2:]))
multi_step_model.add(tf.keras.layers.LSTM(16, activation='relu'))
multi_step_model.add(tf.keras.layers.Dense(72))

- Dense layer๋Š” Hidden layer๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

 

 

2) ๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ

  • ๋ชจ๋ธํ•™์Šต์˜ ํšจ์œจ์„ ์œ„ํ•ด ์ผ์ •ํ•œ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ํ•œ ๋ฒˆ์˜ batch๋งˆ๋‹ค ์ฃผ๋Š” ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ์˜ size
  • ์ „์ฒด Dataset์„ ํ•œ๋ฒˆ์— ํ•™์Šตํ•˜๊ธฐ์— ํ•˜๋“œ์›จ์–ด ์‹œ์Šคํ…œ์— ๋ถ€๋‹ด/ํ•œ๊ณ„๊ฐ€ ๋˜๊ฑฐ๋‚˜ ์‹œ๊ฐ„๋ฌธ์ œ๊ฐ€ ์žˆ์„๋•Œ ⇒์ผ์ •ํ•œ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ•™์Šต
  • Total Data=Batch Size * Mini Batch$
  • ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ, epoch ์ˆ˜ ๋“ฑ์„ ๊ณ ๋ คํ•ด์„œ ์„ค์ •
# ์ผ๋ฐ˜์ ์œผ๋กœ 256์œผ๋กœ ๋ฐฐ์น˜์‚ฌ์ด์ฆˆ ์„ค์ •
# ํ† ํƒˆ๋ฐ์ดํ„ฐ ์ˆซ์ž๊ฐ€ ์ ๋‹ค - 64๋กœ ์กฐ์ ˆ
BATCH_SIZE = 256
BUFFER_SIZE = 10000

# ๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ๋ณ„๋กœ ์…”ํ”Œํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„๊ฒ ๋‹ค.
# ๋ฐฐ์น˜ ์„ค์ •ํ•œ ๊ฒƒ์ด input ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
train_univariate = tf.data.Dataset.from_tensor_slices((x_train_uni, y_train_uni))
train_univariate = train_univariate.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()

val_univariate = tf.data.Dataset.from_tensor_slices((x_val_uni, y_val_uni))
val_univariate = val_univariate.batch(BATCH_SIZE).repeat()

 

 

3) ํ›ˆ๋ จ๋ฐ˜๋ณตํšŸ์ˆ˜(Epoch) ์—ํฌํฌ

  • ํ•™์Šต์˜ ๋ฐ˜๋ณต ์ˆซ์ž๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ณ€์ˆ˜
  • ์ „์ฒด Dataset์„ 1ํšŒ ํ•™์Šต 1 epoch=BatchSize*Iteration
  • ํ•™์Šต ํšจ์œจ์ด ๋–จ์–ด์ง€๋Š” ์‹œ์ ์„ ์ ์ ˆํžˆ ํŒ๋‹จ

 

 

4) ํ™œ์„ฑํ™” ํ•จ์ˆ˜

  • ๊ฐœ๋ณ„ hidden unit์ด๋ผ๋Š” neuron์— ๋“ค์–ด์˜ค๋Š” ์ž…๋ ฅ์‹ ํ˜ธ์˜ ์ด ํ•ฉ์„ ์ถœ๋ ฅ ์‹ ํ˜ธ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์•ผํ•จ
  • ์ด ๋–„ ๋ชจ๋ธ์˜ ๋ณต์žก๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ์„ ํ˜• ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋น„์„ ํ˜• ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผ์‹œ์ผœ์„œ ์ „๋‹ฌ
  • ๊ฐ ํ•จ์ˆ˜ ํŠน์ง• - ์ˆ˜ํ•™์ ์ธ ๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ณ๊ฒŒ๋งŒ ์ฝ๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ

 

ํŒŒ์ด์ฌ ์˜ˆ์‹œ

multi_step_model.add(tf.keras.layers.LSTM(16, activation='relu'))

 

 

 

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ•™์Šต์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ์œ„ํ•ด ๊ณ ๋ คํ•  ๋ถ€๋ถ„!

 

 

 

๋ฐฐ์น˜์ •๊ทœํ™”(Batch Normalization)

 

์ •๊ทœํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ  - ํ•™์Šตํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชจํ˜•์€ ๋น„์„ ํ˜• ๋ชจ๋ธ์—์„œ์˜ ๊ฐ€์žฅ ์ตœ์ €์ ์„ ์ฐพ๋Š” ๊ณผ์ •์ด๋‹ค.

  • ํ•™์Šต์„ ๋” ๋นจ๋ฆฌํ•˜๊ธฐ์œ„ํ•ด ⇒ Local Optimum ๋ฌธ์ œ์— ๋น ์ง€์ง€ ์•Š๊ธฐ์œ„ํ•ด
  • ์ตœ์ €์ ์„ ์ฐพ์•„์•ผ ํ•˜๋Š”๋ฐ ์ „์ฒด์ ์ธ ์ดํ•ด๊ฐ€ ์—†์œผ๋ฉด Global Optimum์„ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  ๋กœ์ปฌ์— ๋จธ๋ฌด๋ฅผ ์ˆ˜ ์žˆ์Œ
  • ์ด๋Ÿด๋•Œ ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ์ข€๋” Local Optimum์—์„œ ์‰ฝ๊ฒŒ ๋น ์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์„œ ํ•™์Šต์„ ๊ฐ€์†ํ™” ์‹œํ‚ฌ์ˆ˜ ์žˆ์Œ

Local Optimum ๋ฌธ์ œ๋ž€ ๊ณจ์งœ๊ธฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ฐ€์žฅ ๊นŠ์ง€ ์•Š๋Š” ๊ณจ์งœ๊ธฐ์— ์žˆ์Œ์—๋„ ํ•™์Šต์ด ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ์ด๋‹ค

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ณจ์งœ๊ธฐ ๊ธฐ์šธ๊ธฐ๋“ค์„ ์ฐŒ๊ทธ๋Ÿฌ๋œจ๋ ค์„œ, ์™„๋งŒํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ ์—ฌ๊ธฐ๋ณด๋‹ค ๋” ์ข‹์€ ๊ณณ์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ?ํ•˜๊ณ  ์–•์€ ๊ณจ์งœ๊ธฐ์—์„œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š”๋ฐ ์ด๊ฒƒ์ด Nomaliztion์˜ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ๋ฐฐ์น˜์ •๊ทœํ™”๊ฐ€ ๋ญ”๋ฐ!

๋ง๊ทธ๋Œ€๋กœ ๋ฐฐ์น˜(๋ฉ์–ด๋ฆฌ์ง„ ๋ฐ์ดํ„ฐ)๋ฅผ ์ •๊ทœํ™” ์‹œ์ผœ์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ˆ˜ํ•™์ ์œผ๋กœ input์„ ํ‰๊ท 0, ํ‘œ์ค€ํŽธ์ฐจ 1์ธ ๋ถ„ํฌ๋กœ normalize ์‹œ์ผœ์ค€๋‹ค.

- Mini-batch ์˜ Feature ๋ณ„ ํ‰๊ท ๊ณผ ๋ถ„์‚ฐ์„ ๊ตฌํ•ด์„œ ํ‘œ์ค€์ •๊ทœ๋ถ„ํฌ๋ฅผ ๊ฐ ๋…ธ๋“œ๋ณ„๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ํ•™์Šต์˜ ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋„์ž…
    1. ํ•™์Šต์†๋„๊ฐ€ ๊ฐœ์„ 
    2. ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์˜ ์˜์กด์„ฑ์ด ์ ์–ด์ง (ํ•™์Šตํ• ๋•Œ๋งˆ๋‹ค ์ถœ๋ ฅ๊ฐ’์„ ์ •๊ทœํ™”ํ•ด์„œ)
    3. ๊ณผ์ ํ•ฉ ์œ„ํ—˜(overfitting)์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
    4. Gradient Vanishing ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
  • ๋‹จ์ 
    1. ๋ฐฐ์น˜์‚ฌ์ด์ฆˆ์— ์˜์กด์ ์ž„ ⇒ ๋„ˆ๋ฌด์ž‘์€ ๋ฐฐ์น˜์‚ฌ์ด์ฆˆ์—์„œ๋Š” ํ•™์Šต์ด ์ž˜ ์•ˆ๋จ
    2. RNN์— ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์›€ ( RNN- sequential ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ)
      ⇒ RNN์€ ๊ฐ ์‹œ์ ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ถ„ํฌ ํ†ต๊ณ„์น˜๋ฅผ ๊ฐ€์ง€๊ธฐ๋•Œ๋ฌธ์— ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์›€
  • ํ™œ์„ฑํ™” ํ•จ์ˆ˜์˜ ํ™œ์„ฑํ™” ๊ฐ’ ํ˜น์€ ์ถœ๋ ฅ๊ฐ’์„ ์ •๊ทœํ™” ํ•˜๋Š” ๊ณผ์ •
    1. Activation Function ์ „/ํ›„์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    2. ์‹ ๊ฒฝ๋ง์˜ ๊ฐ Layer์—์„œ ๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ๋ฅผ ์ •๊ทœํ™” ํ•˜๋Š” ๊ณผ์ •
    3. ์ „์ฒดdata์— ๋Œ€ํ•œ ํ‰๊ท ๋ถ„์‚ฐ๊ณผ ๊ฐ’์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
    4. ์ž…๋ ฅ๋ถ„ํฌ๊ฐ€ ์ผ์ •ํ•ด์ง€๊ณ  ํ•™์Šต๋ฅ ์„ ๊ฐœ์„ ์‹œํ‚ค๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์Œ

 

 

์ธต ์ •๊ทœํ™”

๋ฐฐ์น˜ ์ •๊ทœํ™”: ์ƒ˜ํ”Œ๋งํ–ˆ๋˜ ๋ฐฐ์น˜๋“ค ์ž์ฒด์˜ ์ •๊ทœํ™” (๋“ค์–ด์˜ค๋Š” ๋ฐฐ์น˜๋“ค๋งˆ๋‹ค ์ •๊ทœํ™”์‹œ์ผœ์คŒ)

์ธต ์ •๊ทœํ™”: ์ธต ๋‹จ์œ„์˜ ์ •๊ทœํ™”(๋ ˆ์ด์–ด์— ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ž ํ‰๊ท , ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ ๊ตฌํ•ด์„œ ์ฐŒ๊ทธ๋ŸฌํŠธ๋ฆฐ๋‹ค)

               - layer ๋ณ„๋กœ ์ผ์–ด๋‚œ๋‹ค. ๊ฐ ๋ฐฐ์น˜์— ์žˆ๋Š” ๋ชจ๋“  feature๋“ค์˜ ํ‰๊ท ๊ณผ ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

               - ๊ฐ hidden node์˜ feature ๋ณ„ ๋ถ„์‚ฐ๊ณผ ํ‰๊ท ์ด ์•„๋‹Œ layer ์ „์ฒด์˜ ํ‰๊ท ๊ณผ ๋ถ„์‚ฐ์„ Normalize

               - RNN ์ ์šฉ์ด ํž˜๋“ค๋‹ค, ๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ์˜ ์˜ํ–ฅ์ด ํฌ๋‹ค ๋ผ๋Š” ๋‹จ์ ์„ ๋ณด์™„

 

์‚ฌ์šฉ์˜ˆ์‹œ

layer.laterNormalization ํ•ด์„œ ํ•œ์ธต ์Œ“์•„์ฃผ๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ์•Œ์•„์„œ ๋…ธ๋ฉ€๋ผ์ด์ฆˆ ํ•ด์ค€๋‹ค.