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์ ๊ณ์ธต ํ์
์ ์ ๋ฐฉํฅ๊ณผ ์ญ๋ฐฉํฅ ๊ณผ์ ์ ์์ธํ ์ฌํญ์ ๋ํ์ฌ ๊ณ์ธต ๋ชฉ๋ก์ ๋ํ์ฌ ์ธ๊ธํด๋ณด์.