Tensorflow 的 backward propagation 到底是怎么算的呀?

听说 TF 可以自动算梯度。求大侠讲解下背后的原理是什么呀?


提问人:舟 3332,发帖时间: 2018-4-17 10:43:41

“BP 是逐层计算的”,这是 BP 可以自动计算的基础。

在 Tensorflow 中,每一个原子 Op,都定义了梯度如何计算,只要沿着 Tensorflow Graph,从后往前,逐层调用梯度函数,并套到 BP 的公式去计算,就可以实现自动计算。


dahua,2018-4-17 11:02:30

想问一下更具体的问题,比如我 定义了一个 add op
c = tf.add (a, b)
那么我要怎么样定义他的 gradient 呢?感觉这种偏导数很难定义呀。


舟 3332,发表于 2018-4-17 11:09:32

其实不难,
微积分中的链式法则
复合函数的导数,相乘:
z (y (x))
dz/dx = (dz/dy)*(dy/dz)
如果有多个中间函数,通过每个中间函数的导数加和:
z (y1 (x), y2 (x))
dz/dx = dz/dy1 * dy1/dx + dz/dy2 *dy2/dx
如果:z 是标量,y、x 都是向量
z 对 x 的一个分量导数:dz/dxi = 对每个 yi 分量求和 ( dz/dyj * dyj/dxi)
z 对 x 的导数向量 = (y 对 x 的 jacobi 矩阵的转秩)x (z 对 y 的导数向量)

《deep learning》中看到的,反向传播中的基本原理。


心有猛虎,发表于 2018-4-17 11:32:48

c = tf.add (a, b) 只是運算 並沒有 weights 所以不會做 gradient descent


isly831130,发表于 2018-4-17 14:51:44

其实就是单个步骤然后反向传播,反正都是 tf 自己算得,不用关系这个细节啦。

当然你要是真的想自己操作,可以手动写反向传播,就是个数学公式而已,同时可以调用 api,指定某些可以传播某写不能传播


ViolinSolo,发表于 2018-7-3 20:04:46