MLP 的 Hessian 矩阵 w.r.t 参数不对称TF2.0

问题描述

我试图计算 Hessian 矩阵 w.r.t.模型参数

然而,Hessian 矩阵中的每个张量形状都不是对称的。

import tensorflow as tf

x_train = tf.constant(tf.random.uniform(shape=(100,24),minval=0,maxval=100))
y_train = tf.constant(tf.random.uniform(shape=(100,1),maxval=1))

x_test = tf.constant(tf.random.uniform(shape=(17,maxval=100))
y_test = tf.constant(tf.random.uniform(shape=(17,maxval=1))

f = tf.keras.models.Sequential()
f.add(tf.keras.layers.Dense(30,activation='relu',use_bias=False))
f.add(tf.keras.layers.Dense(1,activation='sigmoid',use_bias=False))
f.compile(loss='binary_crossentropy')
f.fit(x_train,y_train)

ws = f.trainable_weights

with tf.GradientTape(persistent=True) as tape2:
    tape2.watch(x_train)
    with tf.GradientTape(persistent=True) as tape1:
        tape1.watch(x_train)
        y_hat = f(x_train)
        loss = tf.keras.losses.binary_crossentropy(y_train,y_hat)
    grads = tape1.gradient(loss,ws)
    
H = [tape2.gradient(grad,ws) for grad in grads]

print([h_elem.shape for _H in H for h_elem in _H])

输出

[TensorShape([24,30]),TensorShape([30,1]),TensorShape([24,1])]

我期待的形状

[[24,30],[30,1],1]]

考虑Hessian矩阵的对称特性。但是,我不知道为什么我的代码中的第三张量形状是 [24,30]

我怀疑这是因为hessian矩阵遵循方程:

[df(x)/dL1L1,df(x)/dL1,L2,df(x)/dL2,L1,L2]

其中 L 是层的参数。

在这种情况下,第 2 个、第 3 个元素的形状不同。

正确吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)