logistic_layer

forward_logistic_layer

void forward_logistic_layer(const layer l, network net)
{
    copy_cpu(l.outputs*l.batch, net.input, 1, l.output, 1);
    activate_array(l.output, l.outputs*l.batch, LOGISTIC);
    if(net.truth){
        logistic_x_ent_cpu(l.batch*l.inputs, l.output, net.truth, l.delta, l.loss);
        l.cost[0] = sum_array(l.loss, l.batch*l.inputs);
    }
}

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

์ž…๋ ฅ:

  • const layer l: ๋ ˆ์ด์–ด ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

  • network net: ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ์ฒด

๋™์ž‘:

  • ๋กœ์ง€์Šคํ‹ฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ , ๋งŒ์•ฝ net.truth๊ฐ€ ์ฐธ(True)์ด๋ฉด ๋กœ์ง€์Šคํ‹ฑ ์†์‹ค ํ•จ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ l.loss์™€ l.delta๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , l.cost์— l.loss์˜ ํ•ฉ์„ ์ €์žฅํ•œ๋‹ค.

์„ค๋ช…:

  • copy_cpu(l.outputsl.batch, net.input, 1, l.output, 1): net.input์—์„œ l.output์œผ๋กœ l.outputsl.batch ๊ฐœ์˜ ์‹ค์ˆ˜๊ฐ’์„ ๋ณต์‚ฌํ•œ๋‹ค.

  • activate_array(l.output, l.outputs*l.batch, LOGISTIC): l.output ๋ฐฐ์—ด์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์— ๋Œ€ํ•ด ๋กœ์ง€์Šคํ‹ฑ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ๋‹ค.

  • if(net.truth): ๋งŒ์•ฝ net.truth๊ฐ€ ์ฐธ(True)์ด๋ฉด ๋กœ์ง€์Šคํ‹ฑ ์†์‹ค ํ•จ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ l.loss์™€ l.delta๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , l.cost์— l.loss์˜ ํ•ฉ์„ ์ €์žฅํ•œ๋‹ค.

    • logistic_x_ent_cpu(l.batch*l.inputs, l.output, net.truth, l.delta, l.loss): ๋กœ์ง€์Šคํ‹ฑ ์†์‹ค ํ•จ์ˆ˜์™€ ๊ทธ ๋„ํ•จ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , l.delta์™€ l.loss๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

    • l.cost[0] = sum_array(l.loss, l.batch*l.inputs): l.loss ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ ๋”ํ•˜์—ฌ l.cost[0]์— ์ €์žฅํ•œ๋‹ค.

backward_logistic_layer

void backward_logistic_layer(const layer l, network net)
{
    axpy_cpu(l.inputs*l.batch, 1, l.delta, 1, net.delta, 1);
}

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

์ž…๋ ฅ:

  • const layer l (๋ ˆ์ด์–ด ๊ตฌ์กฐ์ฒด)

  • network net (๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ์ฒด)

๋™์ž‘:

  • ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๋ ˆ์ด์–ด์˜ ์—ญ์ „ํŒŒ(backpropagation)๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๋„คํŠธ์›Œํฌ์˜ ์ด์ „ ๋ ˆ์ด์–ด๋กœ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๋ ˆ์ด์–ด์˜ ์—ญ์ „ํŒŒ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ์œผ๋กœ๋Š” ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๋ ˆ์ด์–ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” layer ๊ตฌ์กฐ์ฒด์™€, ํ•ด๋‹น ๋ ˆ์ด์–ด๋ฅผ ์†Œ์œ ํ•˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” network ๊ตฌ์กฐ์ฒด๊ฐ€ ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜๋Š” l.delta์™€ net.delta๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , net.delta์— ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

make_logistic_layer

layer make_logistic_layer(int batch, int inputs)
{
    fprintf(stderr, "logistic x entropy                             %4d\n",  inputs);
    layer l = {0};
    l.type = LOGXENT;
    l.batch = batch;
    l.inputs = inputs;
    l.outputs = inputs;
    l.loss = calloc(inputs*batch, sizeof(float));
    l.output = calloc(inputs*batch, sizeof(float));
    l.delta = calloc(inputs*batch, sizeof(float));
    l.cost = calloc(1, sizeof(float));

    l.forward = forward_logistic_layer;
    l.backward = backward_logistic_layer;
    #ifdef GPU
    l.forward_gpu = forward_logistic_layer_gpu;
    l.backward_gpu = backward_logistic_layer_gpu;

    l.output_gpu = cuda_make_array(l.output, inputs*batch);
    l.loss_gpu = cuda_make_array(l.loss, inputs*batch);
    l.delta_gpu = cuda_make_array(l.delta, inputs*batch);
    #endif
    return l;
}

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

์ž…๋ ฅ:

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

  • inputs: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ (int)

๋™์ž‘:

  • ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€์™€ ๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ ์†์‹ค ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์™€ ๋ฐฐ์น˜ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ถœ๋ ฅ, ๋กœ์Šค, ๋ธํƒ€, ์ฝ”์ŠคํŠธ ๋“ฑ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ํฌ์›Œ๋“œ(forward)์™€ ๋ฐฑ์›Œ๋“œ(backward) ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€๋Š” ๋ถ„๋ฅ˜ ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜๋กœ, ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์ง„ ๋ถ„๋ฅ˜(binary classification)ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ ์†์‹ค ํ•จ์ˆ˜๋Š” ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์†์‹ค ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋กœ, ์˜ˆ์ธก ๊ฐ’๊ณผ ์‹ค์ œ ๊ฐ’์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ชจ๋ธ์˜ ์†์‹ค์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋Š” ๋ชจ๋ธ์˜ ์ž…๋ ฅ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋ฐฐ์น˜ ํฌ๊ธฐ๋Š” ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Last updated

Was this helpful?