微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。