Closed chenz1hao closed 3 years ago
你好,感谢对我们工作的关注,以下是具体的解答,希望对你有帮助: (1)left和right参数主要用于之前对可训练的BinarizeLayer的尝试,但后来使用了固定bound的BinarizeLayer,所以你可以忽略left和right参数,直接默认保持None即可。 (2)由于我们用0和1分别表示False和True,所以1-x即为~x,也即NOT x。 (3)这其实就是论文中所说的skip connection。skip connection主要是为了自动跳过不必要的层,从而使层数较多的模型更容易收敛、学到的规则更简单。 (4)是的,estimated_grad这个选项就是对应了我们论文中所讲的这个trick。 (5)是的,这个导数可以通过手动计算交叉熵损失函数的导数得来(因为RRL用了交叉熵损失函数,如果用其他的损失函数,需要手动计算对应导数)。 (6)这主要是由于采用了梯度嫁接法(Gradient Grafting,详见论文),梯度嫁接法优化的loss是离散模型的loss,而连续模型主要用于为离散模型衡量边权的变化对节点值的影响大小。
感谢大佬的回复,基本清楚了,另外:interpretable是否就是体现在整个预测过程是透明的,比如有新样本来了被预测为class_x,我们可以找到该新样本所激活的那些解释规则集。
嗯嗯,是的。普遍认为离散的规则模型由于其形式上的优势,其可解释性要优于神经网络一类的模型。另外RRL还可以控制模型的复杂度,因此可以进一步确保可解释性
最近在学习大佬的这篇文章以及源码,现在有几个小问题希望能得到您的解答。 (1) RRL类构造函数里的left、right参数没有怎么看懂是什么作用
(2) 同样也是RRL构造函数中的use_not参数,是可以让解释集规则中包含一些“~“规则,但是好像论文原文中没有提到这个细节。
(3) 第四层开始每一层的输入都要包含前两层的输出,这个细节在文中图片里有体现但是好像没有文字描述这个过程,想知道这样组合输入的原因是什么呢。
(4) estimated_grad参数用于选择conjunction_layer和disjunction_layer输出时的激活函数,我发现EstimatedProduct和Product只有backward()函数不同,这两个的差异是否就是对应论文这句话的描述呢,EstimatedProduct的反向传播时在导数的基础外又套了一个自定义的激活函数
(5) mllp为权重连续的version,rrl为mllp权重离散化后的离散version,在反向传播训练的时候第一步先将 rrl的loss关于rrl的y_pred的导数求出,之后按照常规的mllp的y_pred对参数求导,实现梯度嫁接的过程: 在代码实现中,,backward内传入的参数就是rrl的loss关于rrl的y_pred的导数吗?但是该导数是如何推出的呢?
(6) mllp是该模型的连续权重值版本(权重都位于[0-1]之间,用于训练),rrl是mllp的权重离散化后的二值权重版本(权重都属于{0,1},以0.5为分割阈值点,用于训练、测试、提取解释规则),离散version在参数反向传播过程中只参与了一小部分,大部分还是根据连续版本的mllp来调整参数的,但是在实际训练过程中发现mllp的loss很难收敛而且loss要比rrl高很多,常理来说应该连续版本的mllp的性能会比离散化后的rrl高的吧,这一点不太明白。
不知道我对这篇文章理解的是否到位,可能描述的不太清楚,希望大佬能够抽空解答一下问题,非常感谢啦。