-
โฑ ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ 11์ฅ ์ฌ์ธต ์ ๊ฒฝ๋ง ํ๋ จ โฑ๐ฎ ์ด๊ฒ์ ๊ฒ ๊ณต๋ถ/โฉ ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ 2026. 1. 26. 14:43
์ฌ์ธต ์ ๊ฒฝ๋ง ํ๋ จ ์ค ๋ง์ฃผํ ์ ์๋ ๋ฌธ์
- ์ฌ์ธต ์ ๊ฒฝ๋ง์ ์ถ๋ ฅ ์ธต์์ ๋ฉ์ด์ง์๋ก ๊ทธ๋ ์ด๋์ธํธ๊ฐ ์ ์ ๋ ์์์ง๊ฑฐ๋ ์ปค์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. -> ํ์ ์ธต์ ํ๋ จํ๊ธฐ ์ด๋ ค์์ง๋ค.
- ๋๊ท๋ชจ ์ ๊ฒฝ๋ง์ ์ํ ํ๋ จ ๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ์ง ์๊ฑฐ๋ ๋ ์ด๋ธ์ ๋ง๋๋ ์์ ์ ๋น์ฉ์ด ๋๋ฌด ๋ง์ด ๋ค ์ ์๋ค.
- ํ๋ จ์ด ๊ทน๋จ์ ์ผ๋ก ๋๋ ค์ง ์ ์๋ค.
- ์๋ฐฑ๋ง ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง ๋ชจ๋ธ์ ํ๋ จ ์ธํธ์ ๊ณผ๋์ ํฉ๋ ์ํ์ด ๋งค์ฐ ํฌ๋ค. ํ๋ จ ์ํ์ด ์ถฉ๋ถํ์ง ์๊ฑฐ๋ ์ก์์ด ๋ง์ ๊ฒฝ์ฐ์ ๊ทธ๋ ๋ค.
11.1 ๊ทธ๋ ์ด๋์ธํธ ์์ค๊ณผ ํญ์ฃผ ๋ฌธ์
์ญ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ ๋ฒ์จฐ ๋จ๊ณ๋ ์ถ๋ ฅ ์ธต์์ ์ ๋ ฅ ์ธต์ผ๋ก ์ค์ฐจ ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ์ ํํ๋ฉด์ ์งํ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ด ์ ๊ฒฝ๋ง์ ๋ชจ๋ ํ๋ผ๋ฏธํฐ์ ๋ํ ์ค์ฐจ ํจ์์ ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ๊ณ์ฐํ๋ฉด ๊ฒฝ์ฌ ํ๊ฐ๋ฒ ๋จ๊ณ์์ ์ด ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ์์ ํ๋ค.
๊ทธ๋ ์ด๋์ธํธ ์์ค : ์๊ณ ๋ฆฌ์ฆ์ด ํ์ ์ธต์ผ๋ก ์งํ๋ ์๋ก ๊ทธ๋ ์ด๋์ธํธ๊ฐ ์ ์ ์์์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ด ํ์ ์ธต์ ์ฐ๊ฒฐ ๊ฐ์ค์น๋ฅผ ๋ณ๊ฒฝ๋์ง ์์ ์ฑ๋ก ๋๋ค๋ฉด ํ๋ จ์ด ์ข์ ์๋ฃจ์ ์ผ๋ก ์๋ ด๋์ง ์๋๋ค.
๊ทธ๋ ์ด๋์ธํธ ํญ์ฃผ : ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ทธ๋ ์ด๋์ธํธ๊ฐ ์ ์ ์ปค์ ธ์ ์ฌ๋ฌ ์ธต์ด ๋น์ ์์ ์ผ๋ก ํฐ ๊ฐ์ค์น๋ก ๊ฐฑ์ ๋๋ฉด ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ์ฐํ๋ค.
์ํ ์ ๊ฒฝ๋ง์์ ์ฃผ๋ก ๋ํ๋๋ค.
์ธต๋ง๋ค ํ์ต ์๋๊ฐ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ์์ ํ ๊ทธ๋ ์ด๋์ธํธ๋ ์ฌ์ธต ์ ๊ฒฝ๋ง ํ๋ จ์ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.
์๊ทธ๋ชจ์ด๋ ํ์ฑํ ํจ์์์ ์ ๋ ฅ์ด ์์๋ ์์๋ก ์ปค์ง๋ฉด 0์ด๋ 1๋ก ์๋ ดํด์ ๊ธฐ์ธ๊ธฐ๊ฐ 0์ ๋งค์ฐ ๊ฐ๊น์์ง๋ค.
-> ์ญ์ ํ๊ฐ ๋ ๋ ์ฌ์ค์ ์ ๊ฒฝ๋ง์ผ๋ก ์ ํํ ๊ทธ๋ ์ด๋์ธํธ๊ฐ ๊ฑฐ์ ์๊ณ , ์กฐ๊ธ ์๋ ๊ทธ๋ ์ด๋์ธํธ๋ ์ต์์ ์ธต์์๋ถํฐ ์ญ์ ํ๊ฐ ์งํ๋๋ฉด์ ์ ์ฐจ ์ฝํด์ ธ์ ์ค์ ๋ก ์๋์ชฝ ์ธต์๋ ์๋ฌด๊ฒ๋ ๋๋ฌํ์ง ์๊ฒ ๋๋ค.

11.1.1 ๊ธ๋ก๋ฟ๊ณผ He ์ด๊ธฐํ
์์ธกํ ๋๋ ์ ๋ฐฉํฅ์ผ๋ก, ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ์ญ์ ํํ ๋๋ ์ญ๋ฐฉํฅ์ผ๋ก ์๋ฐฉํฅ ์ ํธ๊ฐ ์ ์ ํ๊ฒ ํ๋ฌ์ผ ํ๋ค.
์ ํธ๊ฐ ์ฃฝ๊ฑฐ๋, ํญ์ฃผํ๊ฑฐ๋, ์๋ฉธํ์ง ์์์ผ ํ๋ค.
์ ์ ํ ์ ํธ๊ฐ ํ๋ฅด๊ธฐ ์ํด์๋ ๊ฐ ์ธต์ ์ถ๋ ฅ์ ๋ํ ๋ถ์ฐ์ด ์ ๋ ฅ์ ๋ํ ๋ถ์ฐ๊ณผ ๊ฐ์์ผ ํ๋ค.
์ญ๋ฐฉํฅ์์ ์ธต์ ํต๊ณผํ๊ธฐ ์ ๊ณผ ํ์ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์ฐ์ด ๋์ผํด์ผ ํ๋ค.
์ธต์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ์ฐ๊ฒฐ ๊ฐ์(์ด ๊ฐ์๋ฅผ ์ธต์ ํฌ-์ธ๊ณผ ํฌ-์์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.)๊ฐ ๊ฐ์ง ์๋ค๋ฉด ์ด ๋ ๊ฐ์ง๋ฅผ ๋ณด์ฅํ ์ ์๋ค.
ํ์ง๋ง ๊ฐ ์ธต์ ์ฐ๊ฒฐ ๊ฐ์ค์น๋ฅผ ๋๋ค์ผ๋ก ์ด๊ธฐํํ๋ฉด ํด๊ฒฐ๋๋ค.
์ด ์์์ fan_avg = (fan_in + fan_out) / 2์ด๋ค.
[๊ธ๋ก๋ฟ ์ด๊ธฐํ / ์ธ์ด๋น์ด ์ด๊ธฐํ]

[๋ฅด์ฟค ์ด๊ธฐํ]
์์ ์์์ fan_avg๋ฅผ fan_in์ผ๋ก ๋ฐ๊พผ ๊ฒ์ด๋ค.
fan_in = fan_out์ด๋ฉด ๋ฅด์ฟค ์ด๊ธฐํ๋ ๊ธ๋ก๋ฟ ์ด๊ธฐํ์ ๋์ผํ๋ค.
๊ธ๋ก๋ฟ ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ จ ์๋๋ฅผ ๋์ผ ์ ์๋ค.
๋ฅด์ฟค ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ SELU ํ์ฑํ ํจ์๋ ์ ๊ท ๋ถํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
[He ์ด๊ธฐํ / ์นด์ด๋ฐ ์ด๊ธฐํ]
ReLU ํ์ฑํ ํจ์์ ๊ทธ ๋ณํ์ ์ํ ์ด๊ธฐํ ์ ๋ต์ด๋ค.
[ํ์ฑํ ํจ์๋ณ ์ด๊ธฐํ ์ ๋ต]

์ผ๋ผ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ท ๋ฑ ๋ถํฌ์ ๊ธ๋ก๋ฟ ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ค.
import tensorflow as tf dense = tf.keras.layers.Dense(50, actiation="relu", kernel_initializer="he_normal")์ธต์ ๋ฐ๊ฟ ๋ kernel_initializer="he_uniform"์ด๋ kernel_initializer="he_normal"๋ก ๋ฐ๊พธ์ด He ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ค๋ฅธ ์ด๊ธฐํ ๋ฐฉ๋ฒ์ ์ํด VarianceScaling์ ์ฌ์ฉํ ์ ์๋ค.
he_avg_init = tf.keras.initializers.VarianceScaling(scale=2., mode="fan_avg", distribution="uniform") dense = tf.keras.layers.Dense(50, activation="sigmoid", kernel_initializer=he_avg_init)๊ท ๋ฑ ๋ถํฌ์ fan_in ๋์ fan_out์ ๊ธฐ๋ฐ์ผ๋ก He ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋์ด๋ค.
11.1.2 ๊ณ ๊ธ ํ์ฑํ ํจ์
ํ์ฑํ ํจ์๋ฅผ ์๋ชป ์ฌ์ฉํ๋ฉด ์์นซ ๊ทธ๋ ์ด๋์ธํธ์ ์์ค์ด๋ ํญ์ฃผ๋ก ์ด์ด์ง ์ ์๋ค.
๋ด๋ฐ์ ๋ฐฉ์๊ณผ ๋น์ทํ ์๊ทธ๋ชจ์ด๋ ํ์ฑํ ํจ์๊ฐ ์๋ ๋ค๋ฅธ ํ์ฑํ ํจ์๊ฐ ์ฌ์ธต ์ ๊ฒฝ๋ง์์ ํจ์ฌ ๋ ์ ์๋ํ๋ค.
ํนํ ReLU ํจ์๋ ํน์ ์์ซ๊ฐ์ ์๋ ดํ์ง ์๊ณ ๊ณ์ฐ๋ ๋น ๋ฅด๋ค.
ReLU ํจ์์๋ ํ๋ จํ๋ ๋์ ์ผ๋ถ ๋ด๋ฐ์ด 0 ์ด์ธ์ ๊ฐ์ ์ถ๋ ฅํ์ง ์๋ ๋ฌธ์ (์ฃฝ์ ReLU)๊ฐ ์๋ค.
ํฐ ํ์ต๋ฅ ์ ์ฌ์ฉํ๋ฉด ์ ๊ฒฝ๋ง์ ๋ด๋ฐ ์ ๋ฐ์ด ์ฃฝ์ด ์๊ธฐ๋ ํ๋ค.
๋ด๋ฐ์ ๊ฐ์ค์น๊ฐ ๋ฐ๋์ด ํ๋ จ ์ธํธ์ ์๋ ๋ชจ๋ ์ํ์ ๋ํด ReLU ํจ์์ ์ ๋ ฅ์ด(๋ด๋ฐ ์ ๋ ฅ์ ๊ฐ์ค์น ํฉ์ ํธํฅ์ ๋ํ ๊ฒ) ์์๊ฐ ๋๋ฉด ๋ด๋ฐ์ด ์ฃฝ๊ฒ ๋๋ค.
๊ฐ์ค์น ํฉ์ด ์์์ด๋ฉด ReLU ํจ์์ ๊ทธ๋ ์ด๋์ธํธ๊ฐ 0์ด ๋๋ฏ๋ก ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ด ๋์ด์ ์๋ํ์ง ์๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด LeakyReLU ๊ฐ์ ReLU ํจ์์ ๋ณํ์ ์ฌ์ฉํ๋ค.
LeakyReLU
LeakyReLU ํ์ฑํ ํจ์๋ LeakyReLU_α(z) = max(αz, z)๋ก ์ ์๋๋ค.
ํ์ดํผํ๋ผ๋ฏธํฐ α๊ฐ ์ด ํจ์๊ฐ ์๋ ์ ๋๋ฅผ ๊ฒฐ์ ํ๋ค.
์๋ ์ ๋๋ z < 0์ผ ๋ ์ด ํจ์์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๋งํ๋ค.
z < 0์ผ ๋ ๊ธฐ์ธ๊ธฐ๊ฐ LeakyReLU๋ฅผ ์ ๋ ์ฃฝ์ง ์๊ฒ ๋ง๋ค์ด์ค๋ค.
LeakyReLU๊ฐ ReLU๋ณด๋ค ํญ์ ์ฑ๋ฅ์ด ๋๋ค.
α=0.2(๋ง์ด ํต๊ณผ)๋ก ํ๋ ๊ฒ์ด α=0.01(์กฐ๊ธ ํต๊ณผ)๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ๋ด๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
ํ๋ จํ๋ ๋์ ์ฃผ์ด์ง ๋ฒ์์์ α๋ฅผ ๋๋ค์ผ๋ก ์ ํํ๊ณ ํ ์คํธ ์์๋ ํ๊ท ์ ์ฌ์ฉํ๋ RReLU๋ ํ๊ฐํ๋ค.
์ด ํจ์๋ ๊ฝค ์ ์๋ํ์ผ๋ฉฐ ํ๋ จ ์ธํธ์ ๊ณผ๋์ ํฉ ์ํ์ ์ค์ด๋ ๊ท์ ์ ์ญํ ์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์๋ค.
α๊ฐ ํ๋ จ๋๋ ๋์ ํ์ต๋๋ PReLU๋ ๋น๊ตํ๋ค.
ํ์ดํผํ๋ผ๋ฏธํฐ๊ฐ ์๋๊ณ ๋ค๋ฅธ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ญ์ ํ์ ์ํด ๋ณ๊ฒฝ๋๋ค.
์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ท๋ชจ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ์์๋ ReLU๋ณด๋ค ์ฑ๋ฅ์ด ํฌ๊ฒ ์์์ง๋ง, ์๊ท๋ชจ ๋ฐ์ดํฐ์ ์์๋ ํ๋ จ ์ธํธ์ ๊ณผ๋์ ํฉ๋ ์ํ์ด ์๋ค.

ELU์ SELU
์ผ๋ผ์ค๋ tf.keras.layers ํจํค์ง ์๋ LeakyReLU์ PReLU ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค.
๋ค๋ฅธ ReLU ๋ณํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก He ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
leaky_relu = tf.keras.layers.LeakyReLU(alpha=0.2) # alpha์ ๊ธฐ๋ณธ๊ฐ์ 0.3 dense = tf.keras.layers.Dense(50, activation=leaky_relu, kernel_initializer="he_normal")model = tf.keras.models.Sequential([ [...] # ๋ค๋ฅธ ์ธต tf.keras.layers.Dense(50, kernel_initializer="he_normal"), # ํ์ฑํ ํจ์ ์์ tf.keras.layers.LeakyReLU(alpha=0.2), # ๋ณ๋์ ํ์ฑํ ํจ์ ์ธต [...] # ๋ค๋ฅธ ์ธต ])LeakyReLU๋ฅผ ๋ณ๋์ ์ธต์ผ๋ก ๋ชจ๋ธ์ ์ถ๊ฐํ ์๋ ์๋ค.
ReLU, LeakyReLU, PReLU ๋ชจ๋ ๋ํจ์๊ฐ z = 0์์ ๊ฐ์๊ธฐ ๋ฐ๋๋ ํจ์์ด๋ค.
์ด๋ฐ ์ข ๋ฅ์ ๋ถ์ฐ์์ฑ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ต์ ์ ์์ ์ง๋ํ๊ฒ ๋ง๋ค๊ฑฐ๋ ์๋ ด์ ๋๋ฆฌ๊ฒ ๋ง๋ค ์ ์๋ค.
ReLU ํ์ฑํ ํจ์์ ๋ถ๋๋ฌ์ด ๋ณํ์๋ ELU์ SELU๊ฐ ์๋ค.
[ELU ํ์ฑํ ํจ์]

- z < 0์ผ ๋ ์์ซ๊ฐ์ด ๋ค์ด์ค๋ฏ๋ก ํ์ฑํ ํจ์์ ํ๊ท ์ถ๋ ฅ์ด 0์ ๋ ๊ฐ๊น์์ง๋ค. ์ด๋ ๊ทธ๋ ์ด๋์ธํธ ์์ค ๋ฌธ์ ๋ฅผ ์ํํด์ค๋ค.
ํ์ดํผํ๋ผ๋ฏธํฐ α๋ z๊ฐ ํฐ ์์ซ๊ฐ์ผ ๋ ELU๊ฐ ์๋ ดํ ๊ฐ์ ์ญ์๋ฅผ ์ ์ํ๋ค.
๋ณดํต 1๋ก ์ค์ ํ์ง๋ง ๋ค๋ฅธ ํ์ดํผํ๋ผ๋ฏธํฐ์ฒ๋ผ ๋ณ๊ฒฝํ ์ ์๋ค.
- z < 0์ด์ด๋ ๊ทธ๋ ์ด๋์ธํธ๊ฐ 0์ด ์๋๋ฏ๋ก ์ฃฝ์ ๋ด๋ฐ์ ๋ง๋ค์ง ์๋๋ค.
- α = 1์ด๋ฉด ์ด ํจ์๋ z = 0์์ ๊ธ๊ฒฉํ ๋ณ๋ํ์ง ์์ผ๋ฏ๋ก z = 0์ ํฌํจํด ๋ชจ๋ ๊ตฌ๊ฐ์์ ๋งค๋๋ฌ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์๋๋ฅผ ๋์ฌ์ค๋ค.
์ผ๋ผ์ค์์ ELU๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด activation="elu"๋ก ์ง์ ํ๋ค.
๋ค๋ฅธ ReLU ๋ณํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก He ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
ReLU๋ ๊ทธ ๋ณํ๋ค๋ณด๋ค ๊ณ์ฐ์ด ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
ํ๋ จํ๋ ๋์์๋ ์๋ ด ์๋๊ฐ ๋นจ๋ผ์ ๋๋ฆฐ ๊ณ์ฐ์ด ์์๋ ์ ์์ง๋ง ํ ์คํธ ์์๋ ELU๋ฅผ ์ฌ์ฉํ ๋คํธ์ํฌ๊ฐ ReLU๋ฅผ ์ฌ์ฉํ ๋คํธ์ํฌ๋ณด๋ค ๋๋ฆฌ๋ค.

SELU ํ์ฑํ ํจ์๋ ์ค์ผ์ผ์ด ์กฐ์ ๋ ELU ํ์ฑํ ํจ์์ ๋ณํ์ด๋ค.
์์ ์ฐ๊ฒฐ ์ธต๋ง ์์์ ์ ๊ฒฝ๋ง(MLP)์ ๋ง๋ค๊ณ ๋ชจ๋ ์๋ ์ธต์ด SELU ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋คํธ์ํฌ๊ฐ ์๊ธฐ ์ ๊ทํ๋๋ค.
ํ๋ จํ๋ ๋์ ๊ฐ ์ธต์ ์ถ๋ ฅ์ด ํ๊ท 0๊ณผ ํ์ค ํธ์ฐจ 1์ ์ ์งํ๋ ๊ฒฝํฅ์ด ์๋ค.
์ด๋ ๊ทธ๋ ์ด๋์ธํธ ์์ค๊ณผ ํญ์ฃผ ๋ฌธ์ ๋ฅผ ๋ง์์ค๋ค.
๊ทธ ๊ฒฐ๊ณผ๋ก SELU ํ์ฑํ ํจ์๋ MLP(ํนํ ์์ฃผ ๊น์ ๋คํธ์ํฌ)์์ ๋ค๋ฅธ ํ์ฑํ ํจ์๋ณด๋ค ๋์ ์ฑ๋ฅ์ ๋ธ๋ค.
์ผ๋ผ์ค์์ ์ฌ์ฉํ๋ ค๋ฉด activation="selu"๋ก ์ง์ ํ๋ฉด ๋๋ค.
[์๊ธฐ ์ ๊ทํ๊ฐ ์ผ์ด๋๊ธฐ ์ํ ์กฐ๊ฑด]
- ์ ๋ ฅ ํน์ฑ์ ๋ฐ๋์ ํ์คํ(ํ๊ท 0, ํ์ค ํธ์ฐจ 1)๋์ด์ผ ํ๋ค.
- ๋ชจ๋ ์ฝ๋ ์ธต์ ๊ฐ์ค์น๋ ๋ฅด์ฟค ์ ๊ท ๋ถํฌ ์ด๊ธฐํ๋ก ์ด๊ธฐํ๋์ด์ผ ํ๋ค.
์ผ๋ผ์ค์์๋ initializer="lecun_normal"๋ก ์ค์ ํ๋ค.
- ์๊ธฐ ์ ๊ทํ๋ ์ผ๋ฐ์ ์ธ MLP์์๋ง ๋ณด์ฅ๋๋ค.
์ํ ์ ๊ฒฝ๋ง์ด๋ ์คํต ์ฐ๊ฒฐ(์์ด๋ & ๋ฅ ๋คํธ์ํฌ์์ ๊ฑด๋๋ฐ์ด ์ฐ๊ฒฐ๋ ์ธต)๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ์กฐ์ SELU๋ฅผ ์ฌ์ฉํ๋ฉด ELU ํจ์๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋์ง ์์ ๊ฒ์ด๋ค.
- l1,l2 ๊ท์ , ๋งฅ์ค-๋ ธ๋ฆ, ๋ฐฐ์น ์ ๊ทํ, ๋๋กญ์์๊ณผ ๊ฐ์ ๊ท์ ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
GELU, Swish, Mish
GELU๋ ReLU ํ์ฑํ ํจ์์ ๋ถ๋๋ฌ์ด ๋ณํ์ด๋ค.

Φ๋ ํ์ค ๊ฐ์ฐ์ค ๋์ ๋ถํฌ ํจ์์ด๋ค.
Φ(z)๋ ํ๊ท ์ด 0์ด๊ณ ๋ถ์ฐ์ด 1์ธ ์ ๊ท ๋ถํฌ์์ ๋๋คํ๊ฒ ์ํ๋งํ ๊ฐ์ด z๋ณด๋ค ์์ ํ๋ฅ ์ ํด๋นํ๋ค.
์ ๋ ฅ z๊ฐ ํฐ ์์์ผ ๋ 0์ ๊ฐ๊น์์ง๊ณ z๊ฐ ํฐ ์์์ผ ๋ z์ ๊ฐ๊น์์ง๋ค.
์์์์ ๋ชจ๋ ํ์ฑํ ํจ์๊ฐ ๋ณผ๋กํ ๋จ์กฐ ํจ์์ด์ง๋ง GELU ํ์ฑํ ํจ์๋ ์ผ์ชฝ์์ ์ง์ ์ผ๋ก ์์ํด์ ์๋๋ก ๊ตฌ๋ถ๋ฌ์ง๋ค๊ฐ -0.17์์ ์ ์ ์ ๋๋ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ์์นํ์ฌ ์ค๋ฅธ์ชฝ ์๋ก ์ง์งํ๋ ๊ฒ์ผ๋ก ๋๋๋ค.
-> ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ด ๋ณต์กํ ํจํด์ ํ์ตํ๊ธฐ ์ฝ๋ค.
ํ์ง๋ง ๊ณ์ฐ๋์ด ์กฐ๊ธ ๋ ๋ง์ผ๋ฉฐ ์ฑ๋ฅ ํฅ์์ด ์ถ๊ฐ ๋น์ฉ์ ์ ๋นํํ๊ธฐ์ ํญ์ ์ถฉ๋ถํ์ง ์๋ค.
σ๊ฐ ์๊ทธ๋ชจ์ด๋ ํจ์์ผ ๋ ์ด ํจ์๊ฐ zσ์ ๊ฑฐ์ ๊ฐ๋ค -> ์ด ๊ทผ์ฌ์์ ๋งค์ฐ ์ ์๋ํ๊ณ ๊ณ์ฐ์ด ๋น ๋ฅด๋ค.

SiLU ํ์ฑํ ํจ์๋ zσ(z)์ ๊ฐ์ง๋ง GELU์ ์ฑ๋ฅ์ ๋ฅ๊ฐํ๋ค.
Swish๋ GELU๋ฅผ ํฌํจํด ๋ค๋ฅธ ๋ชจ๋ ํ์ฑํ ํจ์์ ์ฑ๋ฅ์ ๋ฅ๊ฐํ๋ค.
์ผ๋ฐ์ ์ธ Swish ํจ์๋ Swish_β(z) = zσ(βz)์ด๋ค.
๋ฐ๋ผ์ GELU๋ β = 1.702๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ฐํ๋ Swish ํจ์์ ๊ฑฐ์ ๋์ผํ๋ค.
๋ค๋ฅธ ํ์ดํผํ๋ผ๋ฏธํฐ์ฒ๋ผ β๋ฅผ ํ๋ํ ์ ์๊ณ , β๋ฅผ ํ๋ จ ๊ฐ์ผํ ํ๋ผ๋ฏธํฐ๋ก ๋ง๋ค๊ณ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ผ๋ก ์ต์ ํํ ์ ์๋ฐ.
PReLU์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ธ์ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ง๋ค ์ ์์ง๋ง ๋ฐ์ดํฐ์ ๊ณผ๋์ ํฉ๋ ์ํ์ด ์๋ค.
Mish ํ์ฑํ ํจ์๋ mish(z) = ztanh(softplus(z))๋ก ์ ์๋๋ค.
softplus(z) = log(1 + exp(z))์ด๋ค.
๋งค๋๋ฝ๊ณ ๋ณผ๋กํ์ง ์๊ณ ๋จ์กฐ ํจ์๊ฐ ์๋ ReLU์ ๋ณํ์ด๋ค.
Mish๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ํ์ฑํ ํจ์, ์ฌ์ง์ด Swish์ GELU๋ณด๋ค ๊ทผ์ํ ์ฐจ์ด๋ก ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํ๋ค.
Mish๋ z๊ฐ ์์์ผ ๋ Swish์ ๊ฑฐ์ ์ค๋๋ฒฝํ๊ฒ ๊ฒน์น๊ณ , z๊ฐ ์์์ผ ๋๋ GELU์ ๊ฑฐ์ ์๋ฒฝํ๊ฒ ๊ฒน์น๋ค..
์ผ๋ผ์ค๋ GELU์ Swish๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก activation="gelu" ๋๋ activation="swish"๋ก ์ง์ ํ๋ฉด ๋๋ค.
11.1.3 ๋ฐฐ์น ์ ๊ทํ
RELU(๋๋ ๋ค๋ฅธ ReLU์ ๋ณํ)์ ํจ๊ป He ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ จ ์ด๊ธฐ ๋จ๊ณ์์ ๊ทธ๋ ์ด๋์ธํธ ์์ค์ด๋ ํญ์ฃผ ๋ฌธ์ ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ง๋ง, ํ๋ จํ๋ ๋์ ๋ค์ ๋ฐ์ํ์ง ์์ผ๋ฆฌ๋ ๋ณด์ฅ์ด ์๋ค.
๋ฐฐ์น ์ ๊ทํ : ๊ฐ ์ธต์์ ํ์ฑํ ํจ์๋ฅผ ํต๊ณผํ๊ธฐ ์ ์ด๋ ํ์ ๋ชจ๋ธ์ ์ฐ์ฐ์ ํ๋ ์ถ๊ฐํ๋ค.
์ด ์ฐ์ฐ์ ๋จ์ํ๊ฒ ์ ๋ ฅ์ ์์ ์ ๋ง์ถ๊ณ ์ ๊ทํํ ๋ค์, ๊ฐ ์ธต์์ ๋ ๊ฐ์ ์๋ก์ด ํ๋ผ๋ฏธํฐ๋ก ๊ฒฐ๊ด๊ฐ์ ์ค์ผ์ผ์ ์กฐ์ ํ๊ณ ์ด๋์ํจ๋ค.
ํ๋๋ ์ค์ผ์ผ ์กฐ์ ์, ๋ค๋ฅธ ํ๋๋ ์ด๋์ ์ฌ์ฉ๋๋ค.
๋ง์ ๊ฒฝ์ฐ ์ ๊ฒฝ๋ง์ ์ฒซ ๋ฒ์จฐ ์ธต์ผ๋ก ๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ถ๊ฐํ๋ฉด ํ๋ จ ์ธํธ๋ฅผ ํ์คํํ ํ์๊ฐ ์๋ค.
์ฆ StandardScaler๋ Normalization ํด๋์ค๊ฐ ํ์ํ์ง ์๋ค. <- ๋ฐฐ์น ์ ๊ทํ ์ธต์ด ์ด๋ฐ ์ญํ ์ ๋์ ํ๋ค.
๋ฐฐ์น ์ ๊ทํ ์ธต์ ํ ๋ฒ์ ํ๋์ ๋ฐฐ์น๋ง ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ทผ์ฌ์ ์ด๋ฉฐ ์ ๋ ฅ ํน์ฑ๋ง๋ค ์ค์ผ์ผ์ ์กฐ์ ํ๊ณ ์ด๋์ํฌ ์ ์๋ค.
์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ๋ง์ถ๊ณ ์ ๊ทํํ๋ ค๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ์ถ์ ํด์ผ ํ๋ค.
์ด๋ฅผ ์ํด ํ์ฌ ๋ฏธ๋๋ฐฐ์น์์ ์ ๋ ฅ์ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ํ๊ฐํ๋ค.
[๋ฐฐ์น ์ ๊ทํ ์๊ณ ๋ฆฌ์ฆ]



ํ๋ จํ๋ ๋์ ๋ฐฐ์น ์ ๊ทํ๋ ์ ๋ ฅ์ ์ ๊ทํํ ๋ค์ ์ค์ผ์ผ์ ์กฐ์ ํ๊ณ ์ด๋์ํจ๋ค.
ํ ์คํธ ์์๋ ์ํ์ ๋ฐฐ์น๊ฐ ์๋๋ผ ์ํ ํ๋์ ๋ํ ์์ธก์ ๋ง๋ค์ด์ผ ํ๋ค.
-> ์ ๋ ฅ์ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ๊ณ์ฐํ ๋ฐฉ๋ฒ์ด ์๋ค.
์ํ์ ๋ฐฐ์น๋ฅผ ์ฌ์ฉํ๋ค ํ๋๋ผ๋ ๋งค์ฐ ์๊ฑฐ๋ ๋ ๋ฆฝ ๋์ผ ๋ถํฌ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ ์ ์๋ค.
์ด๋ฐ ๋ฐฐ์น ์ํ์์ ๊ณ์ฐํ ํต๊ณ๋ ์ ๋ขฐ๋๊ฐ ๋จ์ด์ง๋ค.
ํ๋ จ์ด ๋๋ ํ ์ ์ฒด ํ๋ จ ์ธํธ๋ฅผ ์ ๊ฒฝ๋ง์ ํต๊ณผ์์ผ ๋ฐฐ์น ์ ๊ทํ ์ธต์ ๊ฐ ์ ๋ ฅ์ ๋ํ ํ๊ท ๊ณผ ํ๋ถ ํธ์ฐจ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์์ธกํ ๋ ๋ฐฐ์น ์ ๋ ฅ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ก ์ด ์ต์ข ์ ๋ ฅ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ๋์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฌ๋ ๋๋ถ๋ถ ๋ฐฐ์น ์ ๊ทํ ๊ตฌํ์ ์ธต์ ์ ๋ ฅ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ์ ์ด๋ ํ๊ท ์ ์ฌ์ฉํด ํ๋ จํ๋ ๋์ ์ต์ข ํต๊ณ๋ฅผ ์ถ์ ํ๋ค.
์ผ๋ผ์ค์ BatchNormalization ์ธต์ ์ด๋ฅผ ์๋์ผ๋ก ์ํํ๋ค.
๋ฐฐ์น ์ ๊ทํ ์ธต๋ง๋ค ๋ค ๊ฐ์ ํ๋ผ๋ฏธํฐ ๋ฒกํฐ๊ฐ ํ์ต๋๋ค.
์ถ๋ ฅ ์ค์ผ์ผ ๋ฒกํฐ์ ์ถ๋ ฅ ์ด๋ ๋ฒกํฐ๋ ์ผ๋ฐ์ ์ธ ์ญ์ ํ๋ฅผ ํตํด ํ์ต๋๋ค.
์ต์ข ์ ๋ ฅ ํ๊ท ๋ฒกํฐ์ ์ต์ข ์ ๋ ฅ ํ์ฆ ํธ์ฐจ ๋ฒกํฐ๋ ์ง์ ์ด๋ ํ๊ท ์ ์ฌ์ฉํด ์ถ์ ๋๋ค. ์ด ๋์ ํ๋ จ๋๋ ๋์ ์ถ์ ๋์ง๋ง ํ๋ จ์ด ๋๋ ํ์ ์ฌ์ฉ๋๋ค.
๋ฐฐ์น ์ ๊ทํ๋ ๋ชจ๋ ์ฌ์ธต ์ ๊ฒฝ๋ง์์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๋ฉฐ ํนํ ์ด๋ฏธ์ง๋ท ๋ถ๋ฅ ์์ ์์ ํฐ ์ฑ๊ณผ๋ฅผ ๋๋ค.
๊ทธ๋ ์ด๋์ธํธ ์์ค ๋ฌธ์ ๊ฐ ํฌ๊ฒ ๊ฐ์ํ์ฌ tanh๋ ์๊ทธ๋ชจ์ด๋ ํ์ฑํ ํจ์ ๊ฐ์ ์๋ ด์ฑ์ ๊ฐ์ง ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ ๊ฐ์ค์น ์ด๊ธฐํ์ ๋คํธ์ํฌ๊ฐ ํจ์ฌ ๋ ๋ฏผ๊ฐํด์ง๋ค.
๊ท์ ์ ๊ฐ์ ์ญํ ์ ํ์ฌ ๋ค๋ฅธ ๊ท์ ๊ธฐ๋ฒ์ ํ์์ฑ์ ์ค์ฌ์ค๋ค.
ํ์ง๋ง ๋ฐฐ์น ์ ๊ทํ๋ ๋ชจ๋ธ์ ๋ณต์ก๋๋ฅผ ํค์ฐ๋ฉฐ ์คํ ์๊ฐ ๋ฉด์์๋ ์ํด์ด๋ค.(์ธต๋ง๋ค ์ถ๊ฐ๋๋ ๊ณ์ฐ์ด ์ ๊ฒฝ๋ง์ ์์ธก์ ๋๋ฆฌ๊ฒ ํ๋ค.)
๋คํํ ํ๋ จ์ด ๋๋ ํ์ ์ด์ ์ธต๊ณผ ๋ฐฐ์น ์ ๊ทํ ์ธต์ ํฉ์ณ ์คํ ์๋ ์ ํ๋ฅผ ํผํ ์ ์๋ค.
์ด์ ์ธต์ ๊ฐ์ค์น๋ฅผ ๋ฐ๊พธ์ด ๋ฐ๋ก ์ค์ผ์ผ์ด ์กฐ์ ๋๊ณ ์ด๋๋ ์ถ๋ ฅ์ ๋ง๋ ๋ค.
์) ์ด์ ์ธต์ด XW+b๋ฅผ ๊ณ์ฐํ๋ฉด ๋ฐฐ์น ์ ๊ทํ ์ธต์ γ ⊗ (XW + b - μ) / σ + β๋ฅผ ๊ณ์ฐํ๋ค.
W' = γ ⊗ W / σ์ b' = γ ⊗ (b - μ) / σ + β๋ก ์ ์ํ๋ฉด ์ด ์์ XW' + b'๋ก ๋จ์ํ๋๋ค.
๋ฐ๋ผ์ ์ด์ ์ธต์ ๊ฐ์ค์น์ ํธํฅ(W์ b)์ ์ ๋ฐ์ดํธ๋ ๊ฐ์ค์น์ ํธํฅ(WX' + b')์ผ๋ก ๋ฐ๊พธ๋ฉด ๋ฐฐ์น ์ ๊ทํ ์ธต์ ์ ๊ฑฐํ ์ ์๋ค.
์ผ๋ผ์ค๋ก ๋ฐฐ์น ์ ๊ทํ ๊ตฌํํ๊ธฐ
model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=[28, 28]), tf.keras.layers.BatchNormalization(). tf.keras.layers.Dense(300, activation="relu", kernel_initializer="he_normal"), tf.keras.layers.BatchNormalization(), tf.keras.layers.Dense(100, activation="relu", kernel_initializer="he_normal"), tf.keras.layers.BatchNormalization(), tf.keras.layers.Dense(10, activation="softmax") ])์๋ ์ธต์ ํ์ฑํ ํจ์ ์ ์ด๋ ํ์ BatchNormalization ์ธต์ ์ถ๊ฐํ๋ค.
๋ชจ๋ธ์ ์ฒซ ๋ฒ์งธ ์ธต์ผ๋ก ๋ฐฐ์น ์ ๊ทํ ์ธต์ ์ถ๊ฐํ ์๋ ์๋ค.
ํ์ง๋ง Normalization ์ธต๋ ์ผ๋ฐ์ ์ผ๋ก ์ด ์์น์์ ์ ์๋ํ๋ค. (๋จผ์ adapt() ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋ค.)
model.summary()

๋ฐฐ์น ์ ๊ทํ ์ธต์ ์ ๋ ฅ๋ง๋ค ๋ค ๊ฐ์ ํ๋ผ๋ฏธํฐ γ, β, μ, σ๋ฅผ ์ถ๊ฐํ๋ค.
๋ง์ง๋ง ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ μ, σ๋ ์ด๋ ํ๊ท ์ด๋ค.
์ญ์ ํ๋ก ํ์ต๋์ง ์๊ธฐ ๋๋ฌธ์ 'Non-trainable' ํ๋ผ๋ฏธํฐ๋ก ๋ถ๋ฅํ๋ค.
์ด๋ฅผ 2๋ก ๋๋๋ฉด ์ด ๋ชจ๋ธ์์ ํ๋ จ๋์ง ์๋ ์ ์ฒด ํ๋ผ๋ฏธํฐ ๊ฐ์๋ฅผ ์ป๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฐ์น ์ ๊ทํ ์ธต์ ํ๋ผ๋ฏธํฐ์ด๋ค.
๋ ๊ฐ๋ ์ญ์ ํ๋ก ํ๋ จ๋๊ณ ๋ ๊ฐ๋ ํ๋ จ๋์ง ์๋๋ค.
[(var.name, var.trainable) for var in model.layers[1].variables] # [('batch_normalization_v2/gamma:0', True), ('batch_normalization_v2/beta:0' True), ('batch_normalization_v2/moving_mean:0', False), ('batch_normalization_v2/moving_variance:0', False)]ํ์ฑํ ํจ์ ์ดํ๋ณด๋ค ํ์ฑํ ํจ์ ์ด์ ์ ๋ฐฐ์น ์ ๊ทํ ์ธต์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข๋ค.
ํ์ง๋ง ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ์ํํด๋ณด๊ณ ์ด๋ค ๊ฒ์ด ์ฃผ์ด์ง ๋ฐ์ดํฐ์ ์ ๊ฐ์ฅ ์ ๋ง๋์ง ํ์ธํด์ผ ํ๋ค.
ํ์ฑํ ํจ์ ์ ์ ๋ฐฐ์น ์ ๊ทํ ์ธต์ ์ถ๊ฐํ๋ ค๋ฉด ์๋ ์ธต์์ ํ์ฑํ ํจ์๋ฅผ ์ง์ ํ์ง ๋ง๊ณ ๋ฐฐ์น ์ ๊ทํ ์ธต ๋ค์ ๋ณ๋์ ์ธต์ผ๋ก ์ถ๊ฐํด์ผ ํ๋ค.
๋ํ ๋ฐฐ์น ์ ๊ทํ ์ธต์ ์ ๋ ฅ๋ง๋ค ์ด๋ ํ๋ผ๋ฏธํฐ๋ฅผ ํฌํจํ๋ฏ๋ก ์ธต์ ๋ง๋ค ๋ use_bias=False๋ก ์ค์ ํด ์ด์ ์ธต์์ ํธํฅ์ ๋บ ์ ์๋ค.
์ฒซ ๋ฒ์งธ ์๋ ์ธต์ด ๋ฐฐ์น ์ ๊ทํ ์ธต ๋ ๊ฐ ์ฌ์ด์ ๋ผ์ด์ง ์๋๋ก ์ฒซ ๋ฒ์งธ ๋ฐฐ์น ์ ๊ทํ ์ธต์ ์ญ์ ํ ์ ์๋ค.
model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=[28, 28]), tf.keras.layers.Dense(300, kernel_initializer="he_normal", use_bias=False), tf.keras.layers.BatchNormalization(), tf.keras.layers.Activation("relu"), tf.keras.layers.Dense(100, kernel_initializer="he_normal", use_bias=False), tf.keras.layers.BatchNormalization(), tf.keras.layers.Activation("relu"), tf.keras.layers.Dense(10, activation="softmax") ])BatchNormalization ํด๋์ค๋ ์กฐ์ ํ ํ์ดํผํ๋ผ๋ฏธํฐ๊ฐ ์ ๋ค.
๋ณดํต ๊ธฐ๋ณธ๊ฐ์ด ์ ์๋ํ์ง๋ง ์ด๋ฐ๊ธ momentum ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ์ ์๋ค.
BatchNormalization ์ธต์ด ์ง์ ์ด๋ ํ๊ท ์ ์ ๋ฐ์ดํธํ ๋ ์ด ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ค.
์๋ก์ด ๊ฐ v(ํ์ฌ ๋ฐฐ์น์์ ๊ณ์ฐํ ์๋ก์ด ์ ๋ ฅ ํ๊ท ๋ฒกํฐ๋ ํ์ค ํธ์ฐจ ๋ฒกํฐ)๊ฐ ์ฃผ์ด์ง๋ฉด ๋ค์ ์์ ์ฌ์ฉํด ์ด๋ ํ๊ท hat_v์ ์ ๋ฐ์ดํธํ๋ค.

์ ์ ํ ๋ชจ๋ฉํ ๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก 1์ ๊ฐ๊น๋ค. (0.9, 0.99, 0.999, ...)
์ค์ํ ๋ค๋ฅธ ํ์ดํผํ๋ผ๋ฏธํฐ๋ ์ ๊ทํํ ์ถ์ ๊ฒฐ์ ํ axis(๊ธฐ๋ณธ๊ฐ -1)์ด๋ค.
๋ค๋ฅธ ์ถ์ ๋ฐ๋ผ ๊ณ์ฐํ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ง๋ง ์ถ์ ์ ๊ทํํ๋ค.
์ ๋ ฅ ๋ฐฐ์น๊ฐ 2D(๋ฐฐ์น ํฌ๊ธฐ๊ฐ [์ํ ๊ฐ์, ํน์ฑ ๊ฐ์])์ด๋ฉด ๊ฐ ์ ๋ ฅ ํน์ฑ์ด ๋ฐฐ์น์ ์๋ ๋ชจ๋ ์ํ์ ๋ํด ๊ณ์ฐํ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ทํ๋๋ค.
๋ง์ฝ ๋ฐฐ์น ์ ๊ทํ ์ธต์ Flatten ์ธต ์ด์ ์ผ๋ก ์ฎ๊ธฐ๋ฉด ์ ๋ ฅ ๋ฐฐ์น๋ [์ํ ๊ฐ์, ๋์ด, ๋๋น] ํฌ๊ธฐ์ 3D๊ฐ ๋๋ค.
๋ฐฐ์น ์ ๊ทํ ์ธต์ด ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ๊ณ์ฐํ๋ค. (์ด์ ์๋ ๋ชจ๋ ํ๊ณผ ์ํ์ ๋ํด ๊ณ์ฐํ๋ฏ๋ก ํฝ์ ์ด ์ด๋ง๋ค 1๊ฐ์ฉ ๋ง๋ค์ด์ง๋ค.)
๊ทธ๋ค์ ๋์ผํ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ด์ ๋ชจ๋ ํฝ์ ์ ์ ๊ทํํ๋ค.
BatchNormalization์ ์ฌ์ธต ์ ๊ฒฝ๋ง, ํนํ ์ฌ์ธต ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์์ ๋งค์ฐ ๋๋ฆฌ ์ฌ์ฉํ๋ ์ธต์ด ๋์๊ณ , ๋ณดํต ๋ชจ๋ ์ธต ๋ค์ ๋ฐฐ์น ์ ๊ทํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฏ๋ก ์ข ์ข ๊ธด๊ฒฝ๋ง ๊ทธ๋ฆผ์์ ๋น ์ ธ ์๋ค.
11.1.4 ๊ทธ๋ ์ด๋์ธํธ ํด๋ฆฌํ
๊ทธ๋ ์ด๋์ธํธ ํด๋ฆฌํ : ์ญ์ ํ๋ ๋ ํน์ ์๊ณ๊ฐ์ ๋์ด์์ง ๋ชปํ๊ฒ ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ์๋ผ๋ด์ด ๊ทธ๋ ์ด๋์ธํธ ํญ์ฃผ ๋ฌธ์ ๋ฅผ ์ํํ ์ ์๋ค.
๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ฌ์ฉํ๊ธฐ ๊น๋ค๋ก์ด ์ํ ์ ๊ฒฝ๋ง์์ ์ฌ์ฉ๋๋ค.
optimizer = tf.keras.optimizers.SGD(clipvalue=1.0) model.compile([...], optimizer=optimizer)์ตํฐ๋ง์ด์ ๋ฅผ ๋ง๋ค ๋ clipvalue์ clipnorm ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ๋ฉด ๋๋ค.
์ด ์ตํฐ๋ง์ด์ ๋ ๊ทธ๋ ์ด๋์ธํธ ๋ฒกํฐ์ ๋ชจ๋ ์์๋ฅผ -1.0๊ณผ 1.0 ์ฌ์ด๋ก ํด๋ฆฌํํ๋ค.
์ฆ, ํ๋ จ๋๋ ๊ฐ ํ๋ผ๋ฏธํฐ์ ๋ํ ์์ค์ ๋ชจ๋ ํธ๋ฏธ๋ถ๊ฐ์ -1.0์์ 1.0์ผ๋ก ์๋ผ๋ธ๋ค.
์๊ณ๊ฐ์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ก ํ๋ํ ์ ์๋ค. -> ๊ทธ๋ ์ด๋์ธํธ ๋ฒกํฐ์ ๋ฐฉํฅ์ ๋ฐ๊ฟ ์ ์๋ค.
๋ง์ฝ ๊ทธ๋ ์ด๋์ธํธ ํด๋ฆฌํ์ด ๊ทธ๋ ์ด๋์ธํธ ๋ฒกํฐ์ ๋ฐฉํฅ์ ๋ฐ๊พธ์ง ๋ชปํ๊ฒ ํ๋ ค๋ฉด clipvalue ๋์ clipnorm์ ์ง์ ํ์ฌ ๋ ธ๋ฆ์ผ๋ก ํด๋ฆฌํํด์ผ ํ๋ค.
๋ง์ฝ l2๋ ธ๋ฆ์ด ์ง์ ํ ์๊ณ๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด ์ ์ฒด ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ํด๋ฆฌํํ๋ค.
ํ๋ จํ๋ ๋์ ๊ทธ๋ ์ด๋์ธํธ๊ฐ ํญ์ฃผํ๋ค๋ฉด ๋ค๋ฅธ ์๊ฒ๊ฐ์ผ๋ก ๊ฐ๊ณผ ๋ ธ๋ฆ์ ๋ชจ๋ ์ฌ์ฉํ์ฌ ํด๋ฆฌํํ ์ ์๋ค.
11.2 ์ฌ์ ํ๋ จ๋ ์ธต ์ฌ์ฌ์ฉํ๊ธฐ
์ ์ด ํ์ต : ํด๊ฒฐํ๋ ค๋ ๊ฒ๊ณผ ๋น์ทํ ์ ํ์ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ ์ ๊ฒฝ๋ง์ด ์ด๋ฏธ ์๋์ง ์ฐพ์๋ณด์ง ์๊ณ ์์ฃผ ํฐ ๊ท๋ชจ์ DNN์ ์ฒ์๋ถํฐ ์๋ก ํ๋ จํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋ค. ์ด๋ฐ ์ ๊ฒฝ๋ง์ ์ฐพ์๋ค๋ฉด ์ต์์ ์ธต์ ์ ์ธํ๊ณ ๋๋ถ๋ถ์ ์ธต์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
ํ๋ จ ์๋๋ฅผ ํฌ๊ฒ ๋์ผ ๋ฟ ์๋๋ผ ํ์ํ ํ๋ จ ๋ฐ์ดํฐ๋ ํฌ๊ฒ ์ค์ด๋ ๋ค.

๋ณดํต ์๋ณธ ๋ชจ๋ธ์ ์ถ๋ ฅ ์ธต์ ๋ฐ๊ฟ์ผ ํ๋ค.
์ด ์ธต์ ์๋ก์ด ์์ ์ ๊ฐ์ฅ ์ ์ฉํ์ง ์๊ฑฐ๋ ์๋ก์ด ์์ ์ ํ์ํ ์ถ๋ ฅ ๊ฐ์์ ๋ง์ง ์์ ์ ์๋ค.
์๋ณธ ๋ชจ๋ธ์ ์์ ์๋ ์ธต์ ํ์ ์๋ ์ธต๋ณด๋ค ๋ ์ ์ฉํ๋ค.
์๋ก์ด ์์ ์ ์ ์ฉํ ๊ณ ์์ค ํน์ฑ์ ์๋ณธ ์์ ์์ ์ ์ฉํ๋ ํน์ฑ๊ณผ๋ ์๋นํ ๋ค๋ฅด๋ค.
-> ์ฌํ์ฉํ ์ธต ๊ฐ์๋ฅผ ์ ์ ์ ํด์ผ ํ๋ค.
์ฌ์ฌ์ฉํ๋ ์ธต์ ๋ชจ๋ ๋๊ฒฐํ๋ค. (๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ผ๋ก ๊ฐ์ค์น๊ฐ ๊ณ ์ ๋ ์ํ๋ก ๋จ๋๋ก ํ๋ จ๋์ง ์๋ ๊ฐ์ค์น๋ก ๋ง๋ ๋ค.)
๋ชจ๋ธ์ ํ๋ จํ๊ณ ์ฑ๋ฅ์ ํ๊ฐํ๋ค.
๋งจ ์์ ์๋ ํ๋ ๊ฐ์ ์๋ ์ธต์ ๋๊ฒฐ์ ํด์ ํ๊ณ ์ญ์ ํ๋ฅผ ํตํด ๊ฐ์ค์น๋ฅผ ์กฐ์ ํ์ฌ ์ฑ๋ฅ์ด ํฅ์๋๋์ง ํ์ธํ๋ค.
ํ๋ จ ๋ฐ์ดํฐ๊ฐ ๋ง์์๋ก ๋ง์ ์ธต์ ๋๊ฒฐ์ ํด์ ํ ์ ์๋ค.
์ฌ์ฌ์ฉ ์ธต์ ๋๊ฒฐ์ ํด์ ํ ๋๋ ํ์ต๋ฅ ์ ์ค์ด๋ ๊ฒ์ด ์ข๋ค. -> ๊ฐ์ค์น๋ฅผ ์ธ๋ฐํ๊ฒ ํ๋ํ๋ ๋ฐ ๋์์ด ๋๋ค.
๋ง์ฝ ์ฌ์ ํ ์ข์ ์ฑ๋ฅ์ ๋ผ ์ ์๊ณ ํ๋ จ ๋ฐ์ดํฐ๊ฐ ์ ๋ค๋ฉด ์์ ์๋ ์ธต๋ค์ ์ ๊ฑฐํ๊ณ ๋จ์ ์๋ ์ธต์ ๋ค์ ๋๊ฒฐํ๋ค.
์ฌ์ฌ์ฉํ ์๋ ์ธต์ ์ ์ ํ ๊ฐ์๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
ํ๋ จ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ง๋ค๋ฉด ์๋ ์ธต์ ์ ๊ฑฐํ๋ ๋์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋ ๋ ๋ง์ ์๋ ์ธต์ ์ถ๊ฐํ ์ ์๋ค.
11.2.1 ์ผ๋ผ์ค๋ฅผ ์ฌ์ฉํ ์ ์ด ํ์ต
[...] # ๋ชจ๋ธ A๋ ์ด๋ฏธ ํ๋ จ๋์ด "my_model_A'์ ์ ์ฅ๋์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค. model_A = tf.keras.models.load_model("my_model_A") model_B_on_A = tf.keras.Sequential(model_A.layers[:-1]) model_B_on_A.add(tf.keras.layers.Dense(1, activation="signoid"))๋จผ์ ๋ชจ๋ธ A๋ฅผ ๋ก๋ํ๊ณ ์ด ๋ชจ๋ธ์ ์ธต์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ชจ๋ธ(model_B_on_A)์ ๋ง๋ ๋ค.
์ถ๋ ฅ ์ธต๋ง ์ ์ธํ๊ณ ๋ชจ๋ ์ธต์ ์ฌ์ฌ์ฉํ๋ค.
model_A_clone = tf.keras.models.clone_model(model_A) model_A_clone.set_weights(model_A.get_weights())model_A์ model_B_on_A๋ ์ผ๋ถ ์ธต์ ๊ณต์ ํ๋ค.
model_B_on_A๋ฅผ ํ๋ จํ ๋ model_A๋ ์ํฅ์ ๋ฐ๋๋ค.
์ด๋ฅผ ์ํ์ง ์๋๋ค๋ฉด ์ธต์ ์ฌ์ฌ์ฉํ๊ธฐ ์ ์ model_A๋ฅผ ํด๋ก ํด์ผ ํ๋ค.
clone_model() ๋ฉ์๋๋ก ๋ชจ๋ธ A์ ๊ตฌ์กฐ๋ฅผ ๋ณต์ ํ ํ ๊ฐ์ค์น๋ฅผ ๋ณต์ฌํ๋ค.
tf.keras.models.clone_model()์ ๊ฒฝ์ฐ ๊ฐ์ค์น๋ ์ ์ธํ๊ณ ๊ตฌ์กฐ๋ง ๋ณต์ ํ๋ค.
set_weights() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๊ฐ์ค์น๋ฅผ ์๋์ผ๋ก ๋ณต์ฌํ์ง ์์ผ๋ฉด ๋ณต์ ๋ ๋ชจ๋ธ์ ์ฒ์ ์ฌ์ฉํ ๋ ๋๋คํ๊ฒ ์ด๊ธฐํ๋ ๊ฒ์ด๋ค.
for layer in model_B_on_A.layers[:-1]: layer.trainable = False optimizer = tf.keras.optimizers.SGD(learning_rate=0.001) model_B_on_A.compile(loss="binary_crossentropy", optimizer=optimizer, metrics=["accuracy"])์์ B๋ฅผ ์ํด model_B_on_A๋ฅผ ํ๋ จํ ์ ์๋ค.
ํ์ง๋ง ์๋ก์ด ์ถ๋ ฅ ์ธต์ด ๋๋คํ๊ฒ ์ด๊ธฐํ๋์ด ์์ผ๋ฏ๋ก ํฐ ์ค์ฐจ๋ฅผ ๋ง๋ค ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ํฐ ์ค์ฐจ ๊ทธ๋ ์ด๋์ธํธ๊ฐ ์ฌ์ฌ์ฉ๋ ๊ฐ์ค์น๋ฅผ ๋ง์น ์ ์๋ค.
์ด๋ฅผ ํผํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฒ์ ๋ช ๋ฒ์ ์ํฌํฌ ๋์ ์ฌ์ฌ์ฉ๋ ์ธต์ ๋๊ฒฐํ๊ณ ์๋ก์ด ์ธต์๊ฒ ์ ์ ํ ๊ฐ์ค์น๋ฅผ ํ์ตํ ์๊ฐ์ ์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํด ๋ชจ๋ ์ธต์ trainable ์์ฑ์ False๋ก ์ง์ ํ๊ณ ๋ชจ๋ธ์ ์ปดํ์ผํ๋ค.
history = model_B_on_A.fit(X_train_B, y_train_B, epochs=4, validation_data=(X_valid_B, y_valid_B)) for layer in model_B_on_A.layers[:-1]: layer.trainable = True optimizer = tf.keras.optimizers.SGD(learning_rate=0.001) model_B_on_A.compile(loss="binary_crossentropy", optimizer=optimizer, metrics=["accuracy"]) history = model_B_on_A.fit(X_train_B, y_train_B, epochs=16, validation_data=(X_valid_B, y_valid_B))๋ช ๋ฒ์ ์ํฌํฌ ๋์ ๋ชจ๋ธ์ ํ๋ จํ ์ ์๋ค.
๊ทธ๋ค์ ์ฌ์ฌ์ฉ๋ ์ธต์ ๋๊ฒฐ์ ํด์ ํ๊ณ ์์ B์ ๋ง๊ฒ ์ฌ์ฌ์ฉ๋ ์ธต์ ์ธ๋ฐํ๊ฒ ํ๋ํ๊ธฐ ์ํด ํ๋ จ์ ๊ณ์ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฌ์ฉ๋ ์ธต์ ๋๊ฒฐ์ ํด์ ํ ํ์ ํ์ต๋ฅ ์ ๋ฎ์ถ๋ ๊ฒ์ด ์ข๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฌ์ฉ๋ ๊ฐ์ค์น๊ฐ ๋ง๊ฐ์ง๋ ๊ฒ์ ๋ง์์ค๋ค.
model_B_on_A.evaluate(X_test_B, y_test_B) # [0.2546142041683197, 0.9384999871253967]์ ์ด ํ์ต์ ์์ ์์ ์ฐ๊ฒฐ ๋คํธ์ํฌ์์๋ ์ ์๋ํ์ง ์๋๋ค.
์์ ๋คํธ์ํฌ๋ ํจํด ์๋ฅผ ์ ๊ฒ ํ์ตํ๊ณ ์์ ์ฐ๊ฒฐ ๋คํธ์ํฌ๋ ํน์ ํจํด์ ํ์ตํ๋ค. ์ด๋ฐ ํจํด์ ๋ค๋ฅธ ์์ ์ ์ ์ฉํ์ง ์๋ค.
์ ์ด ํ์ต์ ์กฐ๊ธ ๋ ์ผ๋ฐ์ ์ธ ํน์ฑ์ ๊ฐ์งํ๋ ๊ฒฝํฅ์ด ์๋ ์ฌ์ธต ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์์ ์ ์๋ํ๋ค.
11.2.2 ๋น์ง๋ ์ฌ์ ํ๋ จ
๋ ์ด๋ธ์ด ์๋ ํ๋ จ ์ํ์ ๋ชจ์ผ๋ ๊ฒ์ ๋น์ฉ์ด ์ ๊ฒ ๋ค์ง๋ง ์ฌ๊ธฐ์ ๋ ์ด๋ธ์ ๋ถ์ฌํ๋ ๊ฒ์ด ๋น์ธ๋ค.
๋ ์ด๋ธ๋์ง ์์ ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ๋ชจ์ ์ ์๋ค๋ฉด ์ด๋ฅด ใน์ฌ์ฉํ์ฌ ์คํ ์ธ์ฝ๋๋ ์์ฑ์ ์ ๋ ์ ๊ฒฝ๋ง๊ณผ ๊ฐ์ ๋น์ง๋ ํ์ต ๋ชจ๋ธ์ ํ๋ จํ ์ ์๋ค.
๊ทธ๋ฐ ๋ค์ ์คํ ์ธ์ฝ๋๋ GAN ํ๋ณ์์ ํ์ ์ธต์ ์ฌ์ฌ์ฉํ๊ณ ๊ทธ ์์ ์๋ก์ด ์์ ์ ๋ง๋ ์ถ๋ ฅ ์ธต์ ์ถ๊ฐํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๋ ํ์ต์ผ๋ก(๋ ์ด๋ธ๋ ํ๋ จ ์ํ๋ก) ์ต์ข ๋คํธ์ํฌ๋ฅผ ์ธ๋ฐํ๊ฒ ํ๋ํ๋ค.
๊ทธ๋ ์ด๋์ธํธ ์์ค ๋ฌธ์ ๊ฐ ์ํ๋๊ณ ๋์์ผ ์ญ์ ํ ์๊ณ ๋ฆฌ์ฆ๋ง์ ์ฌ์ฉํ์ฌ ์ฌ์ธต ์ ๊ฒฝ๋ง์ ํ๋ จํ๋ ๊ฒ์ด ๋๋ฆฌ ์ผ๋ฐํ๋์๋ค.
ํ์ด์ผ ํ ๋ฌธ์ ๊ฐ ๋ณต์กํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๋ ๋น์ทํ ๋ชจ๋ธ์ด ์์ผ๋ฉฐ ๋ ์ด๋ธ๋ ํ๋ จ ๋ฐ์ดํฐ๊ฐ ์ ์ ๋๋ ๋น์ง๋ ์ฌ์ ํ๋ จ์ด ์ข์ ์ ํ์ด๋ค.
๋ฅ๋ฌ๋ ์ด๊ธฐ์ ํ์์ ์ธต ๋จ์ ์ฌ์ ํ๋ จ:
ํ๋์ ์ธต์ ๊ฐ์ง ๋น์ง๋ ํ์ต ๋ชจ๋ธ์ ํ๋ จํ๋ค. (์ผ๋ฐ์ ์ผ๋ก RBM ์ฌ์ฉ)
์ด ์ธต์ ๋๊ฒฐํ๊ณ ๊ทธ ์์ ๋ค๋ฅธ ์ธต์ ์ถ๊ฐํ ๋ค์ ๋ชจ๋ธ์ ๋ค์ ํ๋ จํ๋ค. (์๋ก ์ถ๊ฐํ ์ธต๋ง ํ๋ จํ๋ค)
๊ทธ๋ค์ ์๋ก์ด ์ธต์ ๋๊ฒฐํ๊ณ ๊ทธ ์์ ๋ ๋ค๋ฅธ ์ธต์ ์ถ๊ฐํ๊ณ ๋ชจ๋ธ์ ๋ค์ ํ๋ จํ๋ ์์ผ๋ก ๋ฐ๋ณต๋๋ค.
์ค๋๋ :
์ผ๋ฐ์ ์ผ๋ก ํ ๋ฒ์ ์ ์ฒด ๋น์ง๋ ํ์ต ๋ชจ๋ธ์ ํ๋ จํ๊ณ RBM ๋์ ์คํ ์ธ์ฝ๋๋ GAN์ ์ฌ์ฉํ๋ค.

๋น์ง๋ ํ๋ จ์์๋ ๋น์ง๋ ํ์ต ๊ธฐ๋ฒ์ผ๋ก ๋ ์ด๋ธ์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ์ ์ฒด ๋ฐ์ดํฐ๋ก ๋ชจ๋ธ์ ํ๋ จํ๋ค.
๊ทธ๋ค์ ์ง๋ ํ์ต ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ ์ด๋ธ๋ ๋ฐ์ดํฐ๋ง์ผ๋ก ์ต์ข ํ์ต์ ์ํด ์ธ๋ฐํ๊ฒ ํ๋ํ๋ค.
๋น์ง๋ ํ์ต ๋ถ๋ถ์ ํ ๋ฒ์ ํ๋์ ์ธต์ฉ ํ๋ จํ๊ฑฐ๋ ๋ฐ๋ก ์ ์ฒด ๋ชจ๋ธ์ ํ๋ จํ ์ ์๋ค.
11.2.3 ๋ณด์กฐ ์์ ์์ ์ฌ์ ํ๋ จ
๋ ์ด๋ธ๋ ํ๋ จ ๋ฐ์ดํฐ๊ฐ ๋ง์ง ์๋ค๋ฉด ๋ง์ง๋ง ์ ํ ์ฌํญ์ ๋ ์ด๋ธ๋ ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ป๊ฑฐ๋ ์์ฑํ ์ ์๋ ๋ณด์กฐ ์์ ์์ ์ฒซ ๋ฒ์จฐ ์ ๊ฒฝ๋ง์ ํ๋ จํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ ๊ฒฝ๋ง์ ํ์ ์ธต์ ์ค์ ์์ ์ ์ํด ์ฌ์ฌ์ฉํ๋ค.
์ฒซ ๋ฒ์จฐ ์ ๊ฒฝ๋ง์ ํ์ ์ธต์ ๋ ๋ฒ์งธ ์ ๊ฒฝ๋ง์ ์ฌ์ฌ์ฉ๋ ์ ์๋ ํน์ฑ ์ถ์ถ๊ธฐ๋ฅผ ํ์ตํ๊ฒ ๋๋ค.
์) ์์ฐ์ด ์ฒ๋ฆฌ(NLP) ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์๋ฐฑ๋ง ๊ฐ์ ํ ์คํธ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ง๋ญ์น๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ด ๋ฐ์ดํฐ์์ ๋ ์ด๋ธ๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค. ์ผ๋ถ ๋จ์ด๋ฅผ ๋๋คํ๊ฒ ์ง์ฐ๊ณ ๋๋ฝ๋ ๋จ์ด๋ฅผ ์์ธกํ๋ ๋ชจ๋ธ์ ํ๋ จํ ์ ์๋ค. ์ด ์์ ์์ ์ข์ ์ฑ๋ฅ์ ๋ด๋ ๋ชจ๋ธ์ ํ๋ จํ ์ ์๋ค๋ฉด ์ธ์ด์ ๋ํด ์๋นํ ๋ง์ ๊ฒ์ ์๊ณ ์๋ ๋ชจ๋ธ์ด๋ค. ์ค์ ์์ ์ ์ด ๋ชจ๋ธ์ ์ฌ์ฌ์ฉํ๊ณ ๋ ์ด๋ธ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ์ธ ํ๋ํ ์ ์์ ๊ฒ์ด๋ค.
+ ์๊ธฐ ์ง๋ ํ์ต : ํ ์คํธ๋ฅด ๋ง์คํนํ๋ ์์์์ฒ๋ผ ๋ฐ์ดํฐ์์ ์ค์ค๋ก ๋ ์ด๋ธ์ ์์ฑํ๊ณ ์ง๋ ํ์ต ๊ธฐ๋ฒ์ผ๋ก ๋ ์ด๋ธ๋ ๋ฐ์ดํฐ์ ์์ ๋ชจ๋ธ์ ํ๋ จํ๋ ๋ฐฉ๋ฒ
11.3 ๊ณ ์ ์ตํฐ๋ง์ด์
ํ๋ จ ์๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ์ค์ ์ธ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ ์ตํฐ๋ง์ด์ ๋์ ๋ ๋น ๋ฅธ ์ตํฐ๋ง์ด์ ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
11.3.1 ๋ชจ๋ฉํ ์ต์ ํ
์ฒ์์๋ ๋๋ฆฌ๊ฒ ์ถ๋ฐํ์ง๋ง ์ข ๋จ์๋์ ๋๋ฌํ ๋๊น์ง๋ ๋น ๋ฅด๊ฒ ๊ฐ์๋๋ค.
๋ฐ๋ฉด์ ํ์ค์ ์ธ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ๊ฒฝ์ฌ๊ฐ ์๋งํ ๋๋ ์์ ์คํ ์ผ๋ก ์์ง์ด๊ณ ๊ฒฝ์ฌ๊ฐ ๊ฐํ๋ฅผ ๋๋ ํฐ ์คํ ์ผ๋ก ์ด๋ํ๋ค. ์๋๊ฐ ๋์์ง์ง๋ ์๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ํ์ค์ ์ธ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ๋ชจ๋ฉํ ์ตฒ๊ฑฐํ๋ณด๋ค ์ต์ ์ ์ ๋๋ฌํ๋ ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ํจ์ฌ ๋๋ฆฌ๋ค.
๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ๊ฐ์ค์น์ ๋ํ ๋น์ฉ ํจ์ J(θ)์ ๊ทธ๋ ์ด๋์ธํธ(โฝ_θ(J(θ)))์ ํ์ต๋ฅ η๋ฅผ ๊ณฑํ ๊ฒ์ ๋ฐ๋ก ์ฐจ๊ฐํ์ฌ ๊ฐ์ค์น θ๋ฅผ ๊ฐฑ์ ํ๋ค.
θ ← θ - ηโฝ_θ(J(θ))
์ด์ ๊ทธ๋ ์ด๋์ธํธ๊ฐ ์ผ๋ง์๋์ง ๊ณ ๋ คํ์ง ์๋๋ค.
๊ตญ๋ถ์ ์ผ๋ก ๊ทธ๋ ์ด๋์ธํธ๊ฐ ์์ฃผ ์์ผ๋ฉด ๋งค๋ฃจ ๋๋ ค์ง๋ค.
๋ชจ๋ฉํ ์ต์ ํ๋ ์ด์ ๊ทธ๋ ์ด๋์ธํธ๊ฐ ์ผ๋ง์๋์ง๋ฅผ ์๋นํ ์ค์ํ๊ฒ ์๊ฐํ๋ค.
๋งค ๋ฐ๋ณต์์ ํ์ฌ ๊ทธ๋ ์ด๋์ธํธ๋ฅผ (ํ์ต๋ฅ η๋ฅผ ๊ณฑํ ํ) ๋ชจ๋ฉํ ๋ฒกํฐ m์ ๋ํ๊ณ ์ด ๊ฐ์ ๋นผ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ค์น๋ฅผ ๊ฐฑ์ ํ๋ค.
๊ทธ๋ ์ด๋์ธํธ๋ฅผ ์๋๊ฐ ์๋๋ผ ๊ฐ์๋๋ก ์ฌ์ฉํ๋ค.
์ผ์ข ์ ๋ง์ฐฐ ์ ํญ์ ํํํ๊ณ ๋ชจ๋ฉํ ์ด ๋๋ฌด ์ปค์ง๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ด ์๊ณ ๋ฆฌ์ฆ์๋ ๋ชจ๋ฉํ ์ด๋ผ๋ ์๋ก์ด ํ์ดํผํ๋ผ๋ฏธํฐ β๊ฐ ํฌํจ๋๋ค.
์ด ๊ฐ์ 0(๋์ ๋ง์ฐฐ ์ ํญ)๊ณผ 1(๋ง์ฐฐ ์ ํญ ์์) ์ฌ์ด๋ก ์ค์ ๋์ด์ผ ํ๋ค. ์ผ๋ฐ์ ์ธ ๋ชจ๋ฉํ ๊ฐ์ 0.9์ด๋ค.
θ ← βθ - ηโฝ_θ(J(θ))
θ ← θm
๊ทธ๋ ์ด๋์ธํธ๊ฐ ์ผ์ ํ๋ค๋ฉด ์ข ๋จ์๋(๊ฐ์ค์น๋ฅผ ๊ฐฑ์ ํ๋ ์ต๋ ํฌ๊ธฐ)๋ ํ์ต๋ฅ η์ ๊ณฑํ ๊ทธ๋ ์ด๋์ธํธ์ ๋ถํธ๋ ๋ฌด์ํ๊ณ 1 / 1 - β์ ๊ณฑํ ๊ฒ๊ณผ ๊ฐ๋ค.
๋ชจ๋ฉํ ์ต์ ํ๊ฐ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ํํธํ ์ง์ญ์ ํ์ถํ๊ฒ ๋์์ค๋ค.
๋ชจ๋ฉํ ์ต์ ํ๋ ๊ณจ์ง๊ธฐ๋ฅผ ๋ฐ๋ผ ๋ฐ๋ฅ(์ต์ ์ )์ ๋๋ฌํ ๋๊น์ง ์ ์ ๋ ๋น ๋ฅด๊ฒ ๋ด๋ ค๊ฐ๋ค.
๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฌ์ธต ์ ๊ฒฝ๋ง์์ ์์ ์ธต์ ์ข ์ข ์ค์ผ์ผ์ด ๋งค์ฐ ๋ค๋ฅธ ์ ๋ ฅ์ ๋ฐ๊ฒ ๋๋ค.
๋ชจ๋ฉํ ์ต์ ํ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ด ๋๋ฉฐ ์ง์ญ ์ต์ ์ ์ผ ๊ฑด๋๋ฐ๋๋ก ํ๋ ๋ฐ๋ ๋์์ด ๋๋ค.
์ผ๋ผ์ค์์ ๋ชจ๋ฉํ ์ต์ ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ SGD ์ตํฐ๋ง์ด์ ๋ฅผ ์ฌ์ฉํ๊ณ momentum ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ๊ณ ๊ธฐ๋ค๋ฆฌ๋ฉด ๋๋ค.
optimizer = tf.keras.optimizers.SGD(learning_rate=0.001, momentum=0.9)ํ๋ํ ํ์ดํผํ๋ผ๋ฏธํฐ๊ฐ ํ๋ ๋์ด๋๋ค๋ ๋จ์ ์ด ์๋ค.
11.3.2 ๋ค์คํ ๋กํ ๊ฐ์ ๊ฒฝ์ฌ
๋ค์คํ ๋กํ ๊ฐ์ ๊ฒฝ์ฌ(NAG) (๋ค์คํ ๋กํ ๋ชจ๋ฉํ ์ต์ ํ)๋ ๊ธฐ๋ณธ ๋ชจ๋ฉํ ์ต์ ํ๋ณด๋ค ํญ์ ๋ ๋น ๋ฅด๋ค.
ํ์ฌ ์์น๊ฐ 0์ด ์๋๋ผ ๋ชจ๋ฉํ ์ ๋ฐฉํฅ์ผ๋ก ์กฐ๊ธ ์์ θ + βm์์ ๋น์ฉ ํจ์์ ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ฉํ ๋ฒกํฐ๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ(์ต์ ์ ์ ํฅํ๋ ๋ฐฉํฅ)์ ๊ฐ๋ฆฌํฌ ๊ฒ์ด๋ฏ๋ก ์ด๋ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
์๋ ์์น์์ ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๊ทธ ๋ฐฉํฅ์ผ๋ก ์กฐ๊ธ ๋ ๋์๊ฐ์ ์ธก์ ํ ๊ทธ๋ ์ด๋์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฝ๊ฐ ๋ ์ ํํ๋ค.
โฝ1์ ์์์ θ์์ ์ธก์ ํ ๋น์ฉ ํจ์์ ๊ทธ๋ ์ด๋์ธํธ์ด๊ณ โฝ2์ ์์์ θ + βm์์ ์ธก์ ํ ๋น์ฉ ํจ์์ ๊ทธ๋ ์ด๋์ธํธ์ด๋ค.

๋ค์คํ ๋กํ ์ ๋ฐ์ดํฐ๊ฐ ์ต์ ๊ฐ์ ๋ ๊ฐ๊น์ฐ๋ฉฐ ์๊ฐ์ด ์ง๋๋ฉด NAG๊ฐ ๊ธฐ๋ณธ ๋ชจ๋ฉํ ์ต์ ํ๋ณด๋ค ํ์ฐํ ๋นจ๋ผ์ง๊ฒ ๋๋ค.
๋ชจ๋ฉํ ์ด ๊ณจ์ง๊ธฐ๋ฅผ ๊ฐ๋ก์ง๋ฅด๋๋ก ๊ฐ์ค์น์ ํ์ ๊ฐํ ๋ โฝ1์ ๊ณจ์ง๊ธฐ๋ฅผ ๋ ๊ฐ๋ก์ง๋ฅด๋๋ก ๋ ๋ คํ๋ ๋ฐ๋ฉด โฝ2๋ ๊ณ๊ณก์ ์๋์ชฝ์ผ๋ก ์ก์๋น๊ธฐ๊ธฐ ๋๋ฌธ์ ์ง๋์ ๊ฐ์์ํค๊ณ ์๋ ด์ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ค๋ค.
optimizer = tf.keras.optimizers.SGD(learning_rate=0.001, momentum=0.9, use_nesterov=True)11.3.3 AdaGrad
๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ ์ญ ์ต์ ์ ๋ฐฉํฅ์ผ๋ก ๊ณง์ฅ ํฅํ์ง ์๊ณ ๊ฐ์ฅ ๊ฐํ๋ฅธ ๊ฒฝ์ฌ๋ฅผ ๋ฐ๋ผ ๋น ๋ฅด๊ฒ ๋ด๋ ค๊ฐ๊ธฐ ์์ํด์ ๊ณจ์ง๊ธฐ ์๋๋ก ๋๋ฆฌ๊ฒ ์ด๋ํ๋ค.
AdaGrad ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ๊ฐํ๋ฅธ ์ฐจ์์ ๋ฐ๋ผ ๊ทธ๋ ์ป์ธํธ ๋ฒกํฐ์ ์ค์ผ์ผ์ ๊ฐ์์์ผ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.

์ฒซ ๋ฒ์จฐ ๋จ๊ณ๋ ๊ทธ๋ ์ด๋์ธํธ์ ์ ๊ณฑ์ ๋ฒกํฐ s์ ๋์ ํ๋ค. s_i๋ ํ๋ผ๋ฏธํฐ θ_i์ ๋ํ ๋น์ฉ ํจ์์ ํธ๋ฏธ๋ถ์ ์ ๊ณฑํ์ฌ ๋์ ํ๋ค. ๋น์ฉ ํจ์๊ฐ i๋ฒ์งธ ์ฐจ์์ ๋ฐ๋ผ ๊ฐํ๋ฅด๋ค๋ฉด s_i๋ ๋ฐ๋ณต์ด ์งํ๋จ์ ๋ฐ๋ผ ์ ์ ์ปค์ง๋ค.
๋ ๋ฒ์จฐ ๋จ๊ณ๋ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ๊ณผ ๊ฑฐ์ ๊ฐ๋ค. ํ ๊ฐ์ง ํฐ ์ฐจ์ด๋ ๊ทธ๋ ์ด๋์ธํธ ๋ฒกํฐ๋ฅผ root_(s + ฯต)์ผ๋ก ๋๋์ด ์ค์ผ์ผ์ ์กฐ์ ํ๋ ์ ์ด๋ค.
์ ์์ ํ์ต๋ฅ : ํ์ต๋ฅ ์ ๊ฐ์์ํค์ง๋ง ๊ฒฝ์ฌ๊ฐ ์๋งํ ์ฐจ์๋ณด๋ค ๊ฐํ๋ฅธ ์ฐจ์์ ๋ํด ๋ ๋น ๋ฅด๊ฒ ๊ฐ์๋๋ค.
์ ์ญ ์ต์ ์ ๋ฐฉํฅ์ผ๋ก ๋ ๊ณง์ฅ ๊ฐ๋๋ก ๊ฐฑ์ ๋๋ ๋ฐ ๋์์ด ๋๋ค. ํ์ต๋ฅ ํ์ดํผํ๋ผ๋ฏธํฐ η๋ฅผ ๋ ํ๋ํด๋ ๋๋ค.
์ ๊ฒฝ๋ง์ ํ๋ จํ ๋ ๋๋ฌด ์ผ์ฐ ๋ฉ์ถ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค. ํ์ต๋ฅ ์ด ๋๋ฌด ๊ฐ์ํ์ฌ ์ ์ญ ์ต์ ์ ์ ๋์ฐฉํ๊ธฐ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ํ ๋ฉ์ถ๋ค.

11.3.4 RMSProp
ํ๋ จ ์์๋ถํฐ์ ๋ชจ๋ ๊ทธ๋ ์ด๋์ธํธ๊ฐ ์๋ ๊ฐ์ฅ ์ต๊ทผ ๋ฐ๋ณต์์ ๋น๋กฏ๋ ๊ทธ๋ ์ด๋์ธํธ๋ง ๋์ ํจ์ผ๋ก์จ ์ ์ญ ์ต์ ์ ์ ์๋ ดํ์ง ๋ชปํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.

optimizer = tf.keras.optimizers.RMSprop(learning_rate=0.001, rho=0.9)11.3.5 Adam (์ ์์ ๋ชจ๋ฉํธ ์ถ์ )
๋ชจ๋ฉํ ์ต์ ํ์ฒ๋ผ ์ง๋ ๊ทธ๋ ์ด๋์ธํธ์ ์ง์ ๊ฐ์ ํ๊ท ์ ๋ฐ๋ฅด๊ณ RMSProp์ฒ๋ผ ์ง๋ ๊ทธ๋ ์ด๋์ธํธ ์ ๊ณฑ์ ์ง์ ๊ฐ์๋ ํ๊ท ์ ๋ฐ๋ฅธ๋ค.
๊ทธ๋ ์ด๋์ธํธ์ ํ๊ท ๊ณผ ํ๊ท ์ด 0์ด ์๋ ๋ถ์ฐ์ ๋ํ ์์ธก์ด๋ค.
์ด ํ๊ท ์ ์ฒซ ๋ฒ์งธ ๋ชจ๋ฉํธ๋ผ ๋ถ๋ฅด๊ณ ๋ถ์ฐ์ ๋ ๋ฒ์งธ ๋ชจ๋ฉํธ๋ผ ๋ถ๋ฌ ์ ์์ ๋ชจ๋ฉํธ ์ถ์ ์ด๋ค.

optimizer = tf.keras.optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999)11.3.6 AdaMax
Adam์ ์๊ฐ์ ๋ฐ๋ผ ๊ฐ์ ๋ ๊ทธ๋ ์ด๋์ธํธ์ l_2 ๋ ธ๋ฆ์ผ๋ก ํ๋ผ๋ฏธํฐ ์ ๋ฐ์ดํธ์ ์ค์ผ์ผ์ ๋ฎ์ถ๋ค.
AdaMax๋ l_2 ๋ ธ๋ฆ์ l_∞ ๋ ธ๋ฆ์ผ๋ก ๋ฐ๊พผ๋ค.
11.3.7 Nadam
Adam ์ตํฐ๋ง์ด์ ์ ๋ค์คํ ๋กํ ๊ธฐ๋ฒ์ ๋ํ ๊ฒ์ด๋ฉฐ Adam๋ณด๋ค ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ์๋ ดํ๋ค.
11.3.8 AdamW
๊ฐ์ค์น ๊ฐ์ ๋ผ๋ ๊ท์ ๊ธฐ๋ฒ์ ํตํฉํ Adam์ ๋ณํ์ด๋ค.
๊ฐ์ค์น ๊ฐ์ ๋ ๊ฐ ํ๋ จ ๋ฐ๋ณต์์ ๋ชจ๋ธ์ ๊ฐ์ค์น์ 0.99์ ๊ฐ์ ๊ฐ์ ๊ณ์๋ฅผ ๊ณฑํ์ฌ ๊ฐ์ค์น์ ํฌ๊ธฐ๋ฅผ ์ค์ธ๋ค.
์ด๋ ๊ฐ์ค์น๋ฅผ ์๊ฒ ์ ์งํ๋ ๊ฒ์ด ๋ชฉํ์ธ l_2 ์ ๊ทํ๊ฐ ์ ์ฌํ๋ฉฐ, ์ค์ ๋ก SGD๋ฅผ ์ฌ์ฉํ ๋ l_2 ์ ๊ทํ๊ฐ ๊ฐ์ค์น ๊ฐ์ ์ ๋์ผํ๋ค๋ ๊ฒ์ ์ํ์ ์ผ๋ก ์ฆ๋ช ํ ์ ์๋ค.

11.3.9 ํ์ต๋ฅ ์ค์ผ์ผ๋ง

๋งค์ฐ ์์ ๊ฐ์์ ๋งค์ฐ ํฐ ๊ฐ๊น์ง ์ง์์ ์ผ๋ก ํ์ต๋ฅ ์ ์ฆ๊ฐ์ํค๋ฉด์ ๋ชจ๋ธ ํ๋ จ์ ๋ฐ๋ณตํ์ฌ ์ข์ ํ์ต๋ฅ ์ ์ฐพ์ ์ ์๋ค.
ํ์ต ๊ณก์ ์ ์ดํด๋ณด๊ณ ๋ค์ ์์นํ๋ ๊ณก์ ๋ณด๋ค ์กฐ๊ธ ๋ ์์ ํ์ต๋ฅ ์ ์ ํํ๋ค.
๊ทธ๋ค์ ๋ชจ๋ธ์ ๋ค์ ์ด๊ธฐํํ๊ณ ์ด ํ์ต๋ฅ ๋ก ํ๋ จํ๋ค.
ํ์ต ์ค์ผ์ค : ํฐ ํ์ต๋ฅ ๋ก ์์ํ๊ณ ํ์ต ์๋๊ฐ ๋๋ ค์ง ๋ ํ์ต๋ฅ ์ ๋ฎ์ถ๋ฉด ์ต์ ์ ๊ณ ์ ํ์ต๋ฅ ๋ณด๋ค ์ข์ ์๋ฃจ์ ์ ๋ ๋นจ๋ฆฌ ๋ฐ๊ฒฌํ ์ ์๋ค.
11.4 ๊ท์ ๋ฅผ ์ฌ์ฉํด ๊ณผ๋์ ํฉ ํผํ๊ธฐ
11.4.1 โ_1๊ณผ โ_2 ๊ท์
์ ๊ฒฝ๋ง์ ์ฐ๊ฒฐ ๊ฐ์ค์น๋ฅผ ์ ํํ๊ธฐ ์ํด โ_2 ๊ท์ ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ง์ ๊ฐ์ค์น๊ฐ 0์ธ ํฌ์ ๋ชจ๋ธ์ ๋ง๋ค๊ธฐ ์ํด โ_1 ๊ท์ ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
layer = tf.keras.layers.Dense(100, activation="relu", kernel_initializer="he_normal", kernel_regularizer=tf.keras.regularizers.l2(0.01))l2() ํจ์๋ ํ๋ จํ๋ ๋์ ๊ท์ ์์ค์ ๊ณ์ฐํ๊ธฐ ์ํด ๊ฐ ์คํ ์์ ํธ์ถ๋๋ ๊ท์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉฐ ์ด ์์ค์ ์ต์ข ์์ค์ ํฉ์ฐ๋๋ค.
l1 ๊ท์ ๊ฐ ํ์ํ๋ฉด keras.regularizers.l1()์ ์ฌ์ฉํ ์ ์๊ณ , l1๊ณผ l2๊ฐ ๋ชจ๋ ํ์ํ๋ฉด keras.regularizers.l1_l2()๋ฅผ ์ฌ์ฉํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋คํธ์ํฌ์ ๋ชจ๋ ์๋ ์ธต์ ๋์ผํ ํ์ฑํ ํจ์, ๋์ผํ ์ด๊ธฐํ ์ ๋ต์ ์ฌ์ฉํ๊ฑฐ๋ ๋ชจ๋ ์ธต์ ๋์ผํ ๊ท์ ๋ฅผ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋งค๊ฐ๋ณ์ ๊ฐ์ ๋ฐ๋ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ํ๊ณ ๋ฒ๊ทธ๋ฅผ ๋ง๋ค๊ธฐ ์ฝ๋ค.
-> ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋๋ก ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋ง ํ ์ ์์ผ๋ฉฐ, ํ์ด์ฌ์ functools.partial() ํจ์๋ฅผ ์ฌ์ฉํด ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ํตํด ํจ์ ํธ์ถ์ ๊ฐ๊น ์ ์๋ค.
from functools import partial RegularizedDense = partial(tf.keras.layers.Dense, activation="relu", kernel_initializer="he_normal", kernel_regularizer=tf.keras.regularizers.l2(0.01)) model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=[28, 28]), RegularizedDense(100), RegularizedDense(100), RegularizedDense(10, activation="softmax") ])11.4.2 ๋๋กญ์์
๋งค ํ๋ จ ์คํ ์์ ๊ฐ ๋ด๋ฐ(์ ๋ ฅ ๋ด๋ฐ์ ํฌํจํ๊ณ ์ถ๋ ฅ ๋ด๋ฐ์ ์ ์ธํ๋ค.)์ ์์์ ์ผ๋ก ๋๋กญ์์๋ ํ๋ฅ p๋ฅผ ๊ฐ์ง๋ค.
์ด๋ฒ ํ๋ จ ์คํ ์์๋ ์์ ํ ๋ฌด์๋์ง๋ง ๋ค์ ์คํ ์์๋ ํ์ฑํ๋ ์ ์๋ค.
ํ์ดํผํ๋ผ๋ฏธํฐ p๋ฅผ ๋๋กญ์์ ๋น์จ์ด๋ผ๊ณ ํ๋ฉฐ, ๋ณดํต 10% ~ 50% ์ฌ์ด๋ก ์ง์ ํ๋ค.
ํ๋ จ์ด ๋๋ ํ์๋ ๋ด๋ฐ์ ๋๋ ๋๋กญ์์์ ์ ์ฉํ์ง ์๋๋ค.
ํ๋ จํ๋ ๋์ ๊ฐ ์ ๋ ฅ์ ์ฐ๊ฒฐ ๊ฐ์ค์น๋ฅผ ๋ณด์กด ํ๋ฅ (1 - p)๋ก ๋๋ ์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์ ๊ฒฝ๋ง์ด ํ๋ จ ์ค, ํ๋ จ ํ์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๊ฒ ๋๋ฏ๋ก ์ ๋๋ก ์๋ํ์ง ์์ ๊ฒ์ด๋ค..
์ผ๋ผ์ค์์๋ tf.keras.layers.Dropout ์ธต์ ์ฌ์ฉํ์ฌ ๋๋กญ์์์ ๊ตฌํํ๋ค.
์ด ์ธต์ ํ๋ จํ๋ ๋์ ์ผ๋ถ ์ ๋ ฅ์ ๋๋คํ๊ฒ ๋ฒ๋ฆฌ๊ณ ๋จ์ ์ ๋ ฅ์ ๋ณด์กด ํ๋ฅ ๋ก ๋๋๋ค.
ํ๋ จ์ด ๋๋ ํ์๋ ์ด๋ค ์์ ๋ ํ์ง ์์ผ๋ฉฐ ์ ๋ ฅ์ ๋ค์ ์ธต์ผ๋ก ๊ทธ๋ฅ ์ ๋ฌํ๋ค.
model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=[28, 28]), tf.keras.layers.Dropout(rate=0.2), tf.keras.layers.Dense(100, activation="relu", kernel_initializer="he_normal") tf.keras.layers.Dropout(rate=0.2), tf.keras.layers.Dense(100, activation="relu", kernel_initializer="he_normal"), tf.keras.layers.Dropout(rate=0.2), tf.keras.layers.Dense(10, activation="softmax") ]) [...] # ๋ชจ๋ธ ์ปดํ์ผ๊ณผ ํ๋ จ๋ชจ๋ธ์ด ๊ณผ๋์ ํฉ๋์๋ค๋ฉด ๋๋กญ์์ ๋น์จ์ ๋๋ฆด ์ ์๊ณ ๋ชจ๋ธ์ด ๊ณผ์์ ํฉ๋๋ฉด ๋๋กญ์์ ๋น์จ์ ๋ฎ์ถ์ด์ผ ํ๋ค.
์ธต์ด ํด ๋๋ ๋๋กญ์์ ๋น์จ์ ๋๋ฆฌ๊ณ ์์ ๋๋ ๋๋กญ์์ ๋น์จ์ ๋ฎ์ถ๋ ๊ฒ์ด ๋์์ด ๋๋ค.
๋ง์ธ ์ต์ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ๋ ๋ง์ง๋ง ์๋์ธต ๋ค์๋ง ๋๋กญ์์์ ์ฌ์ฉํ๋ค.
11.4.3 ๋ชฌํ ์นด๋ฅผ๋ก ๋๋กญ์์
import numpy as np y_probas = np.stack([model(X_test, traning=True) for sample in range(100)]) y_proba = y_probas.mean(axis=0)model(X)๋ ๋ํ์ด ๋ฐฐ์ด์ด ์๋ ํ ์๋ฅผ ๋ฐํํ๋ ์ ์ ์ ์ธํ๊ณ ๋ model.predict(X)์ ๋น์ทํ๊ณ training ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ํ๋ค.
๋๋กญ์์์ผ๋ก ๋ง๋ ์์ธก์ ํ๊ท ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ณด์์ ์์ด ์์ธกํ ํ๋์ ๊ฒฐ๊ณผ๋ณด๋ค ๋ ์์ ์ ์ด๋ค.
๋ชจ๋ธ์ด ํ๋ จํ๋ ๋์ ๋ค๋ฅด๊ฒ ์๋ํ๋ (BatchNormalization ์ธต๊ณผ ๊ฐ์) ์ธต์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์์์์ ๊ฐ์ด ํ๋ จ ๋ชจ๋๋ฅผ ๊ฐ์ ๋ก ์ค์ ํด์๋ ์ ๋๋ค. ๋์ Dropout ์ธต์ MCDropout ํด๋์ค๋ก ๋ฐ๊ฟ์ผ ํ๋ค.
class MCDropout(tf.keras.layers.Dropout): def call(self, inputs, training=False): return super().call(inputs, training=True)Dropout ์ธต์ ์์ํ๊ณ call() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ training ๋งค๊ฐ๋ณ์๋ฅผ True๋ก ๊ฐ์ ๋ก ์ค์ ํ๋ค.
์ด๋ฏธ Dropout์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ๋ จํ๋ค๋ฉด Dropout ์ธต์ MCDropout์ผ๋ก ๋ฐ๊พธ๊ณ ๊ธฐ์กด ๋ชจ๋ธ๊ณผ ๋์ผํ ๋ชจ๋ธ์ ์๋ก ๋ง๋ ๋ค. ๊ทธ ๋ค์ ๊ธฐ์กด ๋ชจ๋ธ์ ๊ฐ์ค์น๋ฅผ ์๋ก์ด ๋ชจ๋ธ๋ก ๋ณต์ฌํ๋ค.
MC ๋๋กญ์์์ ๋๋กญ์์ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ๋์ฌ์ฃผ๊ณ ๋ ์ ํํ ๋ถํ์ค์ฑ ์ถ์ ์ ์ ๊ณตํ๋ ํ๋ฅญํ ๊ธฐ์ ์ด๋ค.
11.4.4 ๋งฅ์ค-๋ ธ๋ฆ ๊ท์
๊ฐ๊ฐ์ ๋ด๋ฐ์ ๋ํด ์ ๋ ฅ์ ์ฐ๊ฒฐ ๊ฐ์ค์น w๊ฐ ||w||_2 ≤ r์ด ๋๋๋ก ์ ํํ๋ค.
r์ ๋งฅ์ค-๋ ธ๋ฆ ํ์ดํผํ๋ผ๋ฏธํฐ์ด๊ณ ||.||_2๋ โ_2 ๋ ธ๋ฆ์ ๋ํ๋ธ๋ค.
์ ์ฒด ์์ค ํจ์์ ๊ท์ ์์คํญ์ ์ถ๊ฐํ์ง ์๋๋ค.
๋์ ์ผ๋ฐ์ ์ผ๋ก ๋งค ํ๋ จ ์คํ ์ด ๋๋๊ณ ||w||_2๋ฅผ ๊ฒ์ฐํ๊ณ ํ์ํ๋ฉด w์ ์ค์ผ์ผ์ ์กฐ์ ํ๋ค.
r์ ์ค์ด๋ฉด ๊ท์ ์ ์์ด ์ฆ๊ฐํ์ฌ ๊ณผ๋์ ํฉ์ ๊ฐ์์ํค๋ ๋ฐ ๋์์ด ๋๋ค.
๋ถ์์ ํ ๊ทธ๋ ์ด๋์ธํธ ๋ฌธ์ ๋ฅผ ์ํํ๋ ๋ฐ ๋์์ ์ค๋ค.
์ผ๋ผ์ค์์ ๋งฅ์ค-๋ ธ๋ฆ ๊ท์ ๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์ ์ ํ ์ต๋๊ฐ์ผ๋ก ์ง์ ํ max_norm()์ด ๋ฐํํ ๊ฐ์ฒด๋ก ์๋ ์ธต์ kernel_constraint ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ๋ค.
dense = tf.keras.laers.Dense( 100, activation="relu", kernel_initializer="he_normal", kernel_constraint=tf.keras.constraints.max_norm(1.))๋งค ํ๋ จ ๋ฐ๋ณต์ด ๋๋ ํ ๋ชจ๋ธ์ fit() ๋ฉ์๋๊ฐ ์ธต์ ๊ฐ์ค์น์ ํจ๊ผ max_norm()์ด ๋ฐํํ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๊ณ ์ค์ผ์ผ์ด ์กฐ์ ๋ ๊ฐ์ค์น๋ฅผ ๋ฐํ๋ฐ๋๋ค. ์ด ๊ฐ์ ์ฌ์ฉํ์ฌ ์ธต์ ๊ฐ์ค์น๋ฅผ ๋ฐ๊พผ๋ค.
max_norm() ํจ์๋ ๊ธฐ๋ณธ๊ฐ์ด 0์ธ axis ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ค.
Dense ์ธต์ ์ผ๋ฐ์ ์ผ๋ก [์ํ ๊ฐ์, ๋ด๋ฐ ๊ฐ์] ํฌ๊ธฐ์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง๋ค.
axis=0์ ์ฌ์ฉํ๋ฉด ๋งฅ์ค-๋ ธ๋ฆ ๊ท์ ๋ ๊ฐ ๋ด๋ฐ์ ๊ฐ์ค์น ๋ฒกํฐ์ ๋ ๋ฆฝ์ ๊ธ๋ก ์ ์ฉ๋๋ค.
'๐ฎ ์ด๊ฒ์ ๊ฒ ๊ณต๋ถ > โฉ ํธ์ฆ์จ ๋จธ์ ๋ฌ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ