deepcrossing

DEEP CROSSING

1.模型主要解决的问题

(1)特征分为两类,数值特征和离散特征,离散特征如one-hot编码数据类型过于稀疏,不利于直接输入神经网络进行训练。

(2)如何解决特征自动交叉组合的问题,让神经网络自动进行深度特征交叉。

2.模型主要结构

(1)Embedding层:这层的作用是将稀疏特征转化为稠密向量。解决了问题(1)。这里我们使用经典的全连接结构作为主体。推荐系统中还有很多,下面的博客有列举出推荐系统中流行的Embedding方法。https://blog.csdn.net/abcdefg90876/article/details/106464384

(2)Stacking层:把不同的Embedding特征与数值特征进行拼接。

(3)MLP层:使用了多层残差网络进行具体实现。解决了问题(2),实现了特征工程的自动化。

(4)Scoring层:常用逻辑回归模型。该层用交叉熵作为损失函数。

3.残差网络介绍

在这里插入图片描述
随着网络深度增加,会出现一种退化问题,也就是当网络变得越来越深的时候,训练的准确率会趋于平缓,但是训练误差会变大,这明显不是过拟合造成的,因为过拟合是指网络的训练误差会不断变小,但是测试误差会变大。为了解决这种退化现象,ResNet被提出。我们不再用多个堆叠的层直接拟合期望的特征映射,而是显式的用它们拟合一个残差映射。假设期望的特征映射为H(x),那么堆叠的非线性层拟合的是另一个映射,也就是F(x)=H(x)-x。假设最优化残差映射比最优化期望的映射更容易,也就是F(x)=H(x)-x比F(x)=H(x)更容易优化,则极端情况下,期望的映射要拟合的是恒等映射,此时残差网络的任务是拟合F(x)=0,普通网络要拟合的是F(x)=x,明显前者更容易优化。下面是残差神经网络单元的代码。

class Residual_Units(Layer):
    """
    Residual Units
    """
    def __init__(self, hidden_unit, dim_stack):
        """
        :param hidden_unit: the dimension of cross layer unit
        :param dim_stack: the dimension of inputs unit
        """
        super(Residual_Units, self).__init__()
        self.layer1 = Dense(units=hidden_unit, activation='relu')
        self.layer2 = Dense(units=dim_stack)
        self.relu = ReLU()
 
    def call(self, inputs):
        x = inputs
        x = self.layer1(x)
        x = self.layer2(x)
        outputs = self.relu(x + i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值