我与导师的聊天记录

虽然导师远在马来西亚,但是每次都是很耐心的回答我的问题,真的是非常感激啦!
我就想记录下来,自己提出的问题,老师给我的解答,算是我研究生生涯的很大一部分生活了吧!
噢~ 还有就是,这些都是微信聊天记录呦!!!


20190919

提问
https://blog.csdn.net/qq_38412868/article/details/83748553

这里面提到的LSTM实现的方式

比如一条路劲:U1 -> f1 ->f2 ->f3 -> f4 -> f5
训练时X:U1 f1 f2 f3 f4
Y:f1 f2 f3 f4 f5
会得到5个cell输出: c1、c2、c3、c4、c5
则损失函数:Loss = sum( ( [c1 c2 c3 c4 c5] - [f1 f2 f3 f4 f5] ) **2 )

这样计算损失的方式是否可取,这样好像就不需要负采样了。
我感觉这样的计算方式挺合理的。

但是 是不是进行训练的时候必须有正样本和负样本?

采用负样本的目的是为了把推荐问题看成一个二分类问题吗?

老师回答:
负采样训练不是一般性机器学习模型必备的
但是在我们的问题里,最后评估模型质量的那些measure,是评估模型是否能将positive样本的估分比negative样本的估分高
因此在训练的过程中,我们就要引入negative样本,在训练数据上优化使得正样本比负样本的评分高
这么做是因为这一类型的推荐问题大家公认的评估方式决定的。
如果做推荐评分预测问题,模型评估的时候就只是估计分数的误差,那么训练的时候就不需要用负样本了


20190920

提问:
LSTM的五个状态进行concatenate处理后5*8 的向量转换为8 的向量时:
使用 [40,20,8] 还是直接使用 [40,8]

是不是数据量很大的时候才采用塔形(减半)的方式设置MLP,数据量少的时候一个全连接层就可以了。

老师回答:
使用 [40,20,8] 还是直接使用 [40,8] 这个不好说,都是测试完才知道效果,我会先实验第一种减半的方法


20190923

1、评估阶段:(假设user embedding=8)用LSTM对用户信任路径做处理,将每个hidden state进行concatenate得到path embedding 8*5,通过MLP处理得到 path embedding 8,与user embedding进行向量内积得到链路预测用户得分,这里可能需要对score用sigmoid函数处理。
2、Loss计算:(有一丢丢印象,但还是没有理解这里的计算)还有一个很重要的问题就是,如果这样计算损失的话,评估阶段使用的MLP里面的参数并没有在训练阶段的到训练。
在这里插入图片描述在这里插入图片描述
老师回答:
这里可能需要对score用sigmoid函数处理 -》 这个没问题,最后需要得到一个预测分数值的时候,一般都是会通过sigmoid

评估阶段使用的MLP里面的参数并没有在训练阶段的到训练 -》 没理解你的意思,训练和测试用的模型要是一样的架构,同一个模型

因为最后一层是输出一个概率,一般一定会通过一层用sigmoid当激活函数的MLP。只是在这层(d=8)前是否还有别的MLP(如d=20)可以自己试验一下,不好说效果好不好

测试和训练的模型,最后一层都放一个sigmoid的mlp

还有目前训练的时候,对于6个节点的路径,记得先写成 利用1预测2,利用(1, 2) 预测 3, 利用(1,2,3) 预测4 。。。 我前天发给你的两篇论文应该都是这样训练

虽然我觉得这样模型间接的知道了(1,2) 后是 3了,因为有个训练数据是(1,2,3) 。但是大部分这一类论文都还用这种方法

提问:
不知道我理解的对不对?
在这里插入图片描述
老师回答:
数学上是对的 但是实现的时候这样算会很慢。要像上次说的那样算S_1->2的时候P和U要是矩阵,相当于要是数据里有100个像你写的S_1->2的公式计算,程序里要把这100个拼成一次计算
在这里插入图片描述


20191004

汇报:
在这里插入图片描述
结论:

  1. 从实验结果来看,效果没有提升,反而下降。信任部分出现了问题。
  2. 非均匀采样的效果要比均匀好一点,采样200比50好一点。采样500时效果出现明显下降。因为用户之间的信任link只有用户数量的4倍,意味着很多用户没有信任的人,很多用户信任的人的数量也不多,所以sample到的很多路径是用max_user值padding得到的,以至于效果不好。(200非均匀应该是最好的设置)

老师回复:
我想在数据里filter掉长度小于6的信任路径。只训练那些长度6的信任路径,如果某个用户一条长度6的信任路径也没有,那么对他的推荐就退化成SAMN。
可以先统计下,这13957个用户里,有多少能又长度6的路径的
就是以某个用户为起点的路径,长度有6的,那这个用户就算有信任路径。统计下,有多少用户有信任路径
cici:
我统计了一下有564个用户有长度为6信任路径,有点少
老师:
那看来效果不好跟这个路径数太少应该有关系。之前你跑实验的时候,一个用户最多几条路径呢?
这564个用户有长度为6信任路径,又一共有几条?
cici:
为每个用户均匀采样50条路径,其中564个用户存在长度为6的路径,一共50*13957=697850条路径中有29979条路径是长度为6


20191005

汇报:
在这里插入图片描述
结论:

  1. loss在减少,recall却没有提升。模型过拟合。
  2. 推荐部分和信任部分应该以不同的速度或者说频率进行训练,因为他们收敛的速度不同。(推荐部分在epoch100次的整个过程中性能有持续逐步的提升,信任部分epoch10次以上就不行了)(也就是说这两个任务的损失函数不应该加在一起,而是训练10次推荐,再训练1次信任)

老师回复:
这个想法没有问题。先试一下推荐训练1次trust训练1次的效果,再试试推荐训练10次trust训练1次这样。可以把整个训练过程中,trust部分和推荐部分的loss画折线图看一下趋势

提问:
一些我的理解不知道对不对:
MLP的最后一层,如果是一个输出的0-1分类问题,一般使用sigmoid激活函数;
如果是多个输出的分类问题(比如手写数字分类),一般使用softmax激活函数;
而在本实验中,是通过LSTM的每个状态的concat中学习路径的表示,最后一层应该是不需要使用激活函数的。

老师回复:
这里数学理论上是不需要在最后加激活函数了
但是实际实现里要加sigmoid,来保证计算机计算的时候的数值稳定性
https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits 如果是TensorFlow的话,我们做的这种问题需要训练negative sample的,一般会用这个loss
你看他的说明里面模型最后的输出就先传到sigmoid再传入loss
这样在计算每一个sample的时候,能保证输出一定在[0,1]这个range里。如果不加这个限制,在一些异常数据点上,或者出现梯度爆炸问题的时候,可能有一些输出值特别大
比如超过了计算机的数值范围,导致结果是nan。这种情况蛮常见的,不一定是程序写错。有可能就是剃度爆炸了。所以一般最后还是加上sigmoid再传入loss函数了

汇报:

Trust部分对MLP改进:
1 * 128、2 * 128、3 * 128使用一层,未使用激活函数未使用dropout。
4 * 128、5 * 128使用两层,中间层激活函数使用Relu,为防止过拟合设置keep_prob=0.75。最后一层未使用激活函数未使用dropout。
在这里插入图片描述
结论:
性能只有了短暂的提升,很奇怪

所以说,现在的问题是信任预测这个任务采用目前的方式得不到很好的效果。对推荐任务没有起到很好的辅助效果。

接下来我也不知道该从那个部分对信任任务进行改进了。。。

老师回复:
最早做的那个版本,是不是NCF,然后信任部分不是用路径而是类似NCF做法?
就是推荐部分和信任部分其实都是NCF?
cici:
是的,推荐部分和信任部分都是NCF
老师:
刚才你汇报的路径29979条,不好说这个数据量够不够。但是只分布在500多个用户,确实有些问题。
我想现在你试试用SAMN当推荐部分,信任部分用之前写的NCF版的信任边预测。这样的结果看看如何。
以路径建模写代码会比较麻烦,再尝试更复杂的路径方法前。先拿之前的部分代码和现在的合起来看看效果,会比较容易点
cici:
可以的,那我这样试一试。


20191012

汇报:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

老师:

我看了两个结果。总结来说,两个任务一起学习的话,信任部分是越来越差的。但是如果单独学习信任部分,NCF的架构又是能看到recall逐渐变好
我觉得 两个任务间共享参数的方法 以及multi-task优化的方法。这两块我明天想想一些方法试一下,看看能不能实现trust在多任务学习的时候也有提升
现在这个模型设计,应该只有直接共享最底层item embedding这做了共享。挺粗糙的

cici:
对,只有直接共享user embedding。
https://blog.csdn.net/weixin_37913042/article/details/102498802 我也看了一些文章,然后,然后好像也不是很清楚该怎么改进

老师:
我们其实是这里的硬共享。比较初期,在上面的layer那没有共享学习,所以有问题也还说得过去。我想一下上面层如何共享.
我把下一步的想法,发邮件给你了
修改模型的时候要哪里不清楚,直接问我
以后发实验结果也可以用邮件附件发给我,微信经常查看以前的word文件就失效打不开了

cici:
嗯!好的!


20191012

cici:
在这里插入图片描述
“ 注意这个shared layer的参数是共享的,即它定义的embedding size就是用户的总数 ” 这里“embedding size就是用户的总数”没太理解.
还有一个问题是这个共享操作,只能在向量输入MLP之前做,因为输入到MLP的向量是user和item的concate(推荐)、user1和user2的concate(信任),所以没有你说的第三点,将共享操作分享到第二层、第三层等等。

老师:
embedding size不是指的dimension。那句话的意思就是要是在左边和右边的用户如果是同一个id即同一个用户,那么传到share 层的时候这两个embedding要乘以同一个权重,加上同一个bias
第二个问题,就只做一次共享操作先试试好了

cici:
好的,我清楚了!


20191015

cici:
老师,我把结果发你邮箱啦!


20191016

老师:
我看文档看不出问题。你告诉我代码在服务器上的路径,我今天下课看一下
cici:
/home/lyli/MNCF/MNCF3.py
老师:
明天白天你看看51行这是不是应该是input_dim=num_users?这两部分share的是user吧
现在已经很晚了,不需要急着看
cici:
嗯,对的 应该是user,
老师:
我明早再看看其他部分
cici:
好的,真是麻烦老师了


20191017

cici:
老师,单把那里改正确的话,还是有问题。主要是,X操作采用元素相乘就没问题,池化操作和cancate就有问题,理论上来说不应该这样。在这里插入图片描述
老师:
我今早写了个版本,急着上课没法给你
这个用concate操作结果救市政策的那种
在这里插入图片描述
这个用concate操作结果就是正常的那种
但是我为了找出问题,把模型简化掉了。ncf里的矩阵分解部分删掉了
我不经常用keras写代码。我看你的实现,可能的问题是共享层那里用的是Embedding
应该要用Dense才对吧。然后我这个文件里的52行的Dense创建的Shared_User_Layer,在rec和trust部分同时被调用
当然这样把MF删掉了,性能应该变差了。你可以试试再把MF部分加上去会怎么样

cici:
在这里插入图片描述
老师:
你说的有道理,我查了keras的dense,不带embedding功能。用keras实现共享功能,得自己定义共享参数为embedding
我再看看其他部分有没问题
cici:
我用keras主要是原作者用了keras,我怕我用tensorflow重写一遍的话,有些地方可能会写错,就直接在上面接着改了!
老师:
没关系,这个基于NCF的版本只是拿来测试下想法,最后的模型应该会摆脱NCF。到时候再考虑要不要用别的写也来得及
cici:
好的

20191105

cici:
我之前遇到
RuntimeError: [enforce fail at CPUAllocator.cpp:64] . DefaultCPUAllocator: can’t allocate memory: you tried to allocate 15851784844900 bytes. Error code 12 (Cannot allocate memory)
这个问题
然后我就百度pytorch如何使用GPU
然后我就在代码里加了CUDA,把模型放到GPU上运算

device = torch.device("cuda:3")
model = model.to(device)

然后就出现了这个问题:RuntimeError: CUDA out of memory. Tried to allocate 14763.13 GiB (GPU 3; 10.73 GiB total capacity; 165.28 MiB already allocated; 9.61 GiB free; 10.72 MiB cached)
然后我觉得GPU上内存应该是能满足一般需求了的吧是我的model太大的原因吗???
之前一个可以运行的demo是160,686个link,这个有899,322个link Ls:

老师:
根据提示是方法写的不对,要加载1TB的数据到GPU:Tried to allocate 14763.13 GiB
你看下数据切割有没问题,一般会把train数据分batch训练,每个batch的数据加载到GPU上
https://zhuanlan.zhihu.com/p/30934236
每次只把这个data.to(device)
在这里插入图片描述
cici:
好,我改改方法!

20191109

cici:
老师我将最近的结果发您邮箱啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 面向知识图谱补全的共享嵌入神经网络模型

论文笔记整理:谭亦鸣,东南大学博士生,研究方向为跨语言知识图谱问答。来源:CIKM’2018链接:http://delivery.acm.org/10.1145/3280000/3271704/p247-guan.pdf?ip121.249.15.96&id3271704&accACTIVE%20SERVICE…

PyTorch常用代码段合集

文 | Jack Stark知乎编 | 极市平台来源 | https://zhuanlan.zhihu.com/p/104019160导读本文是PyTorch常用代码段合集,涵盖基本配置、张量处理、模型定义与操作、数据处理、模型训练与测试等5个方面,还给出了多个值得注意的Tips,内容非常全面。…

想成长为一名实战型架构师?7大实战技能经验分享

很多同学想成为一名架构师,但是对于其中的技能掌握程度,以及编程功底的要求?设计能力的要求有哪些? 我简要从以下7点经验来谈,从技能的角度抛砖引玉。 编程基本功:数据结构和算法 1.数据结构相关的哈希表、链表、二叉…

LeetCode 70. 爬楼梯(动态规划)

题目链接:https://leetcode-cn.com/problems/climbing-stairs/ 之前在递归中讲过这个问题,现在用动态规划求解。 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意&…

技术动态 | 藏经阁计划发布一年,阿里知识引擎有哪些技术突破?

本文转载自公众号:阿里技术。导读:2018年4月阿里巴巴业务平台事业部——知识图谱团队联合清华大学、浙江大学、中科院自动化所、中科院软件所、苏州大学等五家机构,联合发布藏经阁(知识引擎)研究计划。藏经阁计划依赖阿…

python中模块、函数与各个模块之间的调用

1 针对一个模块的函数调用 a : import 模块名 模块名.函数名 b: from 模块名 import 函数名 (as 别名) python调用另一个.py文件中的类和函数 同一文件夹下的调用 1.调用函数 A.py文件如下: def add(x,y): print(‘和…

模拟退火算法求解TSP问题

前言:模拟退火(simulated annealing)技术,在每一步都以一定的概率接受比当前结果更差的结果,从而有助于“跳出”局部极小。在每次迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从…

一篇文章彻底搞懂“分布式事务”

在如今的分布式盛行的时代,分布式事务永远都是绕不开的一个话题,今天就谈谈分布式事务相关的一致性与实战解决方案。 01 为什么需要分布式事务 由于近十年互联网的发展非常迅速,很多网站的访问越来越大,集中式环境已经不能满足业…

C++很难学?这个ACM金牌大佬可不这么认为!

C作为一门底层可操作性很强的语言,广泛应用于游戏开发、工业和追求性能、速度的应用。比如腾讯,无论游戏,还是微信,整个鹅厂后台几乎都是 C 开发,对 C 开发者的需求非常大。但问题是C入门和精通都比较困难,…

数据结构--位图 BitMap

文章目录1. 位图2. 位图代码3. 布隆过滤器 Bloom Filter4. 总结1. 位图 我们有1千万个整数,整数的范围在1到1亿之间。如何快速查找某个整数是否在这1千万个整数中呢? 当然,这个问题可以用散列表来解决。可以使用一种特殊的散列表&#xff0…

领域应用 | 企业效益最大化的秘密:知识图谱

本文转载自公众号:TigerGraph。凡是有关系的地方都可以用知识图谱。知识图谱知识图谱是用节点和关系所组成的图谱,为真实世界的各个场景直观地建模,运用“图”这种基础性、通用性的“语言”,“高保真”地表达这个多姿多彩世界的各…

国家一级职业资格证书 计算机类有哪些

当前bai,计算机证书考试多种du多样,水平参差不齐。比较正规且得到社会zhi认可的dao计算机证书考试有以下几种:全国计算机应用软件人员水平考试、计算机等级考试、计算机及信息高新技术考试、计算机应用水平测试和各种国外著名大计算机公司组织…

阿里P8架构师谈:分布式系统全局唯一ID简介、特点、5种生成方式

什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。 如在金融、电商、支付、等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足…

朴素贝叶斯算法--过滤垃圾短信

文章目录1. 基于黑名单过滤2. 基于规则过滤3. 基于概率统计过滤4. 总结上一节我们讲到,如何用位图、布隆过滤器,来 过滤重复数据。今天,我们再讲一个跟过滤相关的问题,如何过滤垃圾短信?1. 基于黑名单过滤 可以维护一…

2020深度文本匹配最新进展:精度、速度我都要!

文 | QvQ编 | 兔子酱在过去的几年里,信息检索(IR)领域见证了一系列神经排序模型的引入,这些模型多是基于表示或基于交互的,亦或二者的融合。然鹅,模型虽非常有效,尤其是基于 PLMs 的排序模型更是增加了几个数量级的计算…

开源开放 | Gowild 狗尾草“七律”知识图谱进入 OpenKG,开放 8000 万中文百科知识三元组数据...

项目网站: https://ai.gowild.cn/kgOpenKG发布地址: http://openkg.cn/dataset/7lore狗尾草科技:https://www.gowild.cn1.七律开放知识图谱简介作为人工智能技术的重要分支,知识图谱自2012年被提出并成功应用后,就获得了迅速发展,…

向量空间 Vector Space -- 推荐系统

文章目录1. 算法解析2. 基于相似用户做推荐3. 基于相似歌曲做推荐4. 总结音乐App的功能越来越强大,不仅可以自己选歌听,还可以根据你听歌的口味偏好, 给你推荐可能会喜爱的音乐,有时候,推荐的还非常适合你的口味。1. 算…

阿里P8架构师谈:分布式事务的解决方案,以及原理、总结

分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务各方面与大家进行介绍。 事务 1.1 什么是事务 数据库…

美团NLP中心算法实习生内推啦!

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术部门介绍搜索与NLP部是美团人工智能技术研发的核心团队,致力于打造高性能、高扩展的搜索引擎和领先的自然语言处理核心技术和服务能力,依托搜索排序,NLP(自然语…

B+树 -- MySQL数据库索引

文章目录1. 定义清楚问题2. 尝试学过的数据结构解决问题3. 改造二叉查找树来解决问题4. 总结为了加速数据库中数据的查找速度,我们常对表中数据创建索引。数据库索引是如何实现的呢?底层使用的是什么数据结构和算法呢? 1. 定义清楚问题 如何…