Caffe Tutorial : 2.Forward and Backward (kor) - ys7yoo/BrainCaffe GitHub Wiki

์ •๋ฐฉํ–ฅ๊ณผ ์—ญ๋ฐฉํ–ฅ (Forward and Backward)

์ •๋ฐฉํ–ฅ๊ณผ ์—ญ๋ฐฉํ–ฅ ๊ณผ์ •๋“ค์€ ๋ง์˜ ํ•„์ˆ˜์ ์ธ ์—ฐ์‚ฐ์ด๋‹ค. http://caffe.berkeleyvision.org/tutorial/fig/forward_backward.png

Simple Logistic Regression classifier์„ ํ•œ๋ฒˆ ๊ณ ๋ คํ•ด๋ณด์ž. ์ •๋ฐฉํ–ฅ๊ณผ์ •์€ ์ถ”๋ก ์— ๋Œ€ํ•œ ์ž…๋ ฅ์„ ๋ฐ›์€ ์ถœ๋ ฅ์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์ •๋ฐฉํ–ฅ์—์„œ Caffe๋Š” ๋ชจ๋ธ์— ์˜ํ•˜์—ฌ ํ‘œํ˜„๋˜๋Š” "ํ•จ์ˆ˜"๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ณ„์ธต์˜ ์—ฐ์‚ฐ์„ ๊ตฌ์„ฑํ•œ๋‹ค. ์ด๋Ÿฐ ๊ณผ์ •์€ bottom๋ถ€ํ„ฐ top์œผ๋กœ ๊ฐ„๋‹ค. http://caffe.berkeleyvision.org/tutorial/fig/forward.jpg
๋ฐ์ดํ„ฐ x๋Š” g(x)์— ๋Œ€ํ•œ ๋‚ด๋ถ€ ์ƒ์‚ฐ ๊ณ„์ธต(inner production layer)์„ ํ†ตํ•ด ์ง€๋‚˜๊ฐ„ ๋’ค์—, fw(x)๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ์†Œํ”„ํŠธ๋งฅ์Šค ์†์‹ค๊ณผh(g(x))์— ๋Œ€ํ•œ ์†Œํ”„ํŠธ ๋งฅ์Šค๋ฅผ ๊ฑฐ์ณ๊ฐ„๋‹ค.

์—ญ๋ฐฉํ–ฅ๊ณผ์ •์€ ํ•™์Šต์— ๋Œ€ํ•œ ์†์‹ค๋กœ ์ฃผ์–ด์ง„ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์—ญ๋ฐฉํ–ฅ์—์„œ Caffe๋Š” ์ž๋™ ์ฐจ๋ณ„ํ™”์— ์˜ํ•ด ์ „์ฒด ๋ชจ๋ธ์˜ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ๊ฐ ๊ณ„์ธต์˜ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ์—ญ์œผ๋กœ๊ฐ€๋Š” ๊ณผ์ •์„ ๊ตฌ์„ฑํ•œ๋‹ค. ์ด๊ฒƒ์„ Back-Propagation์ด๋ผ ํ•œ๋‹ค. ์ด ๊ณผ์ •์€ top์—์„œ bottom์œผ๋กœ ํ˜๋Ÿฌ๊ฐ„๋‹ค.

http://caffe.berkeleyvision.org/tutorial/fig/backward.jpg

์—ญ๋ฐฉํ–ฅ๊ณผ์ •์€ ์†์‹ค๋กœ ์‹œ์ž‘ํ•ด์„œ ์ถœ๋ ฅ โˆ‚fW/โˆ‚h์— ๋Œ€ํ•˜์—ฌ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๋ชจ๋ธ์˜ ์ž‰์—ฌ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ทธ๋ž˜๋””์–ธํŠธ๋Š” ์—ฐ์‡„๋ฒ•์น™ (The Chain Rule) ์„ ํ†ตํ•˜์—ฌ ๊ณ„์ธต๊ฐ„ ๊ณ„์ธต์„ ๊ณ„์‚ฐํ•œ๋‹ค. ๋‚ด๋ถ€ ์ƒ์‚ฐ ๊ณ„์ธต๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง„ ๊ณ„์ธต์€ ์—ญ๋ฐฉํ–ฅ ๋‹จ๊ณ„๋™์•ˆ ์ด๋“ค์˜ ํŒŒ๋ผ๋ฏธํ„ฐ โˆ‚fW/โˆ‚Wip์— ๋Œ€ํ•˜์—ฌ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ๋“ค์€ ๋ชจ๋ธ์„ ์ •์˜ํ•˜๋ฉด์„œ ์ฆ‰์‹œ ๋™์‹œ์— ์ •์˜๋œ๋‹ค. : Caffe๋Š” ๋‹น์‹ ์„ ์œ„ํ•ด ์ •๋ฐฉํ–ฅ๊ณผ ์—ญ๋ฐฉํ–ฅ๊ณผ์ •๋“ค์„ ๊ณ„ํšํ•˜๊ณ  ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Layer::Forward()์™€ Layer::Backward()๊ฐ€ ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ์—ฐ์‚ฐ๋ฅผ ํ•˜๋ฉด์„œ, Net::Forward()์™€ Net::Backward() ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ๊ฐ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ๋ชจ๋“  ๊ณ„์ธต ํƒ€์ž…์€ ์—ฐ์‚ฐ์˜ ๋ชจ๋“œ์— ๋”ฐ๋ผ์„œ ๊ฐ ๋‹จ๊ณ„๋ฅผ ์—ฐ์‚ฐํ•ด์ฃผ๋Š” forward_{cpu,gpu}()์™€ backward_{cpu,gpu}() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ณ„์ธต์€ ์•„๋งˆ ์ œํ•œ์ด๋‚˜ ํŽธ์˜์„ฑ ๋•Œ๋ฌธ์— CPU์™€ GPU์—์„œ๋งŒ ์ˆ˜ํ–‰ํ• ์ง€๋ชจ๋ฅธ๋‹ค.

ํ•ด๊ฒฐ์‚ฌ๋Š” ๊ฒฐ๊ณผ์™€ ์†์‹ค์„ ์‚ฐ์ถœํ•˜๋Š” ์ •๋ฐฉํ–ฅ์„ ์ฒ˜์Œ์— ํ˜ธ์ถœํ•˜๊ณ , ๋‹ค์Œ์—๋Š” ๋ชจ๋ธ์˜ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์—ญ๋ฐฉํ–ฅ์„ ํ˜ธ์ถœํ•˜๊ณ , ์†์‹ค์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์‹œ๋„๋ฅผ ํ•˜๋Š” ๊ฐ€์ค‘์น˜ ์—…๋ฐ์ดํŠธ๋กœ ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ํ†ตํ•˜์—ฌ ๋ชจ๋ธ์„ ์ตœ์ ํ™”ํ•œ๋‹ค. ํ•ด๊ฒฐ์‚ฌ์™€ ๋ง, ๊ทธ๋ฆฌ๊ณ  ๊ณ„์ธต ์‚ฌ์ด์˜ ๋…ธ๋™๋ถ„๋‹ด์€ Caffe ๋ชจ๋“ˆ์‹์„ ์œ ์ง€ํ•ด์ฃผ๊ณ  ๊ฐœ๋ฐœ์˜ ๊ฐœ๋ฐฉ์„ฑ์„ ์œ ์ง€ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.
Caffe์˜ ๊ณ„์ธต ํƒ€์ž…์˜ ์ •๋ฐฉํ–ฅ๊ณผ ์—ญ๋ฐฉํ–ฅ ๊ณผ์ •์˜ ์ž์„ธํ•œ ์‚ฌํ•ญ์— ๋Œ€ํ•˜์—ฌ ๊ณ„์ธต ๋ชฉ๋ก์— ๋Œ€ํ•˜์—ฌ ์–ธ๊ธ‰ํ•ด๋ณด์ž.

ํŠœํ† ๋ฆฌ์–ผ ๋ฉ”๋‰ด๋กœ ๋Œ์•„๊ฐ€๊ธฐ