深度学习中显性特征组合的网络结构crossNet

crossNet

论文获取

1、原理

这个网络结构最开始提出来是在推荐领域,其核心作用就是在不增加太多参数与内存的下显式实现特征交叉组合 .其公式如下: x l x_{l} xl是第l层的输出, x 0 x_{0} x0是原始输入,那么第 x l + 1 x_{l+1} xl+1层就等于原始输入乘以上一层输出实现交叉后加上上一层输出;这样一层就是 x 2 x^2 x2的交叉,两层就有 x 3 x^3 x3的交叉,依次类推,这样就确保实现高阶的特征交叉组合.且其参数是线性增长的.

2、原理分析

  • 首先从公式看其维度是不发生变化的,所以其高阶信息是压缩过的
  • 注意到公式加上一层信息,因此不同层组合,展开其最后一层输出有保留低阶到高阶的的组合信息,但可能存在部分丢失问题
  • 该结构适合在原始输入端使用,代替特征交叉组合的特征工程
  • 该结构不建议过多层,容易导致过拟合,一般1~3层
  • 该结构适合特征本身有交叉关系的场景使用
  • 该结构使用稀疏与稠密的输入

3、实现

以torch 为例,当然实际应用通常希望加一点正则防止过拟合,此时可以通过优化器指定增加该部分结构的权重正则.

python 复制代码
crossnet = CrossNet(...)
crossnet_params = []
othernet = OtherNet(...)
#获取crossnet参数
for name, param in model.named_parameters():
    if "crossnet" in name:
        crossnet_params.append(param)
optimizer = torch.optim.Adam([
    {"params": crossnet.weights, "weight_decay":1e-4}, 
    {"params": crossnet.biases, "weight_decay":0}
], lr=0.001)
python 复制代码
class CrossNet(nn.Module):
    def __init__(self, in_features, num_layers):
        super(CrossNet, self).__init__()
        self.num_layers = num_layers
        self.in_features = in_features
        self.weights = nn.ParameterList([
            nn.Parameter(torch.randn(in_features, 1)) for _ in range(num_layers)
        ])
        self.biases = nn.ParameterList([
            nn.Parameter(torch.randn(in_features)) for _ in range(num_layers)
        ])
        self.reset_parameters()
	def forward(self, x0):
        x = x0
        for i in range(self.num_layers):
            # x: (batch, in_features)
            # x @ w: (batch, 1)
            xw = torch.matmul(x, self.weights[i])  # (batch, 1)
            # x0 * (x @ w) : broadcasting (batch, in_features)
            cross = x0 * xw  # broadcasting
            x = cross + self.biases[i] + x  # (batch, in_features)
        return x
    def reset_parameters(self):
        # 用合理的初始化方法初始化 weights 和 biases
        for w in self.weights:
            nn.init.xavier_uniform_(w)
        for b in self.biases:
            nn.init.zeros_(b)
相关推荐
字节逆旅2 分钟前
有哪些工作不可以交给AI
人工智能·程序员
一路向北North7 分钟前
Spring AI(6) :对话机器人-会话历史
java·人工智能·spring
2zcode10 分钟前
基于MATLAB神经网络的心力衰竭预测与临床辅助决策系统研究
人工智能·神经网络·matlab
ACP广源盛1392462567311 分钟前
国产算力互联IX8024@ACP#Kimi K3 开源后的端侧部署硬件架构分析
大数据·人工智能·分布式·单片机·嵌入式硬件
江边风声25 分钟前
从薄板到厚板、从吸盘到夹板边——坤鹏伯爵的取放技术体系是怎样覆盖全制程的
人工智能·科技·自动化·制造·pcb工艺
商业模式源码开发28 分钟前
小米新车未发布即遭 AI 谣言攻击:黑色 GEO 的运作原理与企业正规防御方案
大数据·人工智能·ai·geo
若殇丶球35 分钟前
二、PointNet算法
深度学习
edtoplort42 分钟前
A股最大IPO长鑫科技295亿:从年亏163亿到日赚3亿
大数据·人工智能·科技
道影子1 小时前
《道德经》031兵者不祥,胜以丧礼处之
人工智能·深度学习·算法
MGS浪疯1 小时前
我用 WorkBuddy 做了一个能记住前文的 AI 小说编辑器
人工智能·编辑器·腾讯云·腾讯云ai代码助手·workbuddy开发者分享季·codebuddy开发者分享季