反向传播

Pytorch--autograd

落爺英雄遲暮 提交于 2020-04-26 19:34:46
Pytorch–autograd 用Tensor训练网络很方便,但从上一小节最后的线性回归例子来看,反向传播过程需要手动实现。这对于像线性回归等较为简单的模型来说,还可以应付,但实际使用中经常出现非常复杂的网络结构,此时如果手动实现反向传播,不仅费时费力,而且容易出错,难以检查。torch.autograd就是为方便用户使用,而专门开发的一套自动求导引擎,它能够根据输入和前向传播过程自动构建计算图,并执行反向传播。 计算图(Computation Graph)是现代深度学习框架如PyTorch和TensorFlow等的核心,其为高效自动求导算法——反向传播(Back Propogation)提供了理论支持,了解计算图在实际写程序过程中会有极大的帮助。本节将涉及一些基础的计算图知识,但并不要求读者事先对此有深入的了解。关于计算图的基础知识推荐阅读Christopher Olah的文章 [1] 。 一.Variable PyTorch在autograd模块中实现了计算图的相关功能,autograd中的核心数据结构是Variable。Variable封装了tensor,并记录对tensor的操作记录用来构建计算图。Variable的数据结构如图3-2所示,主要包含三个属性: data :保存variable所包含的tensor grad :保存 data 对应的梯度, grad

单图像三维重建、2D到3D风格迁移和3D DeepDream

十年热恋 提交于 2020-04-26 18:26:15
作者:Longway Date:2020-04-25 来源: 单图像三维重建、2D到3D风格迁移和3D DeepDream 项目网址: http://hiroharu-kato.com/projects_en/neural_renderer.html 代码网址:https://github.com/hiroharu-kato/neural_renderer 论文名称:Neural 3D Mesh Renderer(CVPR2018) 概述 对于二维图像背后的三维世界建模,哪一种三维表示最合适?现在常见的表示方法有点云、体素和网格,其中多边形网格具有良好的紧致性和几何性质。但是使用神经网络直接由多边形网格生成图像比较困难,因为光栅化的过程阻止了反向传播。因此,作者提出了一个近似的梯度栅格化,使渲染集成到神经网络。使用这个渲染器,可以执行带有轮廓图像监督的单图像三维网格重建,并且该系统比现有的基于体素的方法更好。此外,作者还首次在2D监督下执行基于梯度的3D网格编辑操作,如2D到3D风格迁移和3D DeepDream。 简介 从二维图像理解三维世界是计算机视觉的基本问题之一。人类在大脑中使用视网膜上的图像来模拟3D世界,机器也可以通过在2D图像背后显式地建模3D世界来更智能地工作。从3D世界生成图像的过程叫做渲染,这在计算机视觉里面非常重要。哪种3D表示方法是最适合建模3D世界

论文笔记(1):Deep Learning.

情到浓时终转凉″ 提交于 2020-04-24 09:23:54
论文笔记1:Deep Learning 2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature上发表深度学习的综述性论文,介绍了什么是 监督学习 、 反向传播来训练多层神经网络 、 卷积神经网络 、使用深度卷积网络进行图像理解、 分布式特征表示与语言处理、递归神经网络 ,并对深度学习技术的未来发展进行展望。 原文摘要: 1,深度学习可以让那些拥有多个处理层的计算模型来学习具有多层次抽象的数据的表示。 2,这些方法在许多方面都带来了显著的改善,包括最先进的语音识别、视觉对象识别、对象检测和许多其它领域,例如药物发现和基因组学等等。 3,深度学习能够发现大数据中的复杂结构。它是利用 BP算法来完成这个发现过程的。BP算法能够指导机器如何从前一层获取误差而改变本层的内部参数,这些内部参数可以用于计算表示。 4,深度卷积网络在处理图像、视频、语音和音频方面带来了突破,递归网络在处理序列数据,比如文本和语音方面表现出了闪亮的一面。 机器学习:被用来识别图片中的目标,将语音转换成文本,匹配新闻元素,根据用户兴趣提供职位或产品,选择相关的搜索结果。 传统的机器学习技术在处理未加工过的数据时,体现出来的能力是有限的。几十年来,想要构建一个模式识别系统或者机器学习系统

深度学习之循环神经网络(RNN)

冷暖自知 提交于 2020-04-24 09:23:39
循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络,适合用于处理视频、语音、文本等与时序相关的问题。在循环神经网络中,神经元不但可以接收其他神经元的信息,还可以接收自身的信息,形成具有环路的网络结构。 循环神经网络的参数学习可以通过随时间反向传播算法来学习,即按照时间的逆序把误差一步步往前传递。而当输入序列比较长时,会产生梯度爆炸或梯度消失问题,这也叫做长期依赖问题。为了解决这个问题,门控机制被引入来改进循环神经网络,也就是长短期记忆网络(LSTM)和门控循环单元(GRU)。 好了,看了上面概括性的描述,心头一定有许多疑问冒出来: 1、为什么循环神经网络拥有记忆能力呢? 2、循环神经网络的具体结构是什么样的? 3、循环神经网络怎么用随时间反向传播算法来学习? 4、循环神经网络的长期依赖问题是怎么产生的? 5、针对不同的任务,循环神经网络有哪些不同的模式? 这篇文章整理以上几个问题的答案。 一、循环神经网络的记忆能力 前馈神经网络是一个静态网络,信息的传递是单向的,网络的输出只依赖于当前的输入,不具备记忆能力。 而循环神经网络通过使用带自反馈的神经元,使得网络的输出不仅和当前的输入有关,还和上一时刻的输出相关,于是在处理任意长度的时序数据时,就具有短期记忆能力。 给定一个输入序列

可变形卷积 deformable convolution 学习记录

◇◆丶佛笑我妖孽 提交于 2020-04-24 08:34:08
Deformable ConvNets v1: 论文地址: https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch 工程地址: https://github.com/felixlaumon/deform-conv 论文地址: Deformable ConvNets v2: More Deformable, Better Results 工程地址: https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch 这里需要强调一下,N代表kernel_size*kernel_size,并不是通道数 offset = self.p_conv(x) #x.shape torch.Size([32,64,28,28]) #offset.shape torch.Size([32,18,28,28]) 这一步输入图片学习偏移量offset,输入的feature map尺寸是(64,28,28)分别表示通道数,h和w。输出之所以是18通道的,是因为kernel size是3,卷积核有3 3=9个点,每个点都有x偏移量和y偏移量(从这里看得出每个输入通道做同样的偏移处理),18通道的前九个通道表示x偏移量,后9个通道表示y偏移量。然后再经过一次卷积

深度学习面试题06:全连接神经网络正向传播与梯度反向传播

前提是你 提交于 2020-04-24 06:51:57
目录    链式法则    逻辑回归的正、反向传播    逻辑回归的正、反向传播案例    全连接神经网络的正、反向传播    全连接神经网络的正、反向传播案例    参考资料 链式法则 类型一: 类型二: 类型三: 返回目录 逻辑回归的正、反向传播 逻辑回归可以看做最简单的神经网络,他只有一个神经元,损失函数选择的是对数损失,他的 正向传播 过程如下图所示: 逻辑回归可以看做最简单的神经网络,他只有一个神经元,损失函数选择的是对数损失,他的 正向传播 过程如下图所示: 接下来反向计算损失函数对每个变量的导数。如果你想直接求L对w 1 的导数是会产生很多重复计算的,回忆下链式求导法则就知道了。因此我们从右向左求导数,这样可以避免重复计算,也就是梯度 反向传播 的过程,如下图所示: 然后就可以更新w和b,更新模型了,即 非常简单吧,下面我们通过一个案例演示,看一下如何梯度反向传播(BP算法)是如何降低训练误差的。 返回目录 逻辑回归的正、反向传播案例 假设最开始初始化 ,本轮训练样本为[(2,3),0],损失函数选用的对数损失,如下图所示: 可以看出在当前模型参数下,正向传播后,损失为2.859 接下来,使用BP算法更新模型参数,如下图所示: 如果再进行正向传播计算损失的话,可以发现,损失从2.859降低到1.682: 返回目录 全连接神经网络的正、反向传播

网络权重初始化方法 常数初始化、Lecun、Xavier与He Kaiming

喜夏-厌秋 提交于 2020-04-23 14:37:14
梯度消失与梯度爆炸 梯度为偏导数构成的向量。 损失函数收敛至极小值时,梯度为0(接近0),损失函数不再下降。 我们不希望在抵达极小值前,梯度就为0了,也不希望下降过程过于震荡,甚至不收敛。 梯度消失与梯度爆炸分别对应这2种现象, 梯度消失(vanishing gradients) :指的是在训练过程中,梯度(偏导)过早接近于0的现象,导致(部分)参数一直不再更新,整体上表现得像损失函数收敛了,实际上网络尚未得到充分的训练。 梯度爆炸(exploding gradients) :指的是在训练过程中,梯度(偏导)过大甚至为NAN(not a number)的现象,导致损失剧烈震荡,甚至发散(divergence)。 由上一节的分析可知,在梯度(偏导)计算中,主要的影响因素来自 激活函数的偏导 、当前层的输入(前一层的输出)、以及 权重的数值 等, 这些因子连续相乘,带来的影响是指数级的 。训练阶段, 权重在不断调整 ,每一层的输入输出也在不断变化, 梯度消失和梯度爆炸可能发生在训练的一开始、也可能发生在训练的过程中 。 因子项中当前层的输入仅出现一次,下面着重看一下激活函数和权重的影响。 激活函数的影响 以Sigmoid和Tanh为例,其函数与导数如下(来自 链接 ), Sigmoid和Tanh,及其导数 两者的导数均在原点处取得最大值,前者为0.25后者为1,在远离原点的正负方向上

深度学习之反向传播算法(BP)代码实现

浪尽此生 提交于 2020-04-23 08:17:45
反向传播算法实战 本文仅仅是反向传播算法的实现,不涉及公式推导,如果对反向传播算法公式推导不熟悉,强烈建议查看另一篇文章 神经网络之反向传播算法(BP)公式推导(超详细) 我们将实现一个 4 层的全连接网络,来完成二分类任务。网络输入节点数为 2 ,隐藏 层的节点数设计为: 25、50 和 25 ,输出层两个节点,分别表示属于类别 1 的概率和类别 2 的概率,如下图所示。这里并没有采用 Softmax 函数将网络输出概率值之和进行约束, 而是直接利用均方误差函数计算与 One-hot 编码的真实标签之间的误差,所有的网络激活 函数全部采用 Sigmoid 函数,这些设计都是为了能直接利用我们的梯度传播公式。 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split 1. 准备数据 X, y = datasets.make_moons(n_samples=1000, noise=0.2, random_state=100) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,

Fast-Rcnn论文翻译

≯℡__Kan透↙ 提交于 2020-04-23 05:42:55
摘要   这篇论文提出一种用于目标检测的Fast R-CNN算法。Fast R-CNN建立在之前的研究工作,使用深度卷积网络来高效的分类目标提案。相比于之前的工作,Fast R-CNN采用了一些创新来提高训练和测试的速度,同时也提高了检测的准确率。Fast R-CNN训练深度VGG16网络比训练R-CNN快9倍,在测试时快213倍,并且在PASCAL VOC 2012数据集上获得了一个更高的平均平均准确率(mAP)。和SPPnet相比,Fast R-CNN训练VGG16比它快3倍,测试时快10倍,并且更加准确,Fast R-CNN采用python和C++(Cafe)实现, 开源代码 。 1 引言   目前,深度卷积网络已经明显的提高了图像分类和目标检测的准确率。相比于图像分类,目标检测则是一项更具挑战性的任务,它需要更加复杂的方法来解决。由于这种复杂性,目前多级管道中所获得的模型速度缓慢而且粗糙。   复杂性的产生是由于检测需要对目标进行精确的定位,这就产生了两个主要的挑战。第一,必须处理大量的候选目标位置(通常称为“提案”);第二,这些候选目标位置仅提供一个粗略的定位,这就必须对其进行改进以提供更加精确的定位。解决这些问题往往会影响速度、准确性和简单性。   在本文中,我们简化了最先进的基于卷积神经网络的目标检测器的训练过程,我们提出了一种单级的训练算法

神经网络的基础是MP模型?南大周志华组提出新型神经元模型FT

人走茶凉 提交于 2020-04-22 16:29:02
在此论文中,来自南京大学的张绍群博士和周志华教授提出一个新型神经元模型 Flexible Transmitter (FT),该模型具备灵活的可塑性并支持复杂数据的处理。据论文介绍,这项研究为神经网络提供了一种新的基本构造单元,展示了开发具有神经元可塑性的人工神经网络的可行性。 选自arXiv,作者:张绍群、周志华,机器之心编译。 当前的神经网络大多基于 MP 模型,即按照生物神经元的结构和工作原理构造出来的抽象和简化模型。此类模型通常将神经元形式化为一个「激活函数复合上输入信号加权和」的形式。 近日,来自南京大学张绍群博士和周志华教授提出了一个名为 Flexible Transmitter (FT) 的模型,这是一种具备灵活可塑性的新型生物拟真神经元。 FT 模型利用一对参数来建模神经元之间的传输递质(transmitter),并设置一个神经递质调节的记忆单元来记录所关注神经元的长期学习信息。因此, 该研究将 FT 模型形式化为一个二元二值函数,常用的 MP 神经元模型是其特殊形式。FT 模型可以处理更加复杂的数据,甚至时序信号。 为了展示 FT 模型的能力和潜力,研究者提出了 Flexible Transmitter Network (FTNet)。FTNet 基于最常见的全连接前馈架构而构建,并使用 FT 神经元作为其基本构造块。FTNet 允许梯度计算