梯度

图文了解RNN与LSTM(详细)

坚强是说给别人听的谎言 提交于 2020-02-27 13:20:47
递归神经网络是最先进的顺序数据算法之一,在苹果Siri和Google语音搜索中都使用到的算法。这是因为它是第一个记忆它的输入的算法,由于内部存储器,这使得它非常适合涉及顺序数据的机器学习问题。它是过去几年Deep Learning的惊人成就背后的算法之一。在这篇文章中,你将学习递归神经网络如何工作的基本概念,最大的问题是什么以及如何解决它们。 介绍 递归神经网络(RNN)是一种功能强大的神经网络类型,属于目前最有前途的算法,因为它们是唯一具有内部存储器的算法。 与许多其他深度学习算法一样,RNN也相对较旧。它们最初是在20世纪80年代创建的,但是由于可用计算能力的增加,现在我们拥有的大量数据以及20世纪90年代的LSTM的发明,这些数据的真正潜力逐渐发挥出来。 由于内部记忆,RNN能够记住他们收到的输入的重要信息,这使得他们能够非常精确地预测接下来会发生什么。 这就是为什么它们是像时间序列、语音、文本、财务数据、音频、视频、天气等时序数据的首选算法,因为它们可以形成对序列及其上下文的深入理解的算法。 递归神经网络在连续数据中产生预测结果,而其他算法则不能。 但是,你何时需要使用循环神经网络? “每当有数据序列时,连接数据的时间动态都比每个帧的空间内容更重要。”- Lex弗里德曼(麻省理工学院) 由于它们正在苹果和谷歌翻译的Siri软件中使用,神经网络正在各地出现。 他们如何工作?

D2L-pytorch版 Task07笔记

情到浓时终转凉″ 提交于 2020-02-27 10:45:59
优化算法进阶 1.Momentum 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向仅仅取决于自变量当前位置,这可能会带来一些问题。对于noisy gradient,我们需要谨慎的选取学习率和batch size, 来控制梯度方差和收敛的结果。 g t = ∂ w 1 ∣ B t ∣ ∑ i ∈ B t f ( x i , w t − 1 ) = 1 ∣ B t ∣ ∑ i ∈ B t g i , t − 1 . \mathbf{g}_t = \partial_{\mathbf{w}} \frac{1}{|\mathcal{B}_t|} \sum_{i \in \mathcal{B}_t} f(\mathbf{x}_{i}, \mathbf{w}_{t-1}) = \frac{1}{|\mathcal{B}_t|} \sum_{i \in \mathcal{B}_t} \mathbf{g}_{i, t-1}. g t ​ = ∂ w ​ ∣ B t ​ ∣ 1 ​ i ∈ B t ​ ∑ ​ f ( x i ​ , w t − 1 ​ ) = ∣ B t ​ ∣ 1 ​ i ∈ B t ​ ∑ ​

零基础入门深度学习(四):卷积神经网络基础之池化和Relu

天涯浪子 提交于 2020-02-27 10:03:27
课程名称 | 零基础入门深度学习 授课讲师 | 孙高峰 百度深度学习技术平台部资深研发工程师 授课时间 | 每周二、周四晚20:00-21:00 编辑整理 | 孙高峰 内容来源 | 百度飞桨深度学习集训营 出品平台 | 百度飞桨 01 导读 本课程是百度官方开设的零基础入门深度学习课程,主要面向没有深度学习技术基础或者基础薄弱的同学,帮助大家在深度学习领域实现从0到1+的跨越。从本课程中,你将学习到: 深度学习基础知识 numpy实现神经网络构建和梯度下降算法 计算机视觉领域主要方向的原理、实践 自然语言处理领域主要方向的原理、实践 个性化推荐算法的原理、实践 本周为开讲第三周,百度深度学习技术平台部资深研发工程师孙高峰,开始讲解深度学习在计算机视觉方向实践应用。今天为大家带来的是卷积神经网络基础之池化和Relu。 02 池化(Pooling) 池化是使用某一位置的相邻输出的总体统计特征代替网络在该位置的输出,其好处是当输入数据做出少量平移时,经过池化函数后的大多数输出还能保持不变。比如:当识别一张图像是否是人脸时,我们需要知道人脸左边有一只眼睛,右边也有一只眼睛,而不需要知道眼睛的精确位置,这时候通过约化某一片区域的像素点来得到总体统计特征会显得很有用。由于池化之后特征图会变得更小,如果后面连接的是全连接层,能有效的减小神经元的个数,节省存储空间并提高计算效率。如 图10 所示

Pytorch中的自动求梯度机制和Variable类

梦想的初衷 提交于 2020-02-27 09:07:19
  自动求导机制是每一个深度学习框架中重要的性质,免去了手动计算导数,下面用代码介绍并举例说明Pytorch的自动求导机制。   首先介绍Variable,Variable是对Tensor的一个封装,操作和Tensor是一样的,但是每个Variable都有三个属性:Varibale的Tensor本身的.data,对应Tensor的梯度.grad,以及这个Variable是通过什么方式得到的.grad_fn,根据最新消息,在pytorch0.4更新后,torch和torch.autograd.Variable现在是同一类。torch.Tensor能像Variable那样追踪历史和反向传播。Variable仍能正确工作,但是返回的是Tensor。   我们拥抱这些新特性,看看Pytorch怎么进行自动求梯度。 1 #encoding:utf-8 2 import torch 3 4 x = torch.tensor([2.],requires_grad=True) #新建一个tensor,允许自动求梯度,这一项默认是false. 5 y = (x+2)**2 + 3 #y的表达式中包含x,因此y能进行自动求梯度 6 y.backward() 7 print(x.grad)   输出结果是: tensor([8.])   这里添加一个小知识点,即torch.Tensor和torch

为什么需要每次计算梯度都要清空

我与影子孤独终老i 提交于 2020-02-26 14:46:12
为什么需要每次计算梯度都要清空 待办 根据pytorch中的backward()函数的计算,当网络参量进行反馈时,梯度是被积累的而不是被替换掉;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积,因此这里就需要每个batch设置一遍zero_grad 了。 其实这里还可以补充的一点是,如果不是每一个batch就清除掉原有的梯度,而是比如说两个batch再清除掉梯度,这是一种变相提高batch_size的方法,对于计算机硬件不行,但是batch_size可能需要设高的领域比较适合,比如目标检测模型的训练。 关于这一点可以参考: https://discuss.pytorch.org/t/why-do-we-need-to-set-the-gradients-manually-to-zero-in-pytorch/4903/3 关于backward()的计算可以参考: https://discuss.pytorch.org/t/how-to-use-the-backward-functions-for-multiple-losses/1826/5 ———————————————— 版权声明:本文为CSDN博主「xiaoxifei」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.csdn

激活函数sigmoid 、tanh、Relu、Leaky Relu 优缺点对比

穿精又带淫゛_ 提交于 2020-02-26 02:05:28
同学你好,这是个很好的问题,flare老师在第8章卷积神经网络的章节也有提及“为什么CNN结构使用relu替代sigmoid作为激活函数”。flare老师和大家分享常用激活函数的优缺点: sigmoid: 很直观的反映了二分类任务的事件可能性(概率),通过引入双边极值稳定的非线性函数关系能有效地模拟神经元信息机制,在逻辑回归与神经网络中被广泛使用。 缺陷:双边区域数值饱和(x很大或很小)导致随着x变化带来的y变化很小,导数趋于零,容易造成模型求解梯度消失问题。当我们建立一个复杂的神经网络,比如用于机器视觉的卷积神经网络,多层信息传递后,对模型进行反传导的梯度求解会存在梯度消失的情况,导致无法找到最优解。 tanh:和sigmoid挺像的,也是双边极值稳定的非线性函数关系,而且因为正负方向以原点对称,输出均值是0(与很多样本的分布均值接近),使得其收敛速度要比sigmoid快,减少迭代次数。也存在梯度消失问题。 relu:全称是Rectified Linear Units,是一种后来才出现的激活函数。 可以看到,当x<0时,ReLU饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。相比于纯线性的激活函数,relu函数存在梯度不相同的两个区域,从而能实现非线性关系的拟合。 然而,随着训练的推进,部分输入会落入硬饱和区

随机梯度下降的逻辑回归算法(SGDLR)

浪尽此生 提交于 2020-02-25 20:00:04
由于第一次实验的实验报告不在这台机器,先写这一算法吧。 SGDLR(the Stochastic Gradient Descent for Logistic Regression),要讲解这一算法,首先要把名字拆为几块。 1 随机 2 梯度下降 3逻辑回归 先贴一篇文章: http://blog.csdn.net/zouxy09/article/details/20319673 这篇文章中解释的还不错。 其实这一算法,通俗来讲是这样子的: 1、手中肯定有很多带有label标记的数据,这是训练集。 2、我们期望能够建立一个带参数的式子,来计算某种情况出现的概率,以便于后面预测测试集的类别的时候,计算它在每一类的概率,取概率大的为自己的类。 3、由于sigmoid函数的优势:连续,光滑,严格单调,关于(0,0.5)中心对称,形如下图, 公式① 利用下面这个式子变换得到: 所以我们只需要计算出参数的值,就可以用公式①计算概率。 4、所有在训练集中出现的样本,已经真实存在了,所以它们带入计算出的概率应该是最大的,理想情况为1。根据这一特征来计算参数值。 5、式子并不是一个线性可解的,需要使用极大似然,这一算法不再赘述请自行谷歌。但是后来发现求参数的偏导数的时候,导数为0线性不可解,这时候就要用到梯度下降的算法。 6、所谓梯度下降的算法,事实上是从一个起点,一步步的试探,来回震荡

从结构到性能,一文概述XGBoost、Light GBM和CatBoost的同与不同

ⅰ亾dé卋堺 提交于 2020-02-25 15:48:18
尽管近年来神经网络复兴并大为流行,但是 boosting 算法在训练样本量有限、所需训练时间较短、缺乏调参知识等场景依然有其不可或缺的优势。本文从算法结构差异、每个算法的分类变量时的处理、算法在数据集上的实现等多个方面对 3 种代表性的 boosting 算法 CatBoost、Light GBM 和 XGBoost 进行了对比;虽然本文结论依据于特定的数据集,但通常情况下,XGBoost 都比另外两个算法慢。 最近,我参加了 kaggle 竞赛 WIDS Datathon,并通过使用多种 boosting 算法,最终排名前十。从那时开始,我就对这些算法的内在工作原理非常好奇,包括调参及其优劣势,所以有了这篇文章。尽管最近几年神经网络复兴,并变得流行起来,但我还是更加关注 boosting 算法,因为在训练样本量有限、所需训练时间较短、缺乏调参知识的场景中,它们依然拥有绝对优势。 2014 年 3 月,XGBOOST 最早作为研究项目,由陈天奇提出2017 年 1 月,微软发布首个稳定版 LightGBM2017 年 4 月,俄罗斯顶尖技术公司 Yandex 开源 CatBoost 由于 XGBoost(通常被称为 GBM 杀手)已经在机器学习领域出现了很久,如今有非常多详细论述它的文章,所以本文将重点讨论 CatBoost 和 LGBM,在下文我们将谈到:

初学算法——梯度下降法

和自甴很熟 提交于 2020-02-24 23:59:52
梯度下降算法 注: :=是赋值的意思 右边错误是因为temp1中采用了更新后的θ0,而梯度下降算法中要求的是同时更新;右边是另外一种算法 α太大,可能会导致不收敛 线性代数知识: 矩阵的加减乘除算法、单位矩阵、逆矩阵运算、矩阵的转置定义相关知识 特征缩放法 目的:加快梯度下降算法的收敛速度。 问题描述:如上左图,如果取值θ1=(0 ,5),θ2=(0,2000),则代价函数的2D图会如左图所示,很狭长,在用梯度下降算法寻找最小值的路线可能是弯弯曲曲,需要废掉很长的时间; 当我将θ1,θ2取值分别除以他的取值长度5,2000后,得到的取值范围再画2D图(上右图),则寻找收敛值得曲线会是趋向于一条直线,故这样会大大加快收敛得速度 注:缩放之后的值不能太小,也不能太大;经验值:(-3,3)之间都能接受。 均值归一化 目的:加快梯度下降算法的收敛速度 注: 不同的人算出来的范围可能有出入,但是这并不影响最终结果,这些方法只是为了加快收敛速度。 调整学习率α值 如果代价函数出现了下面这种情况,那么很有可能是学习率α取值太大引起的;(确保编程没有错误的情况下) 适当的学习率值,对于寻找收敛值很关键; 太大,可能出现不收敛; 太小,会出现收敛过慢; 所以再学习之前先做一系列的收敛测试,选择一个收敛中的最大的α值进行学习 来源: CSDN 作者: YUE.YUN 链接: https://blog