githubEdit

local_layer

local_out_height

int local_out_height(local_layer l)
{
    int h = l.h;
    if (!l.pad) h -= l.size;
    else h -= 1;
    return h/l.stride + 1;
}

ํ•จ์ˆ˜ ์ด๋ฆ„: local_out_height

์ž…๋ ฅ:

  • local_layer l: ๋กœ์ปฌ ๋ ˆ์ด์–ด ๊ตฌ์กฐ์ฒด

๋™์ž‘:

  • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ๋†’์ด(height)์— ๋Œ€ํ•œ ์ถœ๋ ฅ ๋†’์ด(output height)๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

  • ํŒจ๋”ฉ(padding)์ด ์ ์šฉ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ•„ํ„ฐ(filter) ํฌ๊ธฐ(size)๋งŒํผ ๋†’์ด๋ฅผ ์ค„์ด๊ณ , ํŒจ๋”ฉ์ด ์ ์šฉ๋œ ๊ฒฝ์šฐ ๋†’์ด์—์„œ 1๋งŒํผ ๋นผ์ค€๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์ถœ๋ ฅ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด stride๋กœ ๋‚˜๋ˆ„๊ณ  1์„ ๋”ํ•ด์ค€๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ํ•„ํ„ฐ์™€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ, ์ŠคํŠธ๋ผ์ด๋“œ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๊ณ„์‚ฐํ•œ๋‹ค.

  • ์ด ๊ณ„์‚ฐ์€ ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ์ˆœ์ „ํŒŒ(forward propagation) ๋‹จ๊ณ„์—์„œ ํ•„์š”ํ•˜๋ฉฐ, ์ถœ๋ ฅ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์€ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

local_out_width

ํ•จ์ˆ˜ ์ด๋ฆ„: local_out_width

์ž…๋ ฅ:

  • local_layer l (๋กœ์ปฌ ๋ ˆ์ด์–ด ๊ตฌ์กฐ์ฒด)

๋™์ž‘:

  • ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ ๋„ˆ๋น„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์ž…๋ ฅ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๋กœ์ปฌ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์ถœ๋ ฅ ์ด๋ฏธ์ง€์˜ ๋„ˆ๋น„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • ๋„ˆ๋น„๋Š” ํŒจ๋”ฉ์ด ์ ์šฉ๋œ ๊ฒฝ์šฐ ์ž…๋ ฅ ๋„ˆ๋น„์—์„œ ํ•„ํ„ฐ ํฌ๊ธฐ๋ฅผ ๋บ€ ๊ฐ’์— 1์„ ๋”ํ•œ ํ›„, ์ŠคํŠธ๋ผ์ด๋“œ๋กœ ๋‚˜๋ˆ„์–ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

forward_local_layer

ํ•จ์ˆ˜ ์ด๋ฆ„: forward_local_layer

์ž…๋ ฅ:

  • const local_layer l

  • network net

๋™์ž‘:

  • ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ์ˆœ์ „ํŒŒ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ im2col ๋ฐฉ์‹์œผ๋กœ ์ „์ฒ˜๋ฆฌํ•˜๊ณ , ์ปค๋„๊ณผ์˜ ํ–‰๋ ฌ๊ณฑ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ถœ๋ ฅ๊ฐ’์„ ์–ป์Šต๋‹ˆ๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • l: ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ฒด

  • net: ๋„คํŠธ์›Œํฌ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ฒด

  • out_h: ์ถœ๋ ฅ๊ฐ’์˜ ๋†’์ด

  • out_w: ์ถœ๋ ฅ๊ฐ’์˜ ๋„ˆ๋น„

  • locations: ์ถœ๋ ฅ๊ฐ’์˜ ์ „์ฒด ํฌ๊ธฐ

  • biases: ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ํŽธํ–ฅ๊ฐ’

  • input: ๋„คํŠธ์›Œํฌ์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ

  • output: ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ๊ฐ’

  • weights: ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ๊ฐ€์ค‘์น˜๊ฐ’

  • a: ์ปค๋„๊ณผ ์ž…๋ ฅ๊ฐ’์„ ํ–‰๋ ฌ๊ณฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด

  • b: im2col ๋ฐฉ์‹์œผ๋กœ ์ „์ฒ˜๋ฆฌ๋œ ์ž…๋ ฅ๊ฐ’

  • c: ์ถœ๋ ฅ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด

  • m, n, k: ํ–‰๋ ฌ๊ณฑ์„ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜

  • activate_array: ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๋Š” ํ•จ์ˆ˜

backward_local_layer

ํ•จ์ˆ˜ ์ด๋ฆ„: backward_local_layer

์ž…๋ ฅ:

  • local_layer ๊ตฌ์กฐ์ฒด l

  • network ๊ตฌ์กฐ์ฒด net

๋™์ž‘:

  • local_layer๋ฅผ ์—ญ์ „ํŒŒํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๋ธํƒ€๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๋ฐ”์ด์–ด์Šค ์—…๋ฐ์ดํŠธ ๋ฐ ๊ฐ€์ค‘์น˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ดํ›„ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๋ธํƒ€๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • l.delta: ์ถœ๋ ฅ๊ฐ’์˜ ๋ธํƒ€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด

  • l.bias_updates: ๋ฐ”์ด์–ด์Šค ์—…๋ฐ์ดํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด

  • l.weight_updates: ๊ฐ€์ค‘์น˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด

  • net.workspace: im2col ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด

  • net.delta: ์ด์ „ ๋ ˆ์ด์–ด์˜ ๋ธํƒ€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด

  1. ์ถœ๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๋ธํƒ€๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ชจ๋“  ๋ฐฐ์น˜์— ๋Œ€ํ•ด ๋ฐ”์ด์–ด์Šค ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ชจ๋“  ๋ฐฐ์น˜์— ๋Œ€ํ•ด im2col ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ชจ๋“  ๋ฐฐ์น˜ ๋ฐ ์œ„์น˜์— ๋Œ€ํ•ด ๊ฐ€์ค‘์น˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  5. ์ด์ „ ๋ ˆ์ด์–ด์˜ ๋ธํƒ€๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  net.delta ๋ฐฐ์—ด์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

update_local_layer

ํ•จ์ˆ˜ ์ด๋ฆ„: update_local_layer

์ž…๋ ฅ:

  • local_layer l: ๋กœ์ปฌ ๋ ˆ์ด์–ด ๊ฐ์ฒด

  • update_args a: ์—…๋ฐ์ดํŠธ ์ธ์ž ๊ฐ์ฒด

๋™์ž‘:

  • ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ๊ฐ€์ค‘์น˜์™€ ํŽธํ–ฅ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ์—…๋ฐ์ดํŠธ๋Š” ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

  • ํŽธํ–ฅ์€ ๋ฐฐ์น˜ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ํ•™์Šต๋ฅ ๊ณผ ๋ชจ๋ฉ˜ํ…€์„ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๊ฐ€์ค‘์น˜๋Š” ํ•™์Šต๋ฅ ๊ณผ ๊ฐ€์ค‘์น˜ ๊ฐ์‡ , ๋ชจ๋ฉ˜ํ…€์„ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • local_layer: ๋กœ์ปฌ ๋ ˆ์ด์–ด ๊ฐ์ฒด๋กœ, ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ, ๊ฐ€์ค‘์น˜, ํŽธํ–ฅ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • update_args: ์—…๋ฐ์ดํŠธ ์ธ์ž ๊ฐ์ฒด๋กœ, ํ•™์Šต๋ฅ , ๋ชจ๋ฉ˜ํ…€, ๊ฐ€์ค‘์น˜ ๊ฐ์‡ , ๋ฐฐ์น˜ ํฌ๊ธฐ ๋“ฑ์˜ ์—…๋ฐ์ดํŠธ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • axpy_cpu(): ๋ฒกํ„ฐ ๋ง์…ˆ๊ณผ ์Šค์นผ๋ผ ๊ณฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • scal_cpu(): ๋ฒกํ„ฐ๋ฅผ ์Šค์นผ๋ผ๋กœ ๊ณฑํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

make_local_layer

ํ•จ์ˆ˜ ์ด๋ฆ„: make_local_layer

์ž…๋ ฅ:

  • int batch: ๋ฐฐ์น˜ ํฌ๊ธฐ

  • int h: ์ž…๋ ฅ ์ด๋ฏธ์ง€ ๋†’์ด

  • int w: ์ž…๋ ฅ ์ด๋ฏธ์ง€ ๋„ˆ๋น„

  • int c: ์ž…๋ ฅ ์ด๋ฏธ์ง€ ์ฑ„๋„ ์ˆ˜

  • int n: ํ•„ํ„ฐ ์ˆ˜

  • int size: ํ•„ํ„ฐ ํฌ๊ธฐ

  • int stride: ์ŠคํŠธ๋ผ์ด๋“œ

  • int pad: ํŒจ๋”ฉ

  • ACTIVATION activation: ํ™œ์„ฑํ™” ํ•จ์ˆ˜

๋™์ž‘:

  • ๋กœ์ปฌ ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์„ค๋ช…:

  • ๋กœ์ปฌ ๋ ˆ์ด์–ด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š”๋‹ค.

  • ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ ํฌ๊ธฐ์™€ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

  • ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ ๊ฐ€์ค‘์น˜, ํŽธํ–ฅ, ์ถœ๋ ฅ, ๋ธํƒ€, ๊ฐ€์ค‘์น˜ ์—…๋ฐ์ดํŠธ, ํŽธํ–ฅ ์—…๋ฐ์ดํŠธ ๋“ฑ์„ ์ €์žฅํ•  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

  • ๊ฐ€์ค‘์น˜๋Š” sqrt(2./(sizesizec))๋กœ ์Šค์ผ€์ผ๋ง๋œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋ฉฐ, ํŽธํ–ฅ์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

  • ๋กœ์ปฌ ๋ ˆ์ด์–ด์˜ forward, backward, update ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.

  • ์ดˆ๊ธฐํ™”๋œ ๋กœ์ปฌ ๋ ˆ์ด์–ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Last updated