Google老师亲授 TensorFlow2.0 入门到进阶 学习笔记 ch2_2

目录

11、wide_deep模型

简介

稀疏特征

密集特征

wide VS wide_deep

叉乘的特征选择标准

wide & deep模型里为什么这两项是直接做了叉乘,而不是先embedding,再叉乘

关于密集特征的缺点是过度泛化

如何划分稀疏特征和稠密特征

selu在cnn中的效果好吗?

wide&deep的wide输入

12、函数API实现wide&deep模型

输出层激活函数

13、子类API实现wide&deep模型

请问函数API和子类API有什么区别

子方法call在哪里用上

针对wide-deep模型的评估,是否是loss和val_loss值越小,就代表越好?

请问有一个csv的字段是变长的列表怎么输入到feature column到模型

新定义的mode = WideDeepModel() 如何保存训练好的模型

14、wide&deep模型的多输入与多输出

多输出

数据集较大时候的多输入多输出应该用data generator 么?那yeild 应该是什么结构才行呢?

15、超参数搜索

为什么要超参数搜索

搜索策略

网格搜索

随机搜索

遗传算法

启发式搜索

贝叶斯调优

16、手动实现超参数搜索


11、wide_deep模型

简介

  • google16 年发布,用于分类和回归
  • 应用到了Google Play中的应用推荐
  • 原始论文:https://arxiv.org/pdf/1606.07792v1.pdf

稀疏特征

  • 离散值特征
  • One-hot表示
  • Eg:专业={计算机,人文,其他},人文=[0, 1, 0]
  • Eg:词表={人工智能,你,他,慕课网,...},他=[0, 0, 1, 0,...]
  • 叉乘={(计算机, 人工智能), (计算机, 你),...}
  • 叉乘之后
    • 稀疏特征做叉乘获取共现信息
    • 实现记忆的效果
  • 优点
    • 有效(若能经常遇到重复的样本的话,就能很有效的处理它),广泛用于工业界(主要广告点击率预估,推荐算法)
  • 缺点
    • 需要人工设计(若将所有的特征都离散化后进行叉乘,叉乘后的空间是非常大的,无法把所有特征都去做叉乘,所以只能选择哪几个特征做叉乘,若k个特征,每个特征有n个值,那么所有特征叉乘后有n^k个,若选择某几个特征叉乘,则集合的大小会指数级的下降)
    • 可能过拟合,所有特征都叉乘,相当于记住每一个样本
    • 泛化能力差,没出现过就不会起效果

密集特征

  • 向量表达
    • Eg:词表={人工智能,你,他,慕课网,...}
    • 他=[0.3, 0.2, 0.6, ...](n维向量),将词表中的词均用n维向量表示
    • 可以用两向量的距离表示两词的距离
  • word2vec工具
    • 男-女 = 国王 - 王后
  • 优点
    • 带有语意信息,不同向量之间有相关性
    • 兼容没有出现过的特征组合(遇到新的样本可以通过向量之间的差距来衡量样本的相似性,不仅可以把记忆的样本预测对,还可以将相邻的也即类似的样本预测对)
    • 更少人共参与
  • 缺点
    • 过度泛化,推荐不怎么相关的产品

wide VS wide_deep

wide:只有一层,所有的输入直接连接到输出上,输入即是稀疏特征也即One-hot表达,One-hot表达的每个分量都直接连接到输出单元上。

wide_deep:左半部分是一个wide模型,右半部分是一个deep模型。Dense Embedding是稀疏特征的密集向量的表达。

     

叉乘的特征选择标准

这通常需要对业务的分析,一般做叉乘的特征在叉乘之后要有具体的含义,比如,在广告系统中,用户七天前的查询词特征跟今天的查询词特征之间的叉乘,含义就是用户的行为规律是按照星期为单位进行的,上周末关注的东西这周末有可能还会关注。

实际工程中,你会先有一个baseline模型,然后在你选择了叉乘的特征之后,还要去做线上的A/B测试,这样,如果有效果才能发布出去。一般是人工去做概念上的筛选,要让叉乘可以解释。然后就是线下做对比实验,线上A/B test,实验结果有提升的才会被采用。

wide & deep模型里为什么这两项是直接做了叉乘,而不是先embedding,再叉乘

叉乘是离散操作,转成embedding后就没有办法做了。

叉乘的含义是笛卡尔积,即集合A是{A, B}, 集合B是{C, D}, 那么叉乘后就是 {(A, C), (A, D), (B, C), (B, D)},embedding没有办法做这种操作

关于密集特征的缺点是过度泛化

过度泛化一般出现在用户数据较少的时候,即推荐系统刚刚启动的时候。此时,因为用户数据少,所以密集特征无法学到有效的embedding,这个时候就会给用户无关的推荐。此时就是过度泛化。

如何划分稀疏特征和稠密特征

这个问题比较灵活,看你对问题的建模方法,有些特征比较明显的属于稀疏或者密集特征,但有些特征则比较模糊。比如有些连续值的特征,你可以把它当成密集特征,也可以分桶把它当成稀疏特征。具体怎么分个人感觉要靠实验来验证,怎么好就怎么分,没有具体的规则。

selu在cnn中的效果好吗?

selu在卷积上也会有效,不过在深度可分离上没有效果。课后作业里我们会详细讲解selu算法。

wide&deep的wide输入

在图中,wide侧为什么这里只将曝光app和用户安装APP之间做叉乘输入,而没有输入其他特征,如用户安装APP、用户信息等其他类别特征?

这里需要做权衡的,因为记忆和泛化是矛盾的,记忆的多,泛化能力就差,反之亦然。所以,如果加入过多的信息,就会导致模型的泛化能力变差。这样的特征组合应该是Goolge经过调参后的最佳选择。

 

12、函数API实现wide&deep模型

我们采用房价预测为例,因为他有8个特征,我们可以容易划分出给wide用的和给deep用的,至于分类问题,图像的像素含义相同,划分无意义。

与之前的Squential不同的是,函数式API需要通过Model固化下来,Sequential貌似已经在内部实现了,所以无需我们固化。

输出层激活函数

最上层用什么激活函数跟要解决的问题有关。sigmoid一般用来解决二分类问题,比如经典应用CTR预估。而我们这里是要解决房价预测,所以没有加sigmoid

 

13、子类API实现wide&deep模型

请问函数API和子类API有什么区别

实现的结果上没有区别,都是为了实现一个模型。

实现的方式的区别会让我们的掌控力不同,函数API更加灵活,中间步的输出都可以拿到。子类API这种方式就不能了

子方法call在哪里用上

call方法是自动被调用的,即如果你把这个类当做函数,后面写上括号,会自动调用call方法。用来完成模型的正向计算。

针对wide-deep模型的评估,是否是loss和val_loss值越小,就代表越好?

是的,就是这样,但我们主要看val_loss。

一般val_loss小loss大的情况不出现。

val_loss小,loss小是理想情况。

val_loss大,loss小是过拟合。

val_loss大,loss大是没收敛,欠拟合。

请问有一个csv的字段是变长的列表怎么输入到feature column到模型

https://coding.imooc.com/learn/questiondetail/146878.html

新定义的mode = WideDeepModel() 如何保存训练好的模型

新定义的mode = WideDeepModel() 如何保存训练好的模型,我使用model.save(“aa.h5”),提示不能保存成功。同学你好,在第九章我们讲解了各种各样保存模型的方式,自定义模型保存为keras模型还不支持。但是你可以保存成为saved_model保存模型结构+参数,或者使用model.save_weights只保存参数。

 

14、wide&deep模型的多输入与多输出

多输出

主要针对度任务的学习问题

数据集较大时候的多输入多输出应该用data generator 么?那yeild 应该是什么结构才行呢?

现在yield在tensorflow中不是特别推荐使用,因为很难去做并行。建议使用我们课上讲过的dataset的使用方式。

 

15、超参数搜索

为什么要超参数搜索

  • 神经网络有很多训练过程中不变的参数
    • 网络结构参数:几层,每层宽度,每层激活函数等
    • 训练参数:batch_size,学习率,学习率衰减算法
  • 手工去试耗费人力

搜索策略

  • 网格搜索
  • 随机搜索
  • 遗传搜索
  • 启发式搜索

网格搜索

随机搜索

遗传算法

  • 对自然界的模拟
  • A.初始化候选参数集合 -> 训练 -> 得到模型指标作为生存概率
  • B.选择 -> 交叉 -> 变异 -> 产生下一代集合
  • C.重新到A

启发式搜索

  • 研究热点-AutoML
  • 使用循环神经网络来生成参数
  • 使用强化学习来进行反馈,使用模型来训练生成参数

贝叶斯调优

贝叶斯调优是启发式的一种。但是对于神经网络的自动调参来说,一般会使用的方法是基于RL和遗传算法的。贝叶斯用起来太耗时。

 

16、手动实现超参数搜索

选用房价预测数据集展示,因为该数据集比较小,方便展示。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值