dropout_layer
Dropout Layer๋?
Dropout Layer๋ ๋ฅ๋ฌ๋์์ ์ค๋ฒํผํ ์ ๋ฐฉ์งํ๊ธฐ ์ํ regularization ๊ธฐ๋ฒ ์ค ํ๋์ ๋๋ค. ์ด ๋ ์ด์ด๋ ํ์ต ์ค์ ์ผ๋ถ ๋ด๋ฐ์ ๋ฌด์์๋ก ์ ํํ์ฌ ์ถ๋ ฅ์ 0์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๋คํธ์ํฌ๊ฐ ํน์ ๋ด๋ฐ์ ๊ณผ๋ํ๊ฒ ์์กดํ์ง ์๋๋ก ํ๊ณ , ๋ด๋ฐ์ ๊ฐ์ค์น๊ฐ ์ ์ฒด ๋ฐ์ดํฐ์ ์ ๋ํด ์ผ๋ฐํ๋๋๋ก ํฉ๋๋ค.
Dropout Layer๋ ์ผ๋ฐ์ ์ผ๋ก fully connected layer๋ convolutional layer ๋ค์์ ์ถ๊ฐ๋ฉ๋๋ค. ํ์ต ์ค์ Dropout Layer๋ฅผ ํต๊ณผํ ์ถ๋ ฅ๊ฐ์ ์ค์ ๋ก ํ์ต์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ , ํ์ต์ด ์๋ฃ๋ ํ์๋ ๋ชจ๋ ๋ด๋ฐ์ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ์ ๊ณ์ฐํฉ๋๋ค. ์ด๋ ์ผ์ข ์ ์์๋ธ ํ์ต๊ณผ ์ ์ฌํ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ค๋ฒํผํ ์ ์ค์ด๊ณ ์ผ๋ฐํ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
Dropout Layer์ ์ฌ์ฉ ์ฌ๋ถ์ dropout ๋น์จ์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ก์จ ์กฐ์ ๋ฉ๋๋ค. ์ด ๊ฐ์ ์ ๊ฒฝ๋ง์ ๋ณต์ก์ฑ๊ณผ ๋ฐ์ดํฐ์ ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์กฐ์ ๋ ์ ์์ต๋๋ค. ๋ํ, Dropout Layer์ ์ฌ์ฉ ์ฌ๋ถ์ ๋น์จ์ ๋คํธ์ํฌ์ ์ผ๋ฐํ ์ฑ๋ฅ๊ณผ ํ์ต ์๋์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
forward_dropout_layer
ํจ์ ์ด๋ฆ: forward_dropout_layer
์ ๋ ฅ:
dropout_layer l: dropout layer์ ๊ตฌ์กฐ์ฒด
network net: neural network์ ๊ตฌ์กฐ์ฒด
๋์:
neural network์์ dropout layer๋ฅผ ์ํํ๋ forward propagation ํจ์
dropout layer๋ ์ ๋ ฅ๊ฐ์ ์ผ๋ถ๋ฅผ 0์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํ๋ค.
๋ง์ฝ ํ์ฌ๊ฐ ํ์ต ๋ชจ๋์ธ ๊ฒฝ์ฐ, ๊ฐ ์ ๋ ฅ๊ฐ์ ๋ํด ํ๋ฅ p(์ฃผ์ด์ง ํ๋ฅ ๊ฐ)๋ณด๋ค ์์ ๊ฐ์ธ ๊ฒฝ์ฐ ํด๋น ์ ๋ ฅ๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํด๋น ์ ๋ ฅ๊ฐ์ (1-p)๋ฐฐ ํด์ค๋ค.
์ด๋, dropout layer๋ ์ ๋ ฅ๊ฐ์ด 0์ผ๋ก ๋ฐ๋ ๋น์จ๋งํผ์ scale factor๋ฅผ ์ ์งํ๋ค. (์ดํ backpropagation ์ ํ์ฉ)
์ค๋ช :
dropout layer๋ overfitting์ ๋ฐฉ์งํ๊ธฐ ์ํ regularization ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ํนํ deep neural network์์ ํจ๊ณผ์ ์ด๋ค.
ํ์ต ์, dropout layer๋ ์ ๋ ฅ๊ฐ ์ค ์ผ๋ถ๋ฅผ ๋ฌด์์๋ก ์ ํํ์ฌ 0์ผ๋ก ๋ง๋ค์ด์ค๋ค. ์ด๋ ๋ชจ๋ธ์ด ํน์ feature์ ๊ณผ๋ํ๊ฒ ์์กดํ์ง ์๋๋ก ํ์ฌ, generalization ๋ฅ๋ ฅ์ ํฅ์์์ผ์ค๋ค.
ํ ์คํธ ์, dropout layer๋ ์ฌ์ฉ๋์ง ์๋๋ค. ๋์ ํ์ต ์ ์ฌ์ฉ๋ ํ๋ฅ p๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฅ๊ฐ์ (1-p)๋ฅผ ๊ณฑํด์ค์ผ๋ก์จ, ํ์ต ์ dropout์ด ์ ์ฉ๋ ๋ชจ๋ธ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ ํด์ค๋ค.
dropout layer๋ fully connected layer์ convolutional layer ๋ชจ๋์์ ์ฌ์ฉ๋ ์ ์๋ค.
backward_dropout_layer
ํจ์ ์ด๋ฆ: backward_dropout_layer
์ ๋ ฅ:
dropout_layer l: ๋๋กญ์์ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด
network net: ์ ๊ฒฝ๋ง ๊ตฌ์กฐ์ฒด
๋์:
๋๋กญ์์ ๋ ์ด์ด์ ์ญ์ ํ(forward pass)๋ฅผ ์ํํ๋ค.
์ญ์ ํ ์, ๋๋คํ๊ฒ ์ ํ๋ ์ ๋ ฅ ๊ฐ์ ๋ํด์๋ง ๊ทธ๋๋์ธํธ(gradient)๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅ๊ฐ์ ๊ฐฑ์ ํ๋ค.
์ค๋ช :
๋คํธ์ํฌ๊ฐ ํ์ต ์ํ์ธ ๊ฒฝ์ฐ์๋ง ๋๋กญ์์ ๋ ์ด์ด์ ์ญ์ ํ๋ฅผ ์ํํ๋ค.
๋๋คํ๊ฒ ์ ํ๋ ์ ๋ ฅ ๊ฐ์ ๋ํ ๊ทธ๋๋์ธํธ๋ ๊ณ์ฐํ์ง ์๊ณ 0์ผ๋ก ์ค์ ํ์ฌ ์ถ๋ ฅ๊ฐ์ ๊ฐฑ์ ํ๋ค.
๊ทธ ์ธ์ ์ ๋ ฅ ๊ฐ์ ๋ํด์๋ scale ๊ฐ์ ๋ฐ๋ผ ๊ทธ๋๋์ธํธ๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅ๊ฐ์ ๊ฐฑ์ ํ๋ค.
resize_dropout_layer
ํจ์ ์ด๋ฆ: resize_dropout_layer
์ ๋ ฅ:
dropout_layer ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ l
int inputs
๋์:
dropout ๋ ์ด์ด์ ๋๋ค ๋๋กญ์์ ๋ง์คํฌ๋ฅผ ์ ๋ ฅ ์์ ๋ง๊ฒ ์กฐ์ ํ๋ค.
์ ๋ ฅ ์๊ฐ ์ด์ ์ ์ค์ ๋ ์ ๋ ฅ ์๋ณด๋ค ์์ ๊ฒฝ์ฐ, ๋ง์คํฌ๋ฅผ ์๋ก์ด ํฌ๊ธฐ์ ๋ง๊ฒ ์กฐ์ ํ๋ค.
GPU ๋ฒ์ ์ ๊ฒฝ์ฐ CUDA ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค์ ํ ๋นํ๊ณ , ์ ๋ฐ์ดํธ๋ ๋๋ค ๋๋กญ์์ ๋ง์คํฌ๋ฅผ ๋ณต์ฌํ๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ dropout_layer ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ l์ rand ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ inputsl->batchsizeof(float)๋ก ์ฌํ ๋นํ๋ค.
GPU๊ฐ ํ์ฑํ๋์ด ์๋ ๊ฒฝ์ฐ, ์ด์ ์ ํ ๋น๋ CUDA ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ ์๋ก์ด ํฌ๊ธฐ์ ๋ง๊ฒ ๋ค์ ํ ๋นํ๋ค.
์ดํ, ์๋ก์ด rand ๋ฐฐ์ด์ CUDA ๋ฉ๋ชจ๋ฆฌ๋ก ๋ณต์ฌํ๋ค.
make_dropout_layer
ํจ์ ์ด๋ฆ: make_dropout_layer
์ ๋ ฅ: batch(int): ๋ฐฐ์น ํฌ๊ธฐ
inputs(int): ์ ๋ ฅ ํฌ๊ธฐ
probability(float): ๋๋กญ์์ ํ๋ฅ
๋์:
๋๋กญ์์ ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ค.
์ค๋ช :
๋๋กญ์์ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธํ๊ณ ์ด๊ธฐํํ๋ค.
๋๋กญ์์ ๋ ์ด์ด์ ํ์ ์ DROPOUT์ผ๋ก ์ค์ ํ๋ค.
๋๋กญ์์ ํ๋ฅ , ์ ๋ ฅ ํฌ๊ธฐ, ์ถ๋ ฅ ํฌ๊ธฐ, ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ค.
์ ๋ ฅ ํฌ๊ธฐ์ ์ถ๋ ฅ ํฌ๊ธฐ๊ฐ ๊ฐ์ผ๋ฏ๋ก l.outputs = l.inputs๋ก ์ค์ ํ๋ค.
๋ฐฐ์น ํฌ๊ธฐ์ ์ ๋ ฅ ํฌ๊ธฐ๋ฅผ ๊ณฑํ ๋งํผ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ๋์ ๋ฐฐ์ด l.rand๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ค.
์ค์ผ์ผ๋ง ํ๋ผ๋ฏธํฐ l.scale์ ๊ณ์ฐํ๋ค.
forward_dropout_layer์ backward_dropout_layer ํจ์๋ฅผ ์ค์ ํ๋ค.
GPU๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, forward_dropout_layer_gpu์ backward_dropout_layer_gpu ํจ์๋ ์ค์ ํ๊ณ , ๋์ ๋ฐฐ์ด l.rand_gpu๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ค.
์์ฑํ ๋๋กญ์์ ๋ ์ด์ด์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ค.
์์ฑํ ๋๋กญ์์ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
Last updated
Was this helpful?