TensorFlow documentation解释了 功能
tf.gradients(
ys,
xs,
grad_ys=None,
name='gradients',
colocate_gradients_with_ops=False,
gate_gradients=False,
aggregation_method=None,
stop_gradients=None
)
说:
我发现很难将其与梯度的数学定义联系起来。例如,根据wikipedia,标量函数f(x1,x2,x3,...,xn)的 gradient 是一个矢量场(即函数grad f:Rn -> Rn)具有涉及矢量点积的某些属性。您也可以在某个点上谈论f的梯度:(grad f)(x1,x2,x3,...,xn)。
TensorFlow文档谈论的是张量而不是矢量:梯度的定义可以从将矢量映射到标量的函数到将张量映射到标量的函数进行概括吗?张量之间是否存在点积?
即使梯度的定义可以应用于将张量映射到标量的函数f中(定义中的点积在张量上起作用),该文档也谈到了区分张量本身:参数ys是“张量或要区分的张量列表”。根据文档“张量是用于计算的多维数组”,因此张量不是函数,如何区分它?
那么,TensorFlow中的梯度概念与维基百科的定义到底有什么关系?
答案 0 :(得分:0)
人们会期望 Tensorflow梯度只是Jacobian,即秩( m )张量 Y 对等级( n )张量 X 是由每个单独的导数∂Y <组成的等级( m + n )张量em> j 1 ... j m /∂X i 1 ... i n 。
但是,您可能会注意到梯度实际上不是等级( m + n )张量,而是始终采用张量的等级 n > X -实际上,Tensorflow给出了标量和( Y )对 X 的梯度。
当然,真正的雅可比行列式存储在内部,以便在应用Chain规则时进行计算。