梯度

【论文总结】LINE和DEEPWALK方法总结与比较

血红的双手。 提交于 2020-03-17 07:53:58
LINE(large-scale information network embedding) 研究问题: 大规模信息网络嵌入低维向量空间。 模型优点: 1、可适应任意类型的网络:有向、无向、有权、无权。 2、采用一阶相似度和二阶相似度结合 3、边采样优化方法解决了SGD的局限性(边的权值变换很大 时,学习率难以选择,并且权值和乘以梯度导致梯度爆炸) 模型描述: 1、一阶相似度的LINE模型(只用于无向图) 为了模拟一阶相似度,对于每个无向边(i,j),我们定义顶点vi和vj之间的联合概率如下: (sigmoid function,向量越接近,点积越大,联合概率越大。其中,ui表示节点vi对应的向量。) 经验概率可以定义为:(两点之间边的权值越大,经验概率越大) 为了保持一阶相似性,一个简单的办法是最小化下面的目标函数: 我们选择最小化两个概率分布的KL散度,用KL散度代替d(·,·)并省略一些常数,得到: KL散度公式: 只考虑一阶相似度的情况下,改变同一条边的方向对于最终结果没有什么影响。因此一阶相似度只能用于无向图,不能用于有向图。 2、二阶相似度的LINE模型 二阶相似度可以用于 有向图和无向图 。下面是针对有向图的算法(在无向图中,可以将每条边看成是两条方向相反且有相同权重的有向边)。   二阶相似度假设共享邻居的顶点彼此相似。每个顶点扮演两个角色

梯度消失和爆炸

独自空忆成欢 提交于 2020-03-16 18:26:22
梯度消失和梯度爆炸: 梯度消失和梯度爆炸可以从同一个角度来解释, 根本原因是神经网络是根据链式求导法, 根据损失函数指导神经元之间的权重经行更新, 神经元的输入在经过激活函数激活, 通常, 如果我们选择sigmoid为激活函数: 通常,若使用的激活函数为sigmoid函数,其导数为: 这样可以看到,如果我们使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数,其连乘后,结果会变的很小,导致梯度消失。若我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸。 如何解决? 更换激活函数,如Relu, Tanh, 但Tanh的导数也是小于1的, 也有可能发生梯度消失/爆炸 由上图可知,ReLU函数的导数,在正值部分恒为1,因此不会导致梯度消失或梯度爆炸问题。 另外ReLU函数还有一些优点: 计算方便,计算速度快 解决了梯度消失问题,收敛速度快 参数阶段, 将w截取到一个范围内, wgan就是这样做的 残差连接 BN 正则化,惩罚参数项目 https://blog.csdn.net/weixin_39853245/article/details/90085307 来源: https://www.cnblogs.com/zhouyc/p/12505364.html

梯度消失和爆炸产生的主要原因及解决办法

笑着哭i 提交于 2020-03-12 13:56:36
在牛客刷题来总结一下,发现总结后的吸收效果更好,有表达不清和理解错误的地方希望大家指出。 从原理上,梯度消失和爆炸都是由链式求导法则引起了,区别在于在链式法则的连乘过程中,某个参数的引起的改变是被无限缩小(梯度消失)还是无限放大 (梯度爆炸)。故这里只讨论一下梯度消失的问题。 梯度消失产生是由于链式法则的无限缩小引起的:其中的“无限”体现在网络的层数,“缩小”则由不合适的激活函数引起。 (1)网络层数过多的情况下,考虑一种极端情况,若每层网络计算的导数值均小于1,则经过多层网络连乘后,最前面几层网络的参数的更新值将会无限小。 (2)激活函数选择不合适,比如使用sigmoid,梯度消失就会很明显,原因如果使用sigmoid作为损失函数,其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失。 解决方法: (1)pre-training+fine-tunning 其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。 (2) 选择relu等梯度大部分落在常数上的激活函数 relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失的问题

PyTorch的Autograd: 自动微分

被刻印的时光 ゝ 提交于 2020-03-10 23:47:54
原文出自 http://studyai.com/pytorch-1.4/beginner/blitz/autograd_tutorial.html 在PyTorch的所有神经网络中,核心是 autograd 包。让我们先简单介绍一下, 然后我们将开始训练我们的第一个神经网络。 autograd package 为张量上的所有操作提供自动微分(automatic differentiation)。 它是一个按运行定义的框架(define-by-run framework), 这意味着您的后端(backprop)由您的代码运行方式来定义,并且每个迭代都可能是不同的。 让我们用更简单的术语来看这一点,并举几个例子。 张量(Tensor) torch.Tensor 是此package的核心类。 如果你将它的属性 .requires_grad 设置为 True, 它就开始跟踪在它上面的所有运算操作。当你完成计算时你可以调用 .backward() , 这会使得所有的梯度都被自动计算出来。对于这个tensor的梯度将会被累加到 .grad 属性中去。 如果想要阻止一个tensor不去跟踪历史(tracking history), 你可以调用 .detach() 方法 把它从计算历史中分离出来, 并且会阻止进一步的计算被跟踪。 若要防止跟踪历史记录(并使用内存),还可以把代码块封装在with语句

【UFLDL】Exercise: Convolutional Neural Network

梦想的初衷 提交于 2020-03-10 18:12:48
这个exercise需要完成cnn中的forward pass,cost,error和gradient的计算。需要弄清楚每一层的以上四个步骤的原理,并且要充分利用matlab的矩阵运算。大概把过程总结了一下如下图所示: STEP 1:Implement CNN Objective STEP 1a: Forward Propagation Forward Propagation主要是为了计算输入图片经过神经网络后的输出,这个网络有三层:convolution->pooling->softmax(dense connected),卷积层对于每个图像用所有的模板进行卷积;pooling层对卷积层输出的feature map采样;softmax层根据pooling层输出的feature预测图像的分类结果。其中convolution和pooling操作在 之前 就实现过了。具体的过程可以参见上图中Forward Pass中每层的具体操作。代码如下: %%% YOUR CODE HERE %%% %调用之前已经实现的函数 activations = cnnConvolve(filterDim, numFilters, images, Wc, bc);%sigmoid(wx+b) activationsPooled = cnnPool(poolDim, activations); %

梯度下降法--python实现

邮差的信 提交于 2020-03-09 14:48:12
梯度下降是迭代法的一种,可以用于求解最小二乘问题,不是一个机器学习算法,而是一种基于搜索的最优化方法。在求解无约束优化问题时,梯度下降法是最常用的一种方法之一,最小二乘法也是一种。 在直线方程中,导数代表斜率。在曲线方程中,导数代表切线斜率。切线斜率∇wJ的正负,也代表函数增大的方向。设-η∇wJ,η称为学习率,影响获得最优解的速度,当取值不适当时,得不到相应的值。它是一个超参数。 η太小时,降低收敛的速度,η太大时,可能导致不收敛。 def J ( theta ) : return ( theta - 2.5 ) ** 2 - 1 def dJ ( theta ) : return 2 * ( theta - 2.5 ) theta_history = [ ] def grandient_descent ( inital_theta , eta , esplison ) : theta = inital_theta theta_history . append ( inital_theta ) while True : last_theta = theta theta = theta - eta * dJ ( theta ) theta_history . append ( theta ) if abs ( J ( theta ) - J ( last_theta ) ) < 0

【计算机视觉03】SIFT特征提取与检索

回眸只為那壹抹淺笑 提交于 2020-03-09 00:35:42
本文参考博客:https://blog.csdn.net/fangjian1204/article/details/10522455 文章目录 一、建立高斯差分金字塔 1.基本概念 2.构建高斯金字塔 3.构建Dog金字塔 二、关键点位置确定 1.基本概念 2.DoG局部极值点 3.去除边缘响应 三、关键点方向分配 四、关键点描述 五、匹配 5.1 数据集 5.2 图片的SIFT特征提取 5.3 计算两张图片SIFT特征匹配结果 5.4 检索匹配 六、实验总结 -错误分析 -算法分析 一、建立高斯差分金字塔 1.基本概念 高斯金字塔里有两个概念:组(Octave)和层(Level); 不同大小的图片是组;同样大小的图片,在内部是层; 在同一组内,不同层图像的尺寸是一样的; 2.构建高斯金字塔 高斯金字塔每层中的多幅图像,是通过对同一幅输入图像进行不同尺度的高斯卷积得来的。 高斯金字塔的组数为: 计算高斯模糊的系数σ: σ 为尺度空间坐标, s 为每组中层坐标, σ0 为初始尺度, S 为每组层数(一般层数为3~5)。 根据公式推理可以得到,金字塔组内各层尺度以及组间各图像尺度关系: 相邻两组的同一层尺度为2倍的关系 。 3.构建Dog金字塔 高斯金字塔相邻两层相减,便可以得到 DoG (Difference of Gaussian)金字塔。

【PyTorch】PyTorch中的梯度累加

梦想与她 提交于 2020-03-08 03:40:56
PyTorch中的梯度累加 使用PyTorch实现梯度累加变相扩大batch PyTorch中在反向传播前为什么要手动将梯度清零? - Pascal的回答 - 知乎 https://www.zhihu.com/question/303070254/answer/573037166 这种模式可以让梯度玩出更多花样,比如说梯度累加(gradient accumulation) 传统的训练函数,一个batch是这么训练的: for i,(images,target) in enumerate(train_loader): # 1. input output images = images.cuda(non_blocking=True) target = torch.from_numpy(np.array(target)).float().cuda(non_blocking=True) outputs = model(images) loss = criterion(outputs,target) # 2. backward optimizer.zero_grad() # reset gradient loss.backward() optimizer.step() 获取loss:输入图像和标签,通过infer计算得到预测值,计算损失函数; optimizer.zero_grad()

梯度,散度,拉普拉斯算子

拜拜、爱过 提交于 2020-03-07 22:51:33
综述 说到mesh上的处理技巧,拉普拉斯绝对是关键的一环,比如surface smoothing, parameterization and shape modeling等等都是十分重要的。 人们常说的是,拉普拉斯算子其实就是梯度的散度。 写在前面 首先给出:纯量(标量),矢量 标量(scalar),亦称“无向量”。有些物理量,只具有数值大小,而没有方向,部分有正负之分。物理学中,标量(或作 纯量 )指在坐标变换下保持不变的物理量。用通俗的说法,标量是只有大小,没有方向的量。 矢量(vector)是一种既有大小又有方向的量,又称为向量。 一般来说,在物理学中称作矢量,例如速度、加速度、力等等就是这样的量。 梯度 标量 -> 矢量 想象一座山,山的每一个点上都得到一个向量(事实上在三维中,你可以随意的定义方向向量),假设我们现在的向量指向每个点变化最陡的那个方向,而向量的大小(模)则代表了这个最陡的方向到底有多陡。梯度,众所周知,是一个向量。 散度 矢量 -> 标量 散度的作用对象是向量场,如果现在我们考虑任何一个点(或者说这个点的周围 极小的一块区域 ),在这个点上,向量场的发散程度,如果是正的,代表这些向量场是往外散出的。如果是负的,代表这些向量场是往内集中的。 思考一个点电荷激发的电场,任意选取一个单位体积,若是单位体积不包含该电荷,那么毫无疑问

图像处理——提取梯度

只谈情不闲聊 提交于 2020-03-07 17:21:15
1.图像的梯度——定义(百度百科) 根据图像梯度可以把图像看成二维离散函数f(x,y),图像梯度其实就是这个二维离散函数的求导(即f(x,y)的求导得G(x,y)): 图像梯度: G(x,y) = dx(i,j) + dy(i,j); dx(i,j) = I(i+1,j) - I(i,j); dy(i,j) = I(i,j+1) - I(i,j); 其中,I是图像像素的值(如:RGB值),(i,j)为像素的坐标。 图像梯度一般也可以用中值差分: dx(i,j) = [I(i+1,j) - I(i-1,j)]/2; dy(i,j) = [I(i,j+1) - I(i,j-1)]/2; 梯度的方向是图像函数f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度, 由图像梯度构成的图像成为梯度图像 。 2.图像梯度作用 a.通过图像的梯度提取边缘信息,可用于边缘检测; b.通过图像的梯度计算灰度变化情况,增强图像质量。 3.python3实现图像梯度提取 class Image_Gradent(): def __init__(self,image_name): self.img = image_name; #Sobel算子 def sobel_demo(self): grad