GraphSAIL 贝叶斯公式 epoch batch iteration区别 GD与SGD 一些代码问题

本文主要是介绍GraphSAIL 贝叶斯公式 epoch batch iteration区别 GD与SGD 一些代码问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 2021.05.25 看论文GraphSAIL
    • 2021.05.26 写论文
    • 2021.05.27 论文注意点
      • 题目
      • 摘要
      • 本机安装包
    • 2021.07.02 论文审稿
      • 回顾代码
    • 贝叶斯公式
    • 2021.07.05
      • 函数
      • epoch batch iteration
    • 2021.07.06
      • GD和SGD
    • 2021.07.07
    • 2021.07.13
    • 2021.07.18
      • 看论文 随手记
      • 英文
    • 2021.08.02

平时看论文/学习的时候,总有一些想法/思考,每次随手一记后来就找不到了。因此特意写一个博客作为日常学习记录。

2021.05.25 看论文GraphSAIL

  1. 论文中的增量学习和我一开始理解的有区别:有新数据进来时,推荐系统必须要更新模型。这个时候不能只管短期偏好,也需要保留长期偏好。所以就有了增量学习:使用新数据更新模型,但不会造成遗忘。(主要目的并不是我想象中为了减少重复运行模型时间的问题)
  2. 这里的“知识蒸馏”也不是传统的teacher对应复杂的模型,student对应精简的模型;老数据->teacher, 新数据->student;其次,目的也不一样:现有的工作只关注预测或中间激活层的知识提取方法相比,GraphSAIL显式地提取知识,以保留教师模型学习的图形拓扑信息,并将其转移到学生模型。
  3. 三种蒸馏结构:
  • Local structure:为了保留user长期偏好和item长期特征;
    具体: 计算user_embedding*item_embedding(相当于center node * neighbor node),后面简称为dot 最小化teacher(时刻t-1)和student(时刻t)的dot。
    文中说,这样就保留了用户的历史偏好和物品长期特征。(能够理解,因为新的模型和历史模型相似了,当然就保留啦);
    缺点:丢失全局位置信息(和其他节点的相对位置)
  • Global structure:编码位置信息;
    原因:用户间的embedding距离encode用户间的群体偏好。 ② 用户物品间的embedding距离encode用户喜欢哪类产品。
    过程: ① 计算anchor embedding:将用户和物品进行K-means聚类,共得到2K个簇(分别代表用户偏好群体+物品类别);簇的embedding平均值作为anchor embedding; ② 建立 probability distribution,可以表示user偏好属于某个群体偏好的概率 & 用户喜欢某一类型物品的概率;方法是计算node embedding和anchor embedding的相似度; ③ 最小化teacher模型和student模型的global structure distributions的KL散度;(global structure distributions:probability distribution的softmax形式,有K个簇哈)
  • self-embedding:对学习到的user embedding和item embedding进行约束(通过历史数据和新数据)。
    方法:对node embedding使用MSE(student和teacher),并且设置一个权重因子控制蒸馏强度(历史记录越丰富,权重越大)

2021.05.26 写论文

  1. 宗威师兄:第一段背景太长了;第一段:先说空气污染、堵车,然后造成经济损失;措施,流量预测技术;什么好处;
  2. 论文写作神器

2021.05.27 论文注意点

题目

  • 题目除了介词都要大写。

摘要

  • 摘要:不要一直重复“traffic flow”;
    这个很重要,有人提出了方法,但是仍面临挑战/问题(不是大问题的挑战,是这个方法的问题)
    自己方法解决了什么问题,做这个的必要性;解决的问题不能是很泛的问题,要有针对性。(比如不能说得到更好的embedding)
    用词要严谨,有逻辑
    重点不是用了什么技术,而是解决了什么问题

摘要:大背景,反映xx很重要;xx技术/方法,但有什么问题(however, such models are expensive to train and diffcult to perfprm frequant updates);我们怎么做的(In this work,we propose )能解决什么问题(so that the xxx can be greatly),再多讲几句(we develpe a xxx to address);讲好处(our approach preserves xxx);贡献(We argue that xxxxx; demonstrate its imporvement compared to other xx learning techniques on two public datasets)

本机安装包

  1. 打开cmd窗口激活环境conda activate base
  2. 使用conda install package命令安装包
  3. 如果不行,就使用pip install -U package(如果已安装就升级到最新版)

2021.07.02 论文审稿

回顾代码

  1. tf.layers.dense相当于加一个全连接层,
tf.layers.dense(
inputs,
units, #输出的维度大小
activation=None,
use_bias=True, # 使用bias为True(默认使用)
kernel_initializer=None, ##初始化器
bias_initializer=tf.zeros_initializer(), ##偏置项的初始化器,默认初始化为0
kernel_regularizer=None, ##正则化,可选
bias_regularizer=None, ##偏置项的正则化,可选
activity_regularizer=None, ##输出的正则化函数
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None, ##层的名字
reuse=None ##是否重复使用参数
)
  1. with tf.name_scope(scope)定义命名空间
  2. np.random.choice(a, size=None, replace=True, p=None)按概率选择元素,从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组;replace:True表示可以取相同数字,False表示不可以取相同数字;数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。
  3. ravel(), flatten(), squeeze():ravel():如果没有必要,不会产生源数据的副本;flatten():返回源数据的副本;squeeze():只能对维数为1的维度降维
  4. np.arange([start, ]stop, [step, ]dtype=None):在给定的时间间隔内返回均匀间隔的值。
  5. np.random用法:
  • np.random.choice(a, size=None, replace=True, p=None):从数列a中随机选择size个元素,replace为True表示选出的元素允许重复。p为元素被选中的概率数列
  • np.random.rand(d0, d1, ..., dn):产生维度为(d0, d1, …, dn),值属于[0,1)的正太分布
  • np.random.randn(d0, d1, ..., dn):产生维度为(d0, d1, …, dn)的标准正太分布。
  • np.random.randint(low, high=None, size=None, dtype='l')):产生属于[low,high)的size数量的离散均匀分布
  • np.random.random(size=None):返回随机的浮点数,在半开区间 [0.0, 1.0)。

贝叶斯公式

后验概率,被确诊患病不代表一定患病
在这里插入图片描述

2021.07.05

函数

  1. split(sep, num)将一个字符串分隔成多个字符串组成的列表;sep为分隔符,不写sep时,默认表示用 空格,\n,\t 分隔字符串;num为分隔次数,有sep时按sep的值分隔;split(":")[1]可以获取冒号后面的内容
  2. str.join(sequence)将序列中的元素以指定的字符连接生成一个新的字符串
a = ['1,2,3]
print(" ".join(str(i) for i in a))
>>> 1 2 3
  1. np.eye()返回一个对角线上全是1,而其他位置全为0的一个二维数组(2D-array)。或者进行one-hot编码
np.eye(3)
>>>array([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])np.eye(5)[[1,3,4]]
>>>array([[0., 1., 0., 0., 0.],[0., 0., 0., 1., 0.],[0., 0., 0., 0., 1.]])

epoch batch iteration

在这里插入图片描述

2021.07.06

GD和SGD

总结的不错的博客
SGD是一次用部分数据,计算梯度,然后根据梯度更新参数
GD是一次用全部数据,计算梯度,然后根据梯度更新参数

2021.07.07

  1. argparse.ArgumentParser()解析命令行参数;程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
  2. pd.merge()只能用于两个表的拼接,而且通过参数名称也能看出连接方向是左右拼接,一个左表一个右表。
  3. scipy.sparse.csr_matrix构造稀疏矩阵
  4. tf.Graph().as_default()返回一个上下文管理器,这个上下管理器使用这个图作为默认的图
  5. os.path.join()函数:连接两个或更多的路径名组件。如果各组件名首字母不包含’/’,则函数会自动加上;如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃;如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾。
  6. python open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写
  7. json.loads()函数是将json格式数据转换为字典
  8. tf.nn.embedding_lookup()就是根据input_ids中的id,寻找embeddings中的第id行。比如input_ids=[1,3,5],则找出embeddings中第1,3,5行,组成一个tensor返回
  9. tf.einsum( equation, *inputs)用简单的方式表示许多常见的多维线性代数数组运算
# Matrix multiplication
einsum('ij,jk->ik', m0, m1)  # output[i,k] = sum_j m0[i,j] * m1[j, k]# Dot product
einsum('i,i->', u, v)  # output = sum_i u[i]*v[i]# Outer product
einsum('i,j->ij', u, v)  # output[i,j] = u[i]*v[j]# Transpose
einsum('ij->ji', m)  # output[j,i] = m[i,j]# Trace
einsum('ii', m)  # output[j,i] = trace(m) = sum_i m[i, i]# Batch matrix multiplication
einsum('aij,ajk->aik', s, t)  # out[a,i,k] = sum_j s[a,i,j] * t[a, j, k]
  1. np.argsort()将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y。也就是说排第一的数字的索引对应的值是最小的。

2021.07.13

  1. astype('category')DataFrame格式中某一列使用这个函数,代表取出该列和列名。通常与cat.codes.astype(int)一起使用,表示将那一列转换成int格式(按原始数据大小排序,依次从0开始赋值)。可以用在数据处理中,将user_name映射为user_id。
  2. set.add()给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作
  3. round( x [, n] ) 方法返回浮点数 x 的四舍五入值
  4. join()方法用于将序列中的元素以指定的字符连接生成一个新的字符串

2021.07.18

  1. print('\033[1;31m' + content + ' \033[0m')输出字体带颜色

看论文 随手记

  1. 大规模离散空间;平衡层次聚类树,寻找一条从根节点到叶节点的路径(时间复杂度)
  2. 交互式推荐系统,及时获得反馈;RL:动态交互+长期计划;环境模拟器:模拟线上环境
  3. 采样action的时间与商品总数成线性增长关系

英文

  1. To the best of our knowledge, this is the first work of xx

2021.08.02

  1. axis=0代表列,axis=1代表行
  2. 重复运行tensorflow同一段代码,时间越来越长:网上查了一下:每次迭代计算图中增加了新的节点,导致图内节点越来越多,走向奔溃。
    ① 判断是否有新节点加入:加入:sess.graph.finalize(),发现报错,表明“有新建节点的操作” ② 加入tf.reset_default_graph():清除默认图形堆栈并重置全局默认图形。 发现可行
  3. 想把list赋值,不要直接 = = =,用.copy或者a[:]

这篇关于GraphSAIL 贝叶斯公式 epoch batch iteration区别 GD与SGD 一些代码问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/685767

相关文章

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在