Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

合取层的疑问待解决 #3

Closed
notAFigure opened this issue Dec 2, 2021 · 10 comments
Closed

合取层的疑问待解决 #3

notAFigure opened this issue Dec 2, 2021 · 10 comments

Comments

@notAFigure
Copy link

作者你好,非常喜欢您的工作。
对于合取层,我有一个小问题,对于连续的特征来说,先对特征进行离散化然后进行编码one-hot,比如A特征,假如随机离散化划分阈值为10 20 30,那可能得到的one-hot特征就为(-inf,10)、[10,20),[30,+inf),这样训练完后,如果在合取层上的一个节点与输入的多个节点有连边,那就进行合取操作,但是这样问题是比如:(-inf,10)节点与[10,20)节点都与合取层的某一个节点有连边,那就意味着这条规则是 (-inf,10)&[10,20),这样的规则明显是不可能出现的,就意味着这条规则永远不会被激活。
想知道作者对于这种情况是如何处理考虑的呢?

@12wang3
Copy link
Owner

12wang3 commented Dec 3, 2021

您好,感谢您对我们工作的关注。您说的这种情况在处理"Dead Node"的时候就处理掉了。我们会统计一直激活或一直不激活的节点,由于这类节点对于最终分类没有作用,我们可以将这类节点从模型中去除。

不过我更推荐你使用我们最新的工作https://github.com/12wang3/rrl,该工作同样可以学习离散规则,并能够直接优化离散模型,还有更好的可扩展性。

@notAFigure
Copy link
Author

哦哦,明白了,意思就是这样的规则就直接从rule set中移除掉是吗

@notAFigure
Copy link
Author

不过我更推荐你使用我们最新的工作https://github.com/12wang3/rrl,该工作同样可以学习离散规则,并能够直接优化离散模型,还有更好的可扩展性。

我也参考了rrl里面的梯度嫁接优化方法,但是网络结构还是依然用的mllp这样,一层里面只有合取或者析取规则不是像rrl那样的一层中是合取析取的concat。

@12wang3
Copy link
Owner

12wang3 commented Dec 3, 2021

哦哦,明白了,意思就是这样的规则就直接从rule set中移除掉是吗

是的,因为如果一个节点一直激活或一直不激活,那么和它直接相连的上层节点,要么也是一直激活或一直不激活,要么就不受该节点影响。

@12wang3
Copy link
Owner

12wang3 commented Dec 3, 2021

不过我更推荐你使用我们最新的工作https://github.com/12wang3/rrl,该工作同样可以学习离散规则,并能够直接优化离散模型,还有更好的可扩展性。

我也参考了rrl里面的梯度嫁接优化方法,但是网络结构还是依然用的mllp这样,一层里面只有合取或者析取规则不是像rrl那样的一层中是合取析取的concat。

嗯嗯,网络结构可以根据自己对任务的理解以及偏好来设置。不过在计算资源足够的情况下,RRL的设计(即一层逻辑层是合取层与析取层的concat)更好一些,或者说至少效果上不会更差。

@notAFigure
Copy link
Author

哦哦,明白了,意思就是这样的规则就直接从rule set中移除掉是吗

是的,因为如果一个节点一直激活或一直不激活,那么和它直接相连的上层节点,要么也是一直激活或一直不激活,要么就不受该节点影响。

貌似通过dead node detection不能删掉我说那种情况的规则,比如这里我试一个数据集,可以发现得到的规则中有问题, 'ExternalRiskEstimate_1_<64.0_0', ' ExternalRiskEstimate_2_64.0<=X<68.0_0' 在规则中要求同时满足,但是实际数据集是不会离散化成这样,也就是这条规则永远不会被激活。
image

@12wang3
Copy link
Owner

12wang3 commented Dec 5, 2021

哦哦,明白了,意思就是这样的规则就直接从rule set中移除掉是吗

是的,因为如果一个节点一直激活或一直不激活,那么和它直接相连的上层节点,要么也是一直激活或一直不激活,要么就不受该节点影响。

貌似通过dead node detection不能删掉我说那种情况的规则,比如这里我试一个数据集,可以发现得到的规则中有问题, 'ExternalRiskEstimate_1_<64.0_0', ' ExternalRiskEstimate_2_64.0<=X<68.0_0' 在规则中要求同时满足,但是实际数据集是不会离散化成这样,也就是这条规则永远不会被激活。 image

"ExternalRiskEstimate_1"和"ExternalRiskEstimate_2"这俩不是同一个特征吧?所以'ExternalRiskEstimate_1_<64.0_0'和 ' ExternalRiskEstimate_2_64.0<=X<68.0_0'应该是可以同时被满足的。

@notAFigure
Copy link
Author

哦哦,明白了,意思就是这样的规则就直接从rule set中移除掉是吗

是的,因为如果一个节点一直激活或一直不激活,那么和它直接相连的上层节点,要么也是一直激活或一直不激活,要么就不受该节点影响。

貌似通过dead node detection不能删掉我说那种情况的规则,比如这里我试一个数据集,可以发现得到的规则中有问题, 'ExternalRiskEstimate_1_<64.0_0', ' ExternalRiskEstimate_2_64.0<=X<68.0_0' 在规则中要求同时满足,但是实际数据集是不会离散化成这样,也就是这条规则永远不会被激活。 image

"ExternalRiskEstimate_1"和"ExternalRiskEstimate_2"这俩不是同一个特征吧?所以'ExternalRiskEstimate_1_<64.0_0'和 ' ExternalRiskEstimate_2_64.0<=X<68.0_0'应该是可以同时被满足的。

这个数据集本来是连续的,我是先手动对它进行分箱离散化后以binary的形式输入网络,这相当于就是ExternalRiskEstimate特征的两个区间 : (-inf, +64.0) 和 [64, 68) ,常理来说是不可能被同时满足的;不过没事我这边直接对得到的规则再手动筛选一遍就可以。

@12wang3
Copy link
Owner

12wang3 commented Dec 6, 2021

哦哦,明白了,意思就是这样的规则就直接从rule set中移除掉是吗

是的,因为如果一个节点一直激活或一直不激活,那么和它直接相连的上层节点,要么也是一直激活或一直不激活,要么就不受该节点影响。

貌似通过dead node detection不能删掉我说那种情况的规则,比如这里我试一个数据集,可以发现得到的规则中有问题, 'ExternalRiskEstimate_1_<64.0_0', ' ExternalRiskEstimate_2_64.0<=X<68.0_0' 在规则中要求同时满足,但是实际数据集是不会离散化成这样,也就是这条规则永远不会被激活。 image

"ExternalRiskEstimate_1"和"ExternalRiskEstimate_2"这俩不是同一个特征吧?所以'ExternalRiskEstimate_1_<64.0_0'和 ' ExternalRiskEstimate_2_64.0<=X<68.0_0'应该是可以同时被满足的。

这个数据集本来是连续的,我是先手动对它进行分箱离散化后以binary的形式输入网络,这相当于就是ExternalRiskEstimate特征的两个区间 : (-inf, +64.0) 和 [64, 68) ,常理来说是不可能被同时满足的;不过没事我这边直接对得到的规则再手动筛选一遍就可以。

那我建议你检查一下你处理之后的数据是否存在'ExternalRiskEstimate_1_<64.0_0'和 ' ExternalRiskEstimate_2_64.0<=X<68.0_0'同时为真的实例,因为如果按照你说的,r1,6这条规则是不可能被激活的,那么dead node detection这一步就应该将r1,6这条规则删除了。

@notAFigure
Copy link
Author

谢谢解答。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants