梯度

哈工大 机器学习 lab1

£可爱£侵袭症+ 提交于 2019-12-06 17:10:15
哈尔滨工业大学计算机科学与技术学院 实验报告 课程名称: 机器学习 课程类型: 必修 实验题目: 多项式拟合正弦函数 一.实验目标 掌握最小二乘法求解(无惩罚项的损失函数)、掌握加惩罚项(2范数)的损失函数优化、梯度下降法、共轭梯度法、理解过拟合、克服过拟合的方法(如加惩罚项、增加样本) 二.实验要求和实验环境 实验要求 生成数据,加入噪声; 用高阶多项式函数拟合曲线; 用解析解求解两种loss的最优解(无惩罚项和有惩罚项) 优化方法求解最优解(梯度下降,共轭梯度); 用你得到的实验数据,解释过拟合。 用不同数据量,不同超参数,不同的多项式阶数,比较实验效果。 语言不限,可以用matlab,python。求解解析解时可以利用现成的矩阵求逆。梯度下降,共轭梯度要求自己求梯度,迭代优化自己写。不许用现成的平台,例如pytorch,tensorflow的自动微分工具。 实验环境 Microsoft win10 1809 python 3.7.0 Sublime Text 3 三.设计思想 1.算法原理 (0)数据的产生 x为 到 之间的随机数. 噪音 由一个标准正态分布函数 *0.1 产生 y = sin(x) + 利用循环, 根据x产生范德蒙德矩阵X 将 X, y 都转为矩阵类型 (1) 解析解(不带惩罚项) 误差函数: 将上式写成矩阵形式: 通过将上式求导我们可以得到式 令 得到

哈工大 机器学习 lab1

断了今生、忘了曾经 提交于 2019-12-06 17:08:31
哈尔滨工业大学计算机科学与技术学院 实验报告 课程名称: 机器学习 课程类型: 必修 实验题目: 多项式拟合正弦函数 一.实验目标 掌握最小二乘法求解(无惩罚项的损失函数)、掌握加惩罚项(2范数)的损失函数优化、梯度下降法、共轭梯度法、理解过拟合、克服过拟合的方法(如加惩罚项、增加样本) 二.实验要求和实验环境 实验要求 生成数据,加入噪声; 用高阶多项式函数拟合曲线; 用解析解求解两种loss的最优解(无惩罚项和有惩罚项) 优化方法求解最优解(梯度下降,共轭梯度); 用你得到的实验数据,解释过拟合。 用不同数据量,不同超参数,不同的多项式阶数,比较实验效果。 语言不限,可以用matlab,python。求解解析解时可以利用现成的矩阵求逆。梯度下降,共轭梯度要求自己求梯度,迭代优化自己写。不许用现成的平台,例如pytorch,tensorflow的自动微分工具。 实验环境 Microsoft win10 1809 python 3.7.0 Sublime Text 3 三.设计思想 1.算法原理 (0)数据的产生 x为 到 之间的随机数. 噪音 由一个标准正态分布函数 *0.1 产生 y = sin(x) + 利用循环, 根据x产生范德蒙德矩阵X 将 X, y 都转为矩阵类型 (1) 解析解(不带惩罚项) 误差函数: 将上式写成矩阵形式: 通过将上式求导我们可以得到式 令 得到

使用AI算法进行手写数字识别

a 夏天 提交于 2019-12-06 16:31:14
人工智能   人工智能(Artificial Intelligence,简称AI)一词最初是在1956年Dartmouth学会上提出的,从那以后,研究者们发展了众多理论和原理,人工智能的概念也随之扩展。由于人工智能的研究是高度技术性和专业的,各分支领域都是深入且各不相通的,因而涉及范围极广 。 人工智能的核心问题包括建构能够跟人类似甚至超越人类的推理、知识、学习、交流、感知、使用工具和操控机械的能力等,当前人工智能已经有了初步成果,甚至在一些影像识别、语言分析、棋类游戏等等单方面的能力达到了超越人类的水平 。   人工智能的分支领域非常多,主要有演绎推理、知识表示、规划、学习、自然语言处理……等十多个分支领域,而以机器学习为代表的“学习”领域,是目前研究最广泛的分支之一。 机器学习    机器学习(Machine Learning)是人工智能的一个分支,它是实现人工智能的一个途径,即以机器学习为手段解决人工智能中的问题。机器学习在近30多年已发展为一门多领域交叉性的学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。    机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法,该算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。 深度学习   深度学习(Deep Learning)是机器学习的分支,是一种以人工神经网络为架构

关于梯度爆炸和梯度消失的详解(转载)

假装没事ソ 提交于 2019-12-06 14:30:40
转载链接: https://www.jianshu.com/p/3f35e555d5ba 1.为什么使用梯度下降来优化神经网络参数? 反向传播(用于优化神网参数) :根据损失函数计算的误差通过反向传播的方式,指导深度网络参数的更新优化。 采取反向传播的原因:首先,深层网络由许多线性层和非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数 (非线性来自于非线性激活函数),因此整个深度网络可以视为是一个复合的非线性多元函数。 我们最终的目的是希望这个非线性函数很好的完成输入到输出之间的映射,也就是找到让损失函数取得极小值。所以最终的问题就变成了一个寻找函数最小值的问题,在数学上,很自然的就会想到使用梯度下降来解决。 2.梯度消失、爆炸会带来哪些影响 举个例子,对于一个含有三层隐藏层的简单神经网络来说, 当梯度消失发生时,接近于输出层的隐藏层由于其梯度相对正常,所以权值更新时也就相对正常,但是当越靠近输入层时,由于梯度消失现象,会导致靠近输入层的隐藏层权值更新缓慢或者更新停滞。这就导致在训练时,只等价于后面几层的浅层网络的学习。 3.产生的原因 以最简单的网络结构为例,假如有三个隐藏层,每层的神经元个数都是1,且对应的非线性函数为 (其中 为某个激活函数)如下图: 现在假设我们需要更新参数 ,那么我们就要求出损失函数对参数 的导数 而对于激活函数,之前一直使用Sigmoid函数

Batch Normalization详解

穿精又带淫゛_ 提交于 2019-12-06 14:23:34
目录 动机 单层视角 多层视角 什么是Batch Normalization Batch Normalization的反向传播 Batch Normalization的预测阶段 Batch Normalization的作用 几个问题 卷积层如何使用BatchNorm? 没有scale and shift过程可不可以? BN层放在ReLU前面还是后面? BN层为什么有效? 参考 博客: blog.shinelee.me | 博客园 | CSDN 动机 在博文《 为什么要做特征归一化/标准化? 博客园 | csdn | blog 》中,我们介绍了对输入进行Standardization后,梯度下降算法更容易选择到合适的(较大的)学习率,下降过程会更加稳定。 在博文《 网络权重初始化方法总结(下):Lecun、Xavier与He Kaiming 博客园 | csdn | blog 》中,我们介绍了如何通过权重初始化让网络在训练之初保持激活层的输出(输入)为zero mean unit variance分布,以减轻梯度消失和梯度爆炸。 但在训练过程中,权重在不断更新,导致激活层输出(输入)的分布会一直变化,可能无法一直保持zero mean unit variance分布,还是有梯度消失和梯度爆炸的可能,直觉上感到,这可能是个问题。下面具体分析。 单层视角 神经网络可以看成是上图形式

GHM论文笔记(CVPR2019)

独自空忆成欢 提交于 2019-12-06 08:42:51
目录 作者要解决的问题 Focal loss(CVPR2017) Focal loss的解决方案 Focal loss的不足 设计思路 梯度与样本的关系 梯度分布计算方法:将0-1的梯度切bin,计算每个bin内落入的样本数量。 梯度模计算方法 改进 最终结果 作者要解决的问题 仍然是one-stage中的一个经典问题,正负、难易样本不均衡。因为anchor的原因,pos : neg>= 1 : 70。负样本大多比较简单,所以也导致了难易样本的问题。 Focal loss(CVPR2017) Focal loss的解决方案 传统的交叉熵损失函数: \[ L_{CE} = -[p^*(log(p) + (1-p^*)log(1-p)] \] \(p^*=\{0, 1\}\) 为真实标签, \(p \in (0, 1)\) 为网络的预测概率。可以看到,传统的交叉熵损失函数平等的看待正负样本。 Focal loss \[ L = -[\alpha p^\gamma p^*log(p) + (1-\alpha)(1-p)^\gamma (1-p^*)log(1-p)] \] 可以看到Focal loss引入了两个超参数 \(\alpha, \gamma\) , \(\alpha\) 用来平衡正负样本, \(\gamma\) 用来平衡难易样本。简单分析一下,加号的左侧是正样本的损失

图像分割之canny边缘检测

北城余情 提交于 2019-12-05 22:01:39
转载 http://www.cnblogs.com/techyan1990/p/7291771.html 1. 写在前面 最近在做边缘检测方面的一些工作,在网络上也找了很多有用的资料,感谢那些积极分享知识的先辈们,自己在理解Canny边缘检测算法的过程中也走了一些弯路,在编程实现的过程中,也遇到了一个让我怀疑人生的BUG(日了狗狗)。就此写下此文,作为后记,也希望此篇文章可以帮助那些在理解Canny算法的道路上暂入迷途的童鞋。废话少说,上干货。 2. Canny边缘检测算法的发展历史 Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出,就此拉开了Canny边缘检测算法的序幕。 Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。Canny发现,在不同视觉系统上对边缘检测的要求较为类似,因此,可以实现一种具有广泛应用意义的边缘检测技术。边缘检测的一般标准包括: 1) 以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。 2) 检测到的边缘应精确定位在真实边缘的中心。 3) 图像中给定的边缘应只被标记一次,并且在可能的情况下,图像的噪声不应产生假的边缘。 为了满足这些要求

adam调参

坚强是说给别人听的谎言 提交于 2019-12-05 22:00:51
微调 #阿尔法 "learning_rate": 3e-5, #学习率衰减 "weight_decay": 0.1, // "weight_decay": 0.01, "clip_grad": 2, "batch_size": 30, "epoch_num": 1, "min_epoch_num": 1, "patience": 0.02, "patience_num": 3, "epsilon": 10e-8 # 防止除以零 如果不是微调 学习率和学习率的衰减率 都要增大 https://juejin.im/entry/5983115f6fb9a03c50227fd4 深度学习最常用的算法:Adam优化算法 阅读 15278 收藏 7 2017-08-03 原文链接: dataunion.org 从带宽扩展到丢包隐藏,实时音频中的 AI juejin.im 深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但所需的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam 算法正为此而生! Adam 优化算法是随机梯度下降算法的扩展式,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务。本文分为两部分,前一部分简要介绍了

pytorch的梯度计算以及backward方法

蓝咒 提交于 2019-12-05 21:54:22
基础知识 tensors: tensor在pytorch里面是一个n维数组。我们可以通过指定参数reuqires_grad=True来建立一个反向传播图,从而能够计算梯度。在pytorch中一般叫做dynamic computation graph(DCG)——即动态计算图。 import torch import numpy as np # 方式一 x = torch.randn(2,2, requires_grad=True) # 方式二 x = torch.autograd.Variable(torch.Tensor([2,3]), requires_grad=True) #方式三 x = torch.tensor([2,3], requires_grad=True, dtype=torch.float64) # 方式四 x = np.array([1,2,3] ,dtype=np.float64) x = torch.from_numpy(x) x.requires_grad = True # 或者 x.requires_grad_(True) note1: 在pytorch中,只有浮点类型的数才有梯度,故在方法四中指定np数组的类型为float类型。为什么torch.Tensor中不需要呢,可以通过以下代码验证 import torch import numpy as

PyTorch(六)——梯度反向传递(BackPropogate)的理解

主宰稳场 提交于 2019-12-05 21:54:01
目录连接 (1) 数据处理 (2) 搭建和自定义网络 (3) 使用训练好的模型测试自己图片 (4) 视频数据的处理 (5) PyTorch源码修改之增加ConvLSTM层 (6) 梯度反向传递(BackPropogate)的理解 (7) 模型的训练和测试、保存和加载 (8) pyTorch-To-Caffe (总) PyTorch遇到令人迷人的BUG PyTorch的学习和使用(六) 多个网络交替情况 最近使用PyTorch搭一个对抗网络,由于对抗网络又两个网络组成,其参数的更新也涉及到两个网络的交替。简单如下:生成器(generator)生成新的数据,辨别器(discrimator)用于判断数据是真实的还是生成的。通过训练辨别器使辨别器可以准确的分辨数据的真伪,通过训练生成器使辨别器无法分辨真伪。详见 Generative Adversarial Networks 。 训练时先更新辨别器,然后在更新生成器: PyTorch梯度传递 在PyTorch中,传入网络计算的数据类型必须是 Variable 类型, Variable 包装了一个 Tensor ,并且保存着梯度和创建这个 Variable function的引用,换句话说,就是记录网络每层的梯度和网络图,可以实现梯度的反向传递,网络图可以表示如下(图来自 Deep Learning with PyTorch: A 60