图像梯度

【深度学习】深入理解Batch Normalization批标准化

霸气de小男生 提交于 2019-11-28 15:38:33
这几天面试经常被问到BN层的原理,虽然回答上来了,但还是感觉答得不是很好,今天仔细研究了一下Batch Normalization的原理,以下为参考网上几篇文章总结得出。   Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性。虽然有些细节处理还解释不清其理论原因,但是实践证明好用才是真的好,别忘了DL从Hinton对深层网络做Pre-Train开始就是一个 经验领先于理论分析 的偏经验的一门学问。本文是对论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》的导读。   机器学习领域有个很重要的假设: IID独立同分布假设 ,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢? BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。   接下来一步一步的理解什么是BN。   为什么深度神经网络 随着网络深度加深,训练起来越困难,收敛越来越慢? 这是个在DL领域很接近本质的好问题。很多论文都是解决这个问题的,比如ReLU激活函数,再比如Residual Network

笔记 :归纳总结 (一)

孤街浪徒 提交于 2019-11-28 13:09:57
原文: http://blog.gqylpy.com/gqy/480 置顶:来自一名75后老程序员的武林秘籍——必读 (博主推荐) 来,先呈上武林秘籍链接: http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我会画原理图,会画 PCB,会模拟,会数字!玩过 PLC,玩过单片机,会用汇编,会用 C!玩过 ARM,比如 PLC,STM32,和时下正在起飞的 NXP RT1052!搞过 DSP,比如 TMS320F28335!搞过 FPGA,不管 Xilinx 还是 Altera,也不管是 Verilog 还是 VHDL,或者直接画数字电路图!我懂嵌入式系统,比如 uCOS 和 Linux!我懂开源的硬件,比如 Arduino 和树莓派!我也搞软件,学了一堆上位机的语言C#,JAVA,Python,Kotlin,Swift!会写爬虫工具,又自学写APP,不管Android 还是 IOS! 可是这一切有什么用呢?土鸡瓦狗!不值一提!干技术的永远就是最苦逼的那个人! 我相信看到这里的你,应该是个 IT

梯度下降推导及案例

三世轮回 提交于 2019-11-28 08:18:40
title: Gradient Descent tags: Gradient Descent categories: AI thumbnail: /gallary/42.jpg abbrlink: 17408 date: 2019-07-31 14:17:56 最美的等待是,我们——未来可期。 场景引入 梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。 我们同时可以假设这座山最陡峭的地方是无法通过肉眼立马观察出来的,而是需要一个复杂的工具来测量,同时,这个人此时正好拥有测量出最陡峭方向的能力。所以,此人每走一段距离,都需要一段时间来测量所在位置最陡峭的方向,这是比较耗时的。那么为了在太阳下山之前到达山底,就要尽可能的减少测量方向的次数。这是一个两难的选择,如果测量的频繁

深度学习优化性能(转载)

醉酒当歌 提交于 2019-11-28 07:29:37
转载自 https://blog.csdn.net/qq_16234613/article/details/79596609 注意 1、调参看验证集。trainset loss通常能够一直降低,但validation set loss在经过一段降低期后会开始逐渐上升,此时模型开始在训练集上过拟合。 2、着重关注val loss变化,val acc可能会突变,但loss衡量的整体目标,但是你的测试集是验证集的话还是看评判标准为佳。 3、优先调参学习率。 4、通过对模型预测结果,可以判断模型的学习程度,如果softmax输出在0或1边缘说明还不错,如果在0.5边缘说明模型有待提高。 5、调参只是为了寻找合适的参数。一般在小数据集上合适的参数,在大数据集上效果也不会太差。因此可以尝试采样部分数据集,以提高速度,在有限的时间内可以尝试更多参数。 6、使用深度框架编程时,尽量使用框架提供的API,如tensor index索引,不要用for循环啥的。速度不是一个级别的。 学习率(重要) 画图分析是种不错调参学习率的方式:学习率过大,loss曲线可能会上升,或者不能一直下降,出现震荡情况,由于学习率较大,导致参数在最优点附近徘徊,loss大小一下大一下小,就是却无法到达最优点,容易拟合在局部最小值。学习率太小loss曲线可能下降速度过于缓慢。好的学习率loss呈平滑的下降曲线。  

4.pca与梯度上升法

て烟熏妆下的殇ゞ 提交于 2019-11-28 07:10:12
(一)什么是pca pca,也就是主成分分析法(principal component analysis),主要是用来对数据集进行降维处理。举个最简单的例子,我要根据姓名、年龄、头发的长度、身高、体重、皮肤的白皙程度(随便想的)等特征来预测一个人的性别,但这些特征中有一个是最没有用的,是什么的?显然是年龄,因为年龄的大小跟这个人的性别无关。还有姓名,这个特征显然起不到决定性作用,因为有的男孩的名字起的就像女孩(比如我本人),反之亦然,但是起码绝大多数情况还是能判断的。同理还有身高,一个180CM的很大概率是男孩,当然女孩也有180cm的,比如模特。像这样我从样本的特征中,挑选出最能代表样本、或者对样本预测起到决定性作用最大的n个特征,就叫做主成分分析。为什么会有pca呢?可以想象一个,显示生活中,样本的特征很多,成百上千个也是正常的,但是我们训练不可能用全部的特征进行训练,因为肯定有很多特征是没有用的,或者说起到的作用是很小的,我们的目的就是希望找到起到决定性最大的n个特征。 主成分分析的特征 一个非监督的机器学习算法 主要用于数据的降维 通过降维,可以发现更便于人类理解的特征 其他特征:可视化,去噪等等 我们举一个只有两个特征的例子 如果我们只考虑特征1,不考虑特征2的话,那么显然,蓝色的点要从二维映射到一维 那么同理,如果我们只考虑特征2,不考虑特征1的话,那么显然会是这样

3.梯度下降法

对着背影说爱祢 提交于 2019-11-28 07:10:03
(一)什么是梯度下降法 梯度下降法 和之前介绍的k近邻算法和线性回归法不同,梯度下降法不是一个机器学习算法。它既不能解决分类问题也不能解决回归问题,那梯度下降是什么呢?以及它的作用又是什么呢? 其实,梯度下降法是一种基于搜索的最优化方法。 作用就是最小化一个损失函数,或者最大化一个效用函数,当然最大化一个效用函数就不是梯度下降了,而是梯度上升,但是本质都是一样的。 为什么会有梯度下降 我们在线性回归中,我们可以求出最小化一个函数所对应的参数的解。但是后面我们会看到,很多算法我们是没办法直接求到解的。那么基于这样的模型,我们就需要使用搜索的策略,来找到这个最优解。那么梯度下降法就是在机器学习领域,最小化损失函数的一个最常用的方法。 图解梯度下降 图中描述了损失函数J和参数θ之间的变化关系,图像上每一个点都会对应一个切线,或者说是导数。由于我们这里是一维的,所以就用导数来描述了,如果是多维的,那么就要对每一个维度上进行求导,组合起来就叫做梯度。 我们发现当蓝色的点在左边的时候,那么随着θ的减小,J对应的取值就会变大。θ增大,J对应的取值就会减少。而我们的目的,是希望找到一个合适的θ,使得J能取到最小值。首先我们要知道,梯度(这里是导数)代表方向,代表J增大的方向,所以我们要沿着梯度的反方向(所以才叫梯度下降啊,如果是梯度上升,那么这里的函数就是效用函数),才能找到一个最小值

深度学习调参策略(一)

走远了吗. 提交于 2019-11-28 05:17:24
经常会被问到你用 深度学习 训练模型时怎么样改善你的结果呢?然后每次都懵逼了,一是自己懂的不多,二是实验的不多,三是记性不行忘记了。所以写这篇博客,记录下别人以及自己的一些经验。 Ilya Sutskever(Hinton的学生)讲述了有关深度学习的见解及实用建议: 获取数据:确保要有高质量的输入/输出数据集,这个数据集要足够大、具有代表性以及拥有相对清楚的标签。缺乏数据集是很难成功的。 预处理:将数据进行集中是非常重要的,也就是要使数据均值为0,从而使每个维度的每次变动为1。有时,当输入的维度随量级排序变化时,最好使用那个维度的log(1+x)。基本上,重要的是要找到一个0值的可信编码以及自然分界的维度。这样做可使学习工作得更好。情况就是这样的,因为权值是通过公式来更新的:wij中的变化 \propto xidL/dyj(w表示从层x到层y的权值,L是损失函数)。如果x的均值很大(例如100),那么权值的更新将会非常大,并且是相互关联的,这使得学习变得低劣而缓慢。保持0均值和较小的方差是成功的关键因素。 批处理:在如今的计算机上每次只执行一个训练样本是很低效的。反之如果进行的是128个例子的批处理,效率将大幅提高,因为其输出量是非常可观的。事实上使用数量级为1的批处理效果不错,这不仅可获得性能的提升同时可降低过度拟合;不过这有可能会被大型批处理超越。但不要使用过大的批处理

cs231N_课程笔记 (转)

本秂侑毒 提交于 2019-11-28 00:03:14
本文转载自:https://zhuanlan.zhihu.com/p/21560667?refer=intelligentunit 译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Neural Nets notes 2,课程教师Andrej Karpathy授权翻译。本篇教程由杜客翻译完成,堃堃进行校对修改。译文含公式和代码,建议PC端阅读。 原文如下 内容列表: 设置数据和模型 数据预处理 权重初始化 批量归一化(Batch Normalization) 正则化(L2/L1/Maxnorm/Dropout) 损失函数 小结 设置数据和模型 在上一节中介绍了神经元的模型,它在计算内积后进行非线性激活函数计算,神经网络将这些神经元组织成各个层。这些做法共同定义了评分函数(score function)的新形式,该形式是从前面线性分类章节中的简单线性映射发展而来的。具体来说,神经网络就是进行了一系列的线性映射与非线性激活函数交织的运算。本节将讨论更多的算法设计选项,比如数据预处理,权重初始化和损失函数。 数据预处理 关于数据预处理我们有3个常用的符号,数据矩阵X,假设其尺寸是[N x D](N是数据样本的数量,D是数据的维度)。 均值减法(Mean subtraction)是预处理最常用的形式。它对数据中每个独立特征减去平均值

梯度弥散与梯度爆炸

北战南征 提交于 2019-11-27 18:56:39
问题描述 先来看看问题描述。 当我们使用sigmoid funciton 作为激活函数时,随着神经网络hidden layer层数的增加,训练误差反而加大了,如上图所示。 下面以2层隐藏层神经网络为例,进行说明。 结点中的柱状图表示每个神经元参数的更新速率(梯度)大小,有图中可以看出,layer2整体速度都要大于layer1. 我们又取每层layer中参数向量的长度来粗略的估计该层的更新速率,得到下图。 可以看出,layer2的速率都要大于layer1. 然后我们继续加深神经网络的层数。 可以得到下面的结论: 靠近输出层的hidden layer 梯度大,参数更新快,所以很快就会收敛; 而靠近输入层的hidden layer 梯度小,参数更新慢,几乎就和初始状态一样,随机分布。 在上面的四层隐藏层网络结构中,第一层比第四层慢了接近100倍!! 这种现象就是 梯度弥散(vanishing gradient problem) 。而在另一种情况中,前面layer的梯度通过训练变大,而后面layer的梯度指数级增大,这种现象又叫做 梯度爆炸(exploding gradient problem) 。 总的来说,就是在这个深度网络中, 梯度相当不稳定(unstable)。 直观说明 那么为何会出现这种情况呢? 现在我们来直观的说明一下。 在上面的升级网络中,我们随意更新一个参数,加上一个Δw

周志华:“深”为什么重要,以及还有什么深的网络

此生再无相见时 提交于 2019-11-27 14:50:26
本文约 11000 字, 建议阅读 20 分钟。 本文为你整理周志华教授的角度深度神经网络之所以获得成功的本质因素,找到神经网络之外的其它的深度模型。 8 月 10 日至 16 日,IJCAI 2019 在中国澳门隆重召开。14 日下午, 南京大学周志华 教授进行特邀大会演讲,演讲主题是 《Deep Learning: Why deep and is it only doable for neural networks?》 。在演讲中,周志华教授从自己的角度解读了深度神经网络之所以获得成功的本质因素,以及如何在兼顾这些因素的同时,找到神经网络之外的其它的深度模型。 我们把演讲全文整理如下。 一、深度学习就等于深度神经网络吗? 深度学习今天已经有各种各样的应用,到处都是它,不管图像也好,视频也好,声音自然语言处理等等。那么我们问一个问题,什么是深度学习? 我想大多数人的答案,就是深度学习差不多就等于深度神经网络。有一个非常著名的学会叫 SIAM,是国际工业与应用数学学会,他们有一个旗舰的报纸叫 SIAM news。在去年的 6 月份,这个报纸的头版上就有这么一篇文章,直接就说了这么一句话, 说深度学习是机器学习中使用深度神经网络的的子领域。 所以如果我们要谈深度学习的话,是绕不开深度神经网络的。 首先我们必须从神经网络说起。神经网络其实并不是一个新生事物