梯度

机器学习优化器总结

北战南征 提交于 2019-12-05 16:45:56
算法流程参考: https://blog.csdn.net/nickkissbaby_/article/details/81066643 解释及可视化参考: https://blog.csdn.net/weixin_40170902/article/details/80092628 下面简要总结一下: 梯度算法:包括 全局梯度下降、批量梯度下降、随机梯度下降。 训练速度逐渐上升,而效果逐渐下降,权衡考虑,一般是批量梯度下降法较好。 动量算法:包括 Momentum 算法和 Nesterov 算法。这类算法一般探索的参数空间范围大,且收敛速度快。 Momentum :使用速度v累积之前的梯度,然后再应用梯度更新。当梯度陡峭时,它可以更快地趋向极值点。当梯度改变正负时,它考虑了之前的梯度,不会摆动到极值点另一边太厉害。 它只能在梯度正负变化时悬崖勒马。 Nesterov :在 Momentum 计算梯度前, 增加一步 (先用速度更新参数),然后再计算损失函数对参数的梯度。先让参数在之前的速度上前进一步(探路),这样计算的梯度不仅考虑了前因,还考虑了“后因”(以当前速度考虑)。简单说, 它可以提前刹车 。 自适应算法:AdaGrad、RMSprop、AdaDelta、Adam。 AdaGrad :它 累积梯度的平方 ,计算梯度的时候,再除以这个累积的平方。所以梯度陡峭时,更新较慢

[转帖]CNN、RNN、DNN的一般解释

血红的双手。 提交于 2019-12-05 16:19:36
CNN、RNN、DNN的一般解释 https://www.jianshu.com/p/bab3bbddb06b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation 0.0952017.10.16 19:10:36字数 3,145阅读 4,648 CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别? 转自知乎 科言君 的回答 神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。 (扯一个不相关的:由于计算技术的落后,当时感知器传输函数是用线拉动变阻器改变电阻的方法机械实现的,脑补一下科学家们扯着密密麻麻的导线的样子…) 但是,Rosenblatt的单层感知机有一个严重得不能再严重的问题,即它对稍复杂一些的函数都无能为力(比如最为典型的“异或”操作)。连异或都不能拟合,你还能指望这货有什么实际用途么o(╯□╰)o 随着数学的发展,这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)发明的多层感知机

机器学习——激活函数理解

江枫思渺然 提交于 2019-12-05 13:54:40
激活函数 作用: 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,输出都是输入的线性组合,与没有隐藏层效果相当。 2线性的表达能力太有限了,即使经过多层网络的叠加,y=ax+b无论叠加多少层最后仍然是线性的,增加网络的深度根本没有意义。 对于y=ax+b 这样的函数,当x的输入很大时,y的输出也是无限大小的,经过多层网络叠加后,值更加膨胀的没边 引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。?:为什么非线性化后,增加网络就变得有意义?体现在哪里? 类别 TF调用 公式 图像 导数 优点 缺点 sigmoid 梯度反向传递时导致梯度爆炸和梯度消失 其中梯度爆炸发生的概率非常小 而梯度消失发生的概率比较大。 sigmoid输出永远是正数;非零中心 tanh 输出(-1,1) 没有解决“梯度消失问题” ReLU 不会有梯度消失问题 输入负数,则完全不激活,ReLU函数死掉 Leaky ReLU(LReLU) ELU Maxout softmax 1.sigmoid函数 2.tanh 3.relu 4.softmax 输出层第i个神经元的Softmax函数表达式: ,其中k为类别的个数。 二分类在输出层之后一个单元不同的是

提升方法与梯度提升决策树

时光怂恿深爱的人放手 提交于 2019-12-05 11:43:10
提升方法与前向分步算法 提升方法 从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱学习器,提升为强学习器 两个问题: 在每一轮如何改变训练数据的权值或概率分布 如何将弱学习器组合成一个强学习器 前向分步算法 AdaBoost另一种解释: 加法模型 损失函数为指数函数 学习算法为前向分步算法 二类分类学习方法 前向分步算法(Forward Stagewise Algorithm) 考虑加法模型(additive model) \[f(x)=\sum \limits_{m=1}^M \beta_m b(x;\gamma_m) \] 其中, \(b(x;\gamma_m)\) 为基函数, \(\beta_m\) 为基函数的系数, \(\gamma_m\) 为基函数参数 给定训练数据及损失函数 \(L(y, f(x))\) 条件下,学习加法模型成为经验风险极小化即损失函数极小化问题 \[\mathop{\min} \limits_{\beta,\gamma} \sum \limits_{i=1}^N L(y_i, \beta b(x_i; \gamma)) \] 前向分步算法如下: 输入:训练集,损失函数 \(L\) ,基函数集 \(\{b(x;\gamma)\}\) 输出:加法模型 \(f(x)\) 初始化 \(f_0(x)=0\) 对 \(m=1,2,\cdots,M\)

激活函数

爷,独闯天下 提交于 2019-12-05 11:35:55
常用激活函数及其导数 Sigmoid函数 形式 \[f(z)=\frac{1}{1+\exp(-z)}\] 导数 \[f^{'}(z)=f(z)(1-f(z))\] Tanh激活函数 形式 \[f(z)=tanh(z)=\frac{e^z - e^{-z}}{e^z + e^{-z}}\] 导数 \[f^{'}(z)=1-(f(z))^2\] ReLU激活函数 形式 \[f(z) = \max(0, z)\] 导数:略 GTU激活函数 形式 \[f(X) = tanh(X \cdot W+b)\cdot \sigma(X \cdot V+c)\] 结构:tanh激活单元+sigmoid激活单元 存在梯度消失问题 GLU激活函数 形式 \[f(X) = (X\cdot W+b) \cdot \sigma(X \cdot V+c)\] 结构:ReLU激活单元+sigmoid激活单元 不会存在梯度消失问题 SELU (scaled exponential linear units)激活函数 形式 \[\begin{aligned} \text{selu}(z) = \lambda \begin{cases} z \quad &\text{if} \ z > 0 \\ \alpha e^z - \alpha \quad &\text{if} \ z \le 0 \end{cases}

WGAN-GP

孤者浪人 提交于 2019-12-05 10:53:39
   最近做项目用到了GP-WGAN,所以感觉有必要了解一下,这里简要参考别人的博客自己做一个总结吧。    GAN通过训练判别器和生成器来使得生成器生成的数据分布上尽可能和真实样本的分布完全一致。但是在GAN训练的过程中常常会存在训练不稳定的现象。因此蒙特利尔大学的研究者对WGAN进行改进,提出了一种替代WGAN判别器中权重剪枝的方法,即具有梯度惩罚的WGAN,从而避免训练不稳定的情况。    在WGAN中,作者将权重剪切到一定范围内,如[-0.01,0.01],发生了这样的情况,如下图所示:    最后发现大部分的权重都在-0.01和0.01上,这说明大部分权重都只有这两个参数,无法发挥深度神经网络的泛化能力。而且这种剪切也很容易导致梯度爆炸或者梯度弥散,原因在于,剪切范围太小会导致梯度消失,损失无法有效传递,而剪切范围太大,梯度变大一点点,多层以后梯度就会爆炸。为了解决这个问题,这里引入了lipschitz连续性条件,通过梯度惩罚的方式满足连续性条件,如上图右部所示。    lipschitz连续性条件的一个表达如下所示,即我们希望y’->y时,希望 | | D ( y , θ ) − D ( y ′ , θ ) | | < = C | | y − y ′ | | | | D ( y , θ ) − D ( y ′ , θ ) | | <= C | | y − y ′ | |

[转载]--令人拍案叫绝的Wasserstein GAN

我只是一个虾纸丫 提交于 2019-12-05 10:46:05
文章转载自: https://zhuanlan.zhihu.com/p/25071913 令人拍案叫绝的Wasserstein GAN 郑华滨 · 2 天前 在GAN的相关研究如火如荼甚至可以说是泛滥的今天,一篇新鲜出炉的arXiv论文《 Wassertein GAN 》却在Reddit的Machine Learning频道火了,连Goodfellow都 在帖子里和大家热烈讨论 ,这篇论文究竟有什么了不得的地方呢? 要知道自从 2014年Ian Goodfellow提出 以来,GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多论文都在尝试解决,但是效果不尽人意,比如最有名的一个改进 DCGAN 依靠的是对判别器和生成器的架构进行实验枚举,最终找到一组比较好的网络架构设置,但是实际上是治标不治本,没有彻底解决问题。而今天的主角Wasserstein GAN(下面简称WGAN)成功地做到了以下爆炸性的几点: 彻底解决GAN训练不稳定的问题,不再需要小心平衡生成器和判别器的训练程度 基本解决了collapse mode的问题,确保了生成样本的多样性 训练过程中终于有一个像交叉熵、准确率这样的数值来指示训练的进程,这个数值越小代表GAN训练得越好,代表生成器产生的图像质量越高(如题图所示) 以上一切好处不需要精心设计的网络架构

WGAN介绍

和自甴很熟 提交于 2019-12-05 10:44:13
WGAN可谓是继原作GAN之后又一经典之作,本文将介绍一下WGAN WGAN的 前作 中对原始GAN存在的问题作了严谨的数学分析。原始GAN问题的根源可以归结为两点,一是等 价优化的距离衡量(KL散度、JS散度)不合理,二是生成器随机初始化后的生成分布很难与真实分布有不可忽略的重叠(上升到高维时)从而导致在判别器 优化的很好的时候生成器会有梯度消失的情况发生。对于生成分布与真实分布的重叠问题在WGAN前作中粗略的提及到改进的办法,那就是对生成样本和真实 样本加噪声。 原文对此处描述为:通过对生成样本和真实样本加噪声,使得原本的两个低维流形“弥散”到整个高维空间,强行让它们产生不可忽略的重叠。而一旦存在重 叠,JS散度就能真正发挥作用,此时如果两个分布越靠近,它们“弥散”出来的部分重叠得越多,JS散度也会越小而不会一直是一个常数,于是生成器梯度消 失的问题就解决了。在训练过程中,我们可以对所加的噪声进行退火(annealing),慢慢减小其方差,到后面两个低维流形“本体”都已经有重叠时,就算 把噪声完全拿掉,JS散度也能照样发挥作用,继续产生有意义的梯度把两个低维流形拉近,直到它们接近完全重合。 这样的加噪声对训练模型真的有大幅度提高吗?显然这样做是不够的,文章中解释为加噪声后JS散度的具体数值受到噪声的方差影响,随着噪声的退火,前 后的数值就没法比较了

论文笔记-Batch Normalization

别说谁变了你拦得住时间么 提交于 2019-12-05 10:08:39
论文题目:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 首先看看博客 http://blog.csdn.net/happynear/article/details/44238541 中最开始介绍的: 为什么中心化,方差归一化等,可以加快收敛? 补充一点:输入x集中在0周围,sigmoid更可能在其未饱和区域,梯度相对更大一些,收敛更快。 Abstract 1.深层网络训练时,由于模型参数在不断修改,所以各层的输入的概率分布在不断变化,这使得我们必须使用较小的学习率及较好的权重初值,导致训练很慢,同时也导致使用saturating nonlinearities 激活函数(如sigmoid,正负两边都会饱和)时训练很困难。 这种现象加 internal covariate shift ,解决办法是:对每层的输入进行归一化。 本文方法特点是 :making normalization a part of the model architecture and performing the normalization for each training mini-batch Batch Normalization 让我们可以使用 更大的学习率

深度学习之路:(一)Keras中mnist数据集测试

邮差的信 提交于 2019-12-05 08:44:11
Keras环境搭建 本地环境 MacOS 一、安装Anaconda 1、下载Anaconda最新版本: 官网下载地址 附: 清华镜像源 2、下载后直接安装,点击next 3、检测版本 打开终端 输入 conda --v , 如显示如下,则安装成功。 shiqingdeMacBook- Air :~ shiqingwang $ conda --v conda 4.4 . 9 二、安装Keras 1、打开Anaconda-Navigator 依次点击 Environments -> anaconda3 -> open Terminal # GPU 版本 pip install --upgrade tensorflow-gpu # CPU 版本 pip install --upgrade tensorflow # Keras 安装 pip install keras - U --pre 2、检测是否安装成功Keras 在已安装模块中搜索, keras ,若如下,则安装成功 三、Keras中mnist数据集测试 1、 下载Keras开发包 conda install git git clone https://github .com /fchollet/keras .git cd keras/examples/ python mnist_mlp .py 2、运行出错 出现网络连接错误