图神经网络学习:图同构网络
前言去年上 COMP4222 学习图同构网络(Graph Isomorphism Network)的笔记。主要参考了 CS224W 以及原论文How Powerful are Graph Neural Networks?WL-Test 威力强大不可不品尝(应该是) TLDRGIN 是一种能够达到与 Weisfeiler-Lehman(WL)测试等价表达能力的图神经网络。GIN 通过精心设计的聚合函数,解决了图神经网络在表达能力上的瓶颈,使其能够区分大多数非同构图结构。GIN 的核心是将节点自身特征与邻居特征进行”注入”式聚合,整个模型可表示为一系列 GIN 层的堆叠。 介绍GIN 这份工作力求探究 GNN 理论上的表达能力。这里“表达能力”的定义类似于光学里的“分辨率”,也就是模型区分不同输入数据的能力边界。一个模型的表达能力越高,就越能捕获到图的细微结构差异,进而学习出一个更有区分度的 representation/feature/embedding. 对于两个图 $G_1,...
线性代数:内积空间
线性代数:内积空间前言中学前我们就学过$\mathbb{R}^n$中的向量点积$$ \mathbf{u\cdot v} = \mathbf{u}^T\mathbf{v} = \sum^{n}_{i=1}u_iv_i\text{,}(u_i, v_i\in \mathbb{R}) $$ 通过点积能够定义距离,长度,夹角等几何概念$$ cos\theta = \frac{\mathbf{u\cdot v}}{|\mathbf{u}||\mathbf{v}|}$$现在我们更进一步,在数域$K$上的向量空间里讨论广义上的点积——内积(Inner Product) 内积 Inner Product实数域上的内积内积运算首先是一个二元算子 $< , > :V \times V \rightarrow \mathbb{R}$, 其满足以下几条性质($\mathbf{u},\mathbf{v}\in \mathbb{R^n}$): 可交换性:$ <\mathbf{u},\mathbf{v}> =...
线性代数:向量空间
前言2023年下半年的我可以说是“在与线性代数的搏斗中死去了”,学校开了两门线性代数,一门用的课本是Linear Algebra and its Applications, 6th edition, by D. Lay, S. Lay, and J. McDonald, 另一本则是Linear Algebra Done Right. 代数结构初探:群,环,域这部分记得比较基础,感兴趣请自行移步离散数学/抽象代数。 群 Group对一个集合 $G$, 我们给它装备上一个二元运算 $\circ : G \times G \rightarrow G$,使得集合对这个二元运算封闭。$$\begin{align*} a \in G , b \in G \ a \circ b \in G\\end{align*}$$对$G$中任意元素都成立。在这个基础上,满足以下几条性质的代数结构我们便称之为群(group):$$ \begin{align*}\text{结合律:}&(a \circ b) \circ c = a \circ (b \circ...
C++学习:分别编译与makefile
前言一句话解释什么是makefile: 自动编译程序的脚本 make 之前从很多坨源代码文件到一个可运行的软件项目的过程叫做构建(Build)。对于C++程序,一个重要的过程便是编译(compile)。 单个源文件的编译编译如下文件: 12345678910111213// helloworld.cpp# include<iostream>void print(){ std::cout << "hello world" << std::endl;}int main(){ std::cout << "Print" << std::endl; print();} 编译方式是在bash等终端里输入: 12g++ -c helloworld.cppg++ -o main helloworld.o 这样会产生中间文件helloworld.o,因为这里只有单个.o文件没有要链接的其他文件,可以委托g++一步到位: 1g++ -o...
图神经网络学习:Overview
前言这是对斯坦福公开课CS224w 图神经网络的自学笔记。参考了来自@同济子豪兄的视频讲解p.s.生啃英文总有一种听懂了但没完全听懂的感觉:( 什么是图(Graph)一言以蔽之:图是关系的结构。我们用图来表示数据之间的关系,这个数据可以是任何有联系的事物。自然世界很多耳熟能详的东西都可以抽象成由节点、节点之间的连接形成的图/网络。图由节点(Node)和边(Edge)组成。一整个图(全图)可以表示成$G(N,E)$ 怎样设计一个图?设计一个图首先要得到其本体(Ontology)。 ...
C++学习:virtual虚函数
前言学习面向对象编程,关键就是要理解封装、继承、多态这三种思想,在C++中,基类与派生类之间的多态性可以由virtual关键字来实现 多态(polymorphism)什么是多态?通俗地讲,多态就是“龙生九子,各有不同”。在当前语境下可以理解为:面对不同的实例,所执行的方法是不同的。 一个类作为基类,能够“生”出许多派生类。当我们传入某一个派生类的实例时,程序能够正确地执行与该派生类对应的方法。这就是所谓“运行时多态” 虚函数定义父类的某些成员函数,能在子类中被覆盖重写(override),在父类中声明时用virtual修饰,在子类中可重定义,并且可以在函数名后面标注override来提示。 如下实例: 123456789101112131415161718192021222324252627282930#include<iostream>class Ball //球类游戏{public: virtual void getBallName() { std::cout<<...
C++学习:静态(static)
首先在学习过程中多次见到静态这个概念,它出现在不同的地方时,含义和用法也不尽相同。想要有一个比较完整的了解,你需要掌握的是:编译与链接、作用域、类与对象的基本知识。static关键字显式地规定了数据的储存方式,有助于栈区内存管理。 在类与结构体外使用static关键字静态变量存储在静态存储区的变量即为静态变量,一般我们说的“全局变量”指的是“具有外部链接性的静态变量”在全局变量声明时加入static修饰符,使得这个变量:1,具有内部链接性;2,生命周期(life time)扩展到整个程序 与天同寿项目中的一个 t1.cpp 源文件中如下定义: 123456789101112131415# include <iostream>static int a = 114;//静态全局变量int b = 514;//全局变量void foo(){ static int c = 1919; //静态局部变量 int d = 810; //局部变量 std::cout << c <<...
hexo+butterfly主题下美化笔记(一)
hexo+butterfly 主题 博客装修笔记(一) 副标题、背景图和侧边栏hexo 6.3.0 + butterfly 4.5.1 善用 VSCode 的 “Ctrl + F”查找功能快速定位对应设置副标题(subtitle)若主题 config 中未定义副标题内容,可以直接在 hexo 原本的_config.yml 中修改副标题内容。1234567# Sitetitle: # 网站标题subtitle: # 副标题description: # 描述author: #站长名字language: zh-CNtimezone: # 时区 实现文字换行:在如下实例中将字符串用\<br> 隔开。在字符串中直接加 \n , \, <<endl 是不行的!(雾 1234567# Sitetitle: # 网站标题subtitle: "Talk is cheap<br>Show me your code" # 副标题description: # 描述author: #站长language:...