机器之心上周介绍了一篇论文,说是不用BP也能训练神经网络,论文叫做《The HSIC Bottleneck: Deep Learning without Back-Propagation》,HSIC Bottleneck: Deep Learning without Back-Propagation](https://arxiv.org/pdf/1908.01580v1.pdf)》,引用了一个HSIC度量,并用其实现了直接从利用输入输出来优化隐藏层的参数。
下面主要讲的我自己对文章的理解,但是不一定对。
HSIC度量
我们一般使用互信息度量两个分布的依赖强弱,但是一般只有在知道两个分布的情况下才能得到。论文直接引用了HSIC度量使用抽样来测量两个分布依赖的强弱。
核函数根据经验使用高斯核函数
用keras实现:
def kernel_matrix(x, sigma):
ndim = K.ndim(x)
x1 = K.expand_dims(x, 0)
x2 = K.expand_dims(x, 1)
axis = tuple(range(2, ndim+1))
return K.exp(-0.5*K.sum(K.pow(x1-x2, 2), axis=axis) / sigma ** 2)
def hsic(Kx, Ky, m):
Kxy = K.dot(Kx, Ky)
h = tf.linalg.trace(Kxy) / m ** 2 + K.mean(Kx) * K.mean(Ky) - \
2 * K.mean(Kxy) / m
return h * (m / (m-1))**2
如何跨层直接优化隐藏层
一个好的隐藏层,它的输出应该尽量跟输出的依赖强和输入的依赖弱。换句话说,就是隐藏层输出应该尽量保存和输出相关的信息,移除和