本笔记简单记录链式法则的原理,关于链式法则,本身和高等数学中的链式求导法则是一样的,深度学习中相关资料可以参考这里:
import tensorflow as tf
import numpy as np
tf.__version__
#链式法则
#下面的例子有两个表达式,可以验证
#y2对y1的导数 * y1对w的导数 = y2对w的导数
x = tf.constant(1.)
w1 = tf.constant(2.)
b1 = tf.constant(1.)
w2 = tf.constant(2.)
b2 = tf.constant(1.)
with tf.GradientTape(persistent=True) as tape:
tape.watch([w1,b1,w2,b2])
y1 = x * w1 + b1
y2 = y1 * w2 + b2
#分步单独求导
dy2_dy1 = tape.gradient(y2, [y1])[0]
dy1_dw1 = tape.gradient(y1, [w1])[0]
print("dy2/dy1:", dy2_dy1.numpy(), " dy1_dw1:", dy1_dw1.numpy(), "\ndy2/dy1 * dy1/dw1 = ", (dy2_dy1 * dy1_dw1).numpy())
#直接求dy2对w1的导数
dy2_dw1 = tape.gradient(y2, [w1])[0]
print("dy2/dw1:", dy2_dw1.numpy())
运行结果如下: