connected_layer
Last updated
Was this helpful?
Last updated
Was this helpful?
์ด์ Layer์ ๋ชจ๋ ๋ ธ๋๊ฐ ๋ค์ Layer์ ๋ชจ๋ ๋ ธ๋์ ๊ฐ๊ฐ ํ๋์ฉ ์ฐ๊ฒฐ๋์ด์๋ Layer ์ ๋๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ Layer
1์ฐจ์ ๋ฐฐ์ด๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ดํด๋ฅผ ๋๊ธฐ์ํด ๊ทธ๋ฆผ์ผ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํฌ๊ฒ ๋ณต์กํ์ง ์๊ณ ๋จ์ํ ์ฐ์ฐ์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
Fully Connected Layer ์ญ์ ํ๋ ์ฝ๊ฒ ํํํ๋ ๊ฒฝ์ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
output์ ๊ณ์ฐํ๊ธฐ ์ํด์ ๊ฐ์์ id๋ฅผ ๊ฐ์ง๊ณ ์๋ weight๊ฐ ์ฌ์ฉ๋ ๊ณณ์ ๋ณด์๋ฉด ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด์ ์ ๋ฅผ ์ฐ์ฐํ๋๋ฐ๋ง ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ์ ํด๋น ๊ฐ๋ง ์ฌ์ฉํฉ๋๋ค.
ํจ์ ์ด๋ฆ: forward_connected_layer
์ ๋ ฅ:
layer l: ์ฐ๊ฒฐ ์ธต(layer) ๊ตฌ์กฐ์ฒด
network net: ๋คํธ์ํฌ(network) ๊ตฌ์กฐ์ฒด
๋์:
l.output ๋ฐฐ์ด์ 0์ผ๋ก ์ฑ์
ํ๋ ฌ ๊ณฑ ์ฐ์ฐ(GEMM)์ ์ํํ์ฌ l.output ๋ฐฐ์ด์ ์๋ก์ด ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ํจ
๋ฐฐ์น ์ ๊ทํ(batch normalization)๊ฐ ํ์ฑํ๋์ด ์์ผ๋ฉด, forward_batchnorm_layer ํจ์๋ฅผ ํธ์ถํ์ฌ l.output ๋ฐฐ์ด์ ์ ๋ฐ์ดํธ ํจ
๋ฐฐ์น ์ ๊ทํ๊ฐ ๋นํ์ฑํ๋์ด ์์ผ๋ฉด, l.output ๋ฐฐ์ด์ l.biases ๊ฐ์ ๋ํจ
l.activation ํจ์๋ฅผ ์ฌ์ฉํ์ฌ l.output ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ํ์ฑํ ํจ์๋ฅผ ์ ์ฉํจ
์ค๋ช :
forward_connected_layer ํจ์๋ ์์ ์ฐ๊ฒฐ(fully connected) ์ธต์ ์์ ํ(forward propagation) ์ฐ์ฐ์ ์ํํ๋ ํจ์์ ๋๋ค.
fill_cpu ํจ์๋ฅผ ์ฌ์ฉํ์ฌ l.output ๋ฐฐ์ด์ 0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
GEMM ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ(input) ๋ฐ์ดํฐ์ ๊ฐ์ค์น(weights)๋ฅผ ๊ณฑํ์ฌ l.output ๋ฐฐ์ด์ ์๋ก์ด ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
๋ฐฐ์น ์ ๊ทํ๊ฐ ํ์ฑํ๋์ด ์์ผ๋ฉด, forward_batchnorm_layer ํจ์๋ฅผ ํธ์ถํ์ฌ l.output ๋ฐฐ์ด์ ์ ๋ฐ์ดํธํฉ๋๋ค. ๋ฐฐ์น ์ ๊ทํ๊ฐ ๋นํ์ฑํ๋์ด ์์ผ๋ฉด, l.output ๋ฐฐ์ด์ l.biases ๊ฐ์ ๋ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, activate_array ํจ์๋ฅผ ์ฌ์ฉํ์ฌ l.activation ํจ์๋ฅผ ์ ์ฉํ์ฌ l.output ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ํ์ฑํ ํจ์๋ฅผ ์ ์ฉํฉ๋๋ค.
ํจ์ ์ด๋ฆ: backward_connected_layer
์ ๋ ฅ:
layer l: backpropagation์ด ์ํ๋ fully connected layer
network net: ์ฐ๊ฒฐ๋ neural network
๋์:
l์์ ์ถ๋ ฅ(l.output)๊ณผ ํ์ฑํ ํจ์(l.activation)๋ฅผ ์ฌ์ฉํ์ฌ delta(l.delta)๋ฅผ ๊ณ์ฐ
l์ด batch normalization์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, backward_batchnorm_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ backpropagation์ ์ํํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด backward_bias ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํธํฅ(l.bias_updates)์ delta๋ฅผ ๊ณ์ฐ
l.delta์ ์ ๋ ฅ(net.input)์ ์ฌ์ฉํ์ฌ ๊ฐ์ค์น(l.weights)์ ์ ๋ฐ์ดํธ(l.weight_updates)๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด GEMM ํจ์๋ฅผ ํธ์ถ
l.delta์ l.weights๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ(net.delta)์ delta๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด GEMM ํจ์๋ฅผ ํธ์ถ
ํจ์ ์ด๋ฆ: update_connected_layer
์ ๋ ฅ:
layer l: ์ฐ๊ฒฐ ๊ณ์ธต(layer)์ ๋ํ๋ด๋ ๊ตฌ์กฐ์ฒด
update_args a: ๋ชจ๋ธ ์ ๋ฐ์ดํธ๋ฅผ ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ด์ ๊ตฌ์กฐ์ฒด
๋์:
์ฐ๊ฒฐ ๊ณ์ธต์ ๊ฐ์ค์น(weights)์ ํธํฅ(biases)์ ์ ๋ฐ์ดํธํ๋ ํจ์
๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง a์ ๋ฐ๋ผ learning_rate, momentum, decay, batch ํฌ๊ธฐ๋ฅผ ์ค์ ํ๊ณ , ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ค์น์ ํธํฅ์ ์ ๋ฐ์ดํธํ๋ค.
์ค๋ช :
l.outputs: ํ์ฌ ๊ณ์ธต์ ์ถ๋ ฅ ๊ฐ์
l.bias_updates: ํธํฅ์ ์ ๋ฐ์ดํธ์ ์ฌ์ฉ๋ ๊ฐ๋ค์ด ์ ์ฅ๋ ๋ฐฐ์ด
l.biases: ํ์ฌ ๊ณ์ธต์ ํธํฅ๊ฐ์ด ์ ์ฅ๋ ๋ฐฐ์ด
l.scale_updates: ๋ฐฐ์น ์ ๊ทํ(batch normalization)๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ์ค์ผ์ผ์ ์ ๋ฐ์ดํธ์ ์ฌ์ฉ๋ ๊ฐ๋ค์ด ์ ์ฅ๋ ๋ฐฐ์ด
l.scales: ๋ฐฐ์น ์ ๊ทํ๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ์ค์ผ์ผ๊ฐ์ด ์ ์ฅ๋ ๋ฐฐ์ด
l.inputs: ์ด์ ๊ณ์ธต์ ์ถ๋ ฅ ๊ฐ์ ํน์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ฐจ์ ์
l.weights: ๊ฐ์ค์น๊ฐ์ด ์ ์ฅ๋ ๋ฐฐ์ด
l.weight_updates: ๊ฐ์ค์น์ ์ ๋ฐ์ดํธ์ ์ฌ์ฉ๋ ๊ฐ๋ค์ด ์ ์ฅ๋ ๋ฐฐ์ด
learning_rate: ํ์ต๋ฅ (learning rate) ๊ฐ
momentum: ๋ชจ๋ฉํ (momentum) ๊ฐ
decay: ๊ฐ์ค์น ๊ฐ์(weight decay) ๊ฐ
batch: ํ์ฌ ๋ฐฐ์น(batch)์ ํฌ๊ธฐ
axpy_cpu(): BLAS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ ์ค ํ๋๋ก, ๋ฒกํฐ ๊ฐ์ ์ฐ์ฐ์ ์ํํ๋ ํจ์
scal_cpu(): ๋ฒกํฐ์ ์ค์นผ๋ผ ๊ฐ์ ๊ณฑํ๋ ํจ์
๋จผ์ , ํธํฅ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๋ค. ์ด ๋, axpy_cpu() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํธํฅ์ ์ ๋ฐ์ดํธ๊ฐ์ ํธํฅ๊ฐ์ ๋ํ๊ณ , scal_cpu() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ฉํ ๊ฐ์ผ๋ก ๊ณฑํด์ค๋ค.
๋ง์ฝ ๋ฐฐ์น ์ ๊ทํ๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ์ค์ผ์ผ ์ ๋ฐ์ดํธ๋ ์ํํ๋ค. ์ด ๋, axpy_cpu() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ผ์ผ์ ์ ๋ฐ์ดํธ๊ฐ์ ์ค์ผ์ผ๊ฐ์ ๋ํ๊ณ , scal_cpu() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ฉํ ๊ฐ์ผ๋ก ๊ณฑํด์ค๋ค.
๊ฐ์ค์น ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๋ค. ์ด ๋, axpy_cpu() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ค์น์ ์ ๋ฐ์ดํธ๊ฐ์ ๋ํ ๊ฐ์ ๋จผ์ weight_updates์ ๋ํ ๋ค์, ๊ฐ์ค์น์ ์ด ๊ฐ์ ๋ํ๋ค. ์ดํ, scal_cpu() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ฉํ ๊ฐ์ผ๋ก ๊ณฑํด์ค๋ค.
ํจ์ ์ด๋ฆ: make_connected_layer
์ ๋ ฅ:
batch: intํ, ๋ฐฐ์น ํฌ๊ธฐ(batch size)
inputs: intํ, ์ ๋ ฅ ํฌ๊ธฐ(input size)
outputs: intํ, ์ถ๋ ฅ ํฌ๊ธฐ(output size)
activation: ACTIVATION ์ด๊ฑฐํ, ํ์ฑํ ํจ์(activation function)
batch_normalize: intํ, ๋ฐฐ์น ์ ๊ทํ ์ฌ๋ถ(batch normalization flag)
adam: intํ, Adam ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ ์ฌ๋ถ(Adam optimization flag)
๋์:
์ ๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ ์ฌ์ด์ fully connected layer๋ฅผ ์์ฑํ๋ค.
๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต(batch normalization layer)์ ์์ฑํ๋ค.
Adam ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, Adam์ ํ์ํ ๋ณ์๋ค์ ์ด๊ธฐํํ๋ค.
๊ฐ์ค์น(weight), ํธํฅ(bias) ๋ฑ์ ๋ณ์๋ค์ ์ด๊ธฐํํ๋ค.
์ค๋ช :
์ ๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ ์ฌ์ด์ fully connected layer๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
layer ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธํ๊ณ , ํ์ํ ๋ณ์๋ค์ ์ด๊ธฐํํ ํ ๋ฐํํ๋ค.
layer ๊ตฌ์กฐ์ฒด์ fields:
type: ๋ ์ด์ด์ ํ์ ์ ๋ํ๋ด๋ ์ด๊ฑฐํ(enum) ๋ณ์
inputs: ์ ๋ ฅ ํฌ๊ธฐ
outputs: ์ถ๋ ฅ ํฌ๊ธฐ
batch: ๋ฐฐ์น ํฌ๊ธฐ
batch_normalize: ๋ฐฐ์น ์ ๊ทํ ์ฌ์ฉ ์ฌ๋ถ
h, w, c: ๋ ์ด์ด์ ๋์ด, ๋๋น, ์ฑ๋ ์
out_h, out_w, out_c: ์ถ๋ ฅ ๋ ์ด์ด์ ๋์ด, ๋๋น, ์ฑ๋ ์
output: ๋ ์ด์ด์ ์ถ๋ ฅ๊ฐ
delta: ๋ ์ด์ด์ ์ญ์ ํ ์ ๊ทธ๋ ์ด๋์ธํธ ๊ฐ
weights: ๊ฐ์ค์น
biases: ํธํฅ
weight_updates: ๊ฐ์ค์น ๊ฐฑ์ ๊ฐ
bias_updates: ํธํฅ ๊ฐฑ์ ๊ฐ
forward: ๋ ์ด์ด์ ์์ ํ ํจ์ ํฌ์ธํฐ
backward: ๋ ์ด์ด์ ์ญ์ ํ ํจ์ ํฌ์ธํฐ
update: ๋ ์ด์ด์ ๊ฐ์ค์น์ ํธํฅ์ ๊ฐฑ์ ํ๋ ํจ์ ํฌ์ธํฐ
scales: ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต์ ์ค์ผ์ผ(scale) ๊ฐ
scale_updates: ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต์ ์ค์ผ์ผ ๊ฐฑ์ ๊ฐ
mean: ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต์ ํ๊ท (mean) ๊ฐ
mean_delta: ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต์ ํ๊ท ๊ฐฑ์ ๊ฐ
variance: ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต์ ๋ถ์ฐ(variance) ๊ฐ
variance_delta: ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต์ ๋ถ์ฐ ๊ฐฑ์ ๊ฐ
rolling_mean: ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต์ ์ด๋ ํ๊ท ๊ฐ
rolling_variance: ๋ฐฐ์น ์ ๊ทํ ๊ณ์ธต์ ์ด๋ ๋ถ