Python 理解JAX-argnums参数的梯度函数

Python 理解JAX-argnums参数的梯度函数,python,automatic-differentiation,jax,Python,Automatic Differentiation,Jax,我试图理解JAX梯度函数中argnums的行为。 假设我有以下函数: def make_mse(x, t): def mse(w,b): return np.sum(jnp.power(x.dot(w) + b - t, 2))/2 return mse 我用下面的方法计算梯度: w_gradient, b_gradient = grad(make_mse(train_data, y), (0,1))(w,b) argnums=(0,1)在这种情况下,它是什么意思?关

我试图理解JAX梯度函数中
argnums
的行为。 假设我有以下函数:

def make_mse(x, t):  
  def mse(w,b): 
    return np.sum(jnp.power(x.dot(w) + b - t, 2))/2
  return mse 
我用下面的方法计算梯度:

w_gradient, b_gradient = grad(make_mse(train_data, y), (0,1))(w,b)
argnums=(0,1)
在这种情况下,它是什么意思?关于哪些变量计算梯度?如果改用
argnums=0
,会有什么不同? 另外,我可以使用相同的函数来获得Hessian矩阵吗


我查看了有关它的部分,但没有弄清楚它

当您将多个argnums传递给grad时,结果是一个返回渐变元组的函数,相当于您单独计算每个渐变:

定义f(x,y): 返回x**2+x*y+y**2 df_dxy=grad(f,argnums=(0,1)) df_dx=grad(f,argnums=0) df_dy=grad(f,argnums=1) x=3.0 y=4.25 断言df_dxy(x,y)==(df_dx(x,y),df_dy(x,y)) 如果要计算混合二阶导数,可以重复应用梯度:

d2f_dxdy=grad(grad(f,argnums=0),argnums=1)
断言d2f_dxdy(x,y)==1