参考文章:自监督学习
可以被看作是机器学习的一种“理想状态”,模型直接从无标签数据中自行学习,无需标注数据。
(一)学习简介
(1)自监督学习的核心,在于如何自动为数据产生标签。例如输入一张图片,把图片随机旋转一个角度,然后把旋转后的图片作为输入,随机旋转的角度作为标签。再例如,把输入的图片均匀分割成3*3的格子,每个格子里面的内容作为一个patch,随机打乱patch的排列顺序,然后用打乱顺序的patch作为输入,正确的排列顺序作为label。类似这种自动产生的标注,完全无需人工参与。
(2)自监督学习如何评价性能?自监督学习性能的高低,主要通过模型学出来的feature的质量来评价。feature质量的高低,主要是通过迁移学习的方式,把feature用到其它视觉任务中(分类、分割、物体检测…),然后通过视觉任务的结果的好坏来评价。目前没有统一的、标准的评价方式。
(3)自监督学习的一个研究套路。前面说到,自监督学习的核心是如何给输入数据自动生成标签。之前的很多工作都是围绕这个核心展开的。一般的套路是:首先提出一个新的自动打标签的辅助任务(pretext task,例如:旋转图片、打乱patch顺序),用辅助任务自动生成标签,然后做实验、测性能、发文章。每年都有新的辅助任务被提出来,自监督学习的性能也在不断提高,有的甚至已经接近监督学习的性能。总体上说,或者是提出一种完全新的辅助任务,或者是把多个旧的辅助任务组合到一起作为一个“新”的辅助任务。
从扩展性的角度看自监督学习的发展
(二)
参考文章:
表示学习(Representation Learning)
概率图模型中的术语图指的是图论,也就是带有边和点的数学对象。确切地说,概率图模型(Probabilistic Graphical Models,PGM)是指:你想描述不同变量之间的关系,但是,你又对这些变量不太确定,只有一定程度的相信或者一些不确定的知识。
(1)贝叶斯概率图模型是有向图,因此可以解决有明确单向依赖的建模问题
(2)马尔可夫概率图模型是无向图,可以适用于实体之间相互依赖的建模问题。这两种模型以及两者的混合模型应用都非常广泛。条件随机场(CRF)广泛应用于自然语言处理(如词性标注,命名实体识别)。
在马尔科夫链中,每一个圆圈代表相应时刻的状态,有向边代表了可能的状态转移,权值表示状态转移概率。 HMM,隐马尔可夫模型,是一种有向图模型。由1阶马尔可夫模型演变而来,不同之处在于我们能够观测到的量不是过程本身,而是与其有一定关系的另一些量。那HMM中的隐体现在哪呢?这里“隐”指的是马尔科夫链中任意时刻的状态变量不可见,也就是说状态序列Y1,Y2,…,…,Yt无法直接观测到。但是HMM中每时刻有一个可见的观测值Xt与之对应.隐马尔可夫模型(HMM)是语音识别的支柱模型.
参考文章:
受限玻尔兹曼机RBM最通俗易懂的教程
玻尔兹曼机是一大类的神经网络模型,但是在实际应用中使用最多的则是受限玻尔兹曼机(RBM)。受限玻尔兹曼机(RBM)能学习并发现数据的复杂规则分布,将多个RBM堆叠就构成了深度置信网络(deep belief network, DBN),从而可以从更加复杂的高维输入数据中抽取维数更低、区别度较高的特征。
参考文章:
自动编码器
自动编码器就是一种尽可能复现输入信号的神经网络,一个自编码器模型,它由编码器(Encoder)和解码器(Decoder)两部分组成,本质上都是对输入信号做某种变换。
可以这么想,在我们强迫编码y和输入x
不同的情况下,系统还能够去复原原始信号x,那么说明编码y已经承载了原始数据的所有信息,但以一种不同的形式 !这就是特征提取,而且是自动学出来的!
目的:为了聚类的降维
可以看下面这个讲解视频:
【【中字】主成分分析法(PCA)| 分步步骤解析 看完你就懂了!-哔哩哔哩】
如何通俗易懂地讲解什么是 PCA(主成分分析)?
第一步:中心化
第二步:为了让
X
1
2
+
X
2
2
{X_1}^2+{X_2}^2
X12+X22最大
第三步:实际求主元
1、配置镜像源,镜像源下载贼快:
Conda - Downloaded bytes did not match Content-Length 问题解决方案
conda创建环境速度慢解决办法
Anaconda 查看、添加、删除 安装源
2、用了镜像源还慢的问题:
亲测绝对有效——解决pytorch安装下载慢(清华源+缓存到本地)
3、服务器里好几个用户,配置好几个anaconda,想用指定anaconda,可以更改config设置:
Anaconda 修改默认虚拟环境安装位置
4、项目环境:
#!bin/bash
echo "Please make sure that you have installed Anaconda"
echo "create conda environment 'selfkg'"
conda create -n selfkg_l python=3.8.13
echo "activate selfkg"
conda activate selfkg_l
echo "install pytorch"
conda install pytorch=1.9.0 torchvision torchaudio cudatoolkit=11.1 -c pytorch # change according to your need here
echo "install faiss-cpu=1.7.1"
conda install -n selfkg faiss-cpu=1.7.1 -c pytorch
echo "install numpy=1.19.2 pandas=1.0.5 tqdm=4.61.1 transformers=4.8.2"
pip install numpy==1.19.2 pandas==1.0.5 tqdm==4.61.1 transformers==4.8.2 torchtext==0.10.0
对于来自两个kg的每个配对实体,现有学习目标的目标是,如果它们实际上是相同的实体(即正对),则使它们彼此更相似,否则,如果它们是不同的实体(即负对),则使它们不相似。在嵌入空间中,这一目标是通过拉近对齐的实体和推开不同的实体来实现的。
正对是配对好的实体
负对是由从另一个KG中随机抽样的实体形成的(排除了正对实体)。
为了解决有标签感知负抽样的监管和没有标签感知负抽样的假阴性样本冲突的困境
(1)相对相似度度量:为了摆脱标签监督,我们从理论上提出了相对相似度度量(RSM)的概念,实现了自我监督的学习目标。RSM的核心思想是,它不是直接将对齐的实体在嵌入空间中拉得更近,而是试图将未对齐的负推得更远,从而避免使用正对的监督。
(2)自负采样:为了解决有标签感知负抽样的监管和没有标签感知负抽样的假阴性样本冲突的困境,SelfKG进一步提出了自负抽样策略,即对一个KG中的每个实体,直接从同一KG中抽样实体形成其负对。换句话说,SelfKG完全依赖于从输入kg中随机抽样的负实体对。
(3)多重负队列:随着负样本数量的增加,自监督损失误差项衰减得更快,也就是说,大量的负样本可以使SelfKG受益,在飞行中编码大量的负样本在计算上非常昂贵。我们通过扩展MoCo(Momentum Contrast 无监督学习)技术来解决这个问题,以支持两个负队列,每一个对应于两个KGs用于对齐,确保负样本的有效增加。(没看懂?)
参考文章:
通俗易懂的NCE Loss
把多分类问题转化成二分类。之前计算softmax的时候class数量太大,NCE索性就把分类缩减为二分类问题。之前的问题是计算某个类的归一化概率是多少,二分类的问题是input和label正确匹配的概率是多少。
可以自负采样,但是自然界中也存在一定的噪声,证明了一定量的噪声不会影响NCE损耗的收敛
batch_size:N
训练到:K+1次截止
负例数量:|E|
在线编码器的参数
θ
o
n
l
i
n
e
\theta_{online}
θonline随着反向传播而立即更新时,通过:
θ
t
a
r
g
e
t
←
𝑚
⋅
θ
t
a
r
g
e
t
+
(
1
−
𝑚
)
⋅
θ
o
n
l
i
n
e
,
𝑚
∈
[
0
,
1
)
\theta_{target}←𝑚·\theta_{target}+(1−𝑚)·\theta_{online},𝑚∈[0,1)
θtarget←m⋅θtarget+(1−m)⋅θonline,m∈[0,1)用动量异步更新目标编码器
θ
t
a
r
g
e
t
\theta_{target}
θtarget当前批次,然后推入负队列。
首先,在线编码器与BYOL中相同,引入了一个预测头(将原先的对比任务转化为了分类任务;同时,这步操作也让两个编码器不对称)。对于线上编码器,他是通过梯度回传来更新参数的,也就是说每次迭代之后参数都会有较显著的变化(与目标编码器对比)。在目标编码器上,采用的是动量更新参数的策略,也就是说他会使用在线编码器的梯度作为其更新的参数,但是其会大部分保留其原来的参数(动量大小一般设置为0.99)。
动量优化法是用之前 积累动量 来替代真正的梯度,每次迭代的梯度可以看作是 加速度,包括 Momentum 和 Nesterov 两种算法。
SelfKG优于除有监督CEAFF和BERT-INT外的所有有监督和无监督模型