ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • โœฑ ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ๋‹ 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์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งฅ์Šค-๋…ธ๋ฆ„ ๊ทœ์ œ๋Š” ๊ฐ ๋‰ด๋Ÿฐ์˜ ๊ฐ€์ค‘์น˜ ๋ฒกํ„ฐ์— ๋…๋ฆฝ์ €๊ธ๋กœ ์ ์šฉ๋œ๋‹ค.

Designed by Tistory.