์๋ ํ์ธ์, ํ ์ํ๋ก
์ต๊ทผ์๋ argmax ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ฌ์ฉํ๊ธฐ ์ ์ ํญ์ tf.stop_gradient๋ฅผ ๋ฐฐ์นํ์ต๋๋ค. ๊ทธ๋ฌ๋ stop_gradient๋ฅผ ์ ๊ฑฐํด๋ tensorflow๋ ์ฌ์ ํ ์ ์๋ํฉ๋๋ค.
๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ์๋ชป ์ดํดํ๊ณ ์๋ ๊ฒ์ผ ์๋ ์์ง๋ง argmax ๋ ๋ฏธ๋ถ ๊ฐ๋ฅํ ํจ์๊ฐ ์๋๋๋ค. ๋ฐฑํ๋กญ์ ์ ๊ฑฐํด๋ ๋ฐฑํ๋กญ์ ์ด๋ป๊ฒ ์๋ํฉ๋๊น? stop_gradient ์์ด argmax๋ฅผ ์ ๋ฌํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์์ผ ํฉ๋๊น?
argmax๋ฅผ ๊ตฌ๋ณํ ์ ์๋ค๋ฉด ์ด๊ฒ์ด ์ด๋ป๊ฒ ์ํ๋๋์ง ๋ณด์ฌ์ฃผ๋ ๋ฆฌ์์ค์ ํฌ๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ฐ์ฌํฉ๋๋ค TF!
Gradient๋ ๊ฑฐ์ ๋ชจ๋ ๊ณณ์์ ์ ์๋๋ฏ๋ก ์ค์ ๋ก ์ ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์ผ๋ฏ๋ก TensorFlow์์ ์ด ์์ ์ ๋ฑ๋ก๋์ง ์์์ต๋๋ค.
x = tf.Variable([1., 1])
z = tf.argmax(x, 0)
sess = create_session()
xgrad = tf.gradients(z, x)
sess.run(tf.initialize_all_variables())
sess.run(xgrad)
LookupError: No gradient defined for operation 'ArgMax' (op type: ArgMax)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Gradient๋ ๊ฑฐ์ ๋ชจ๋ ๊ณณ์์ ์ ์๋๋ฏ๋ก ์ค์ ๋ก ์ ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์ผ๋ฏ๋ก TensorFlow์์ ์ด ์์ ์ ๋ฑ๋ก๋์ง ์์์ต๋๋ค.