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

相关文章

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示