sgd

机器学习算法------梯度下降法

倾然丶 夕夏残阳落幕 提交于 2019-12-03 11:55:38
优秀的讲解博客 刘建平的博客 算法简述 梯度下降通常是通过迭代的方式来搜索某个函数的极大/小值,他对目标函数每个变量求偏导得出梯度,也就是沿着梯度方向函数值会增加的最快,那么要求最小值就要沿着梯度值的反方向,梯度下降分为随机梯度下降与批量梯度下降,以及小批量梯度下降,随机梯度相比批量梯度耗时少,但精度不如批量高,批量每一步都沿着下降最快的方向下降,但是样本很多的话 耗时很多,还有就是随机梯度具有随机的特性,可能会跳出局部最优解从而到达全局最优解,而批量梯度则会一步步的走向局部最优解 模拟梯度下降法 梯度下降搜索一元二次方程最小值 通过梯度下降 求解 y = (x-2.5) ^ 2 - 1的 最小值 import numpy as np import matplotlib.pyplot as plt plot_x = np.linspace(- 1. , 6. , 141 ) # 造一个数据 plot_y = (plot_x- 2.5 ) ** 2 - 1. #plt.plot(plot_x, plot_y) #plt.show() epsilon = 1e-8 #误差 eta = 0.1 # 学习率 def J (theta) : # 要求解的函数 return (theta - 2.5 ) ** 2 - 1. def dJ (theta) : # 对函数求导之后的式子

Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络

醉酒当歌 提交于 2019-12-03 05:24:13
Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络 朱晓霞 发表于 目标检测和深度学习 订阅 457 广告 关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 立即抢购 新智元报道 来源:arXiv 编译:肖琴、克雷格 【新智元导读】 深度学习领域的大牛、多伦多大学计算机科学教授Geoffrey Hinton近年在distillation这一想法做了一些前沿工作。今天我们介绍的是Hinton作为作者之一,谷歌大脑、DeepMind等的研究人员提交的distillation的更进一步工作:通过online distillation进行大规模分布式神经网络训练。该工作提出了Codistillation的概念,通过大规模实验,发现codistillation方法提高了准确性并加快了训练速度,并且易于在实践中使用。 论文地址:https://arxiv.org/pdf/1804.03235.pdf 在提出备受瞩目的“胶囊网络”(Capsule networks)之后,深度学习领域的大牛、多伦多大学计算机科学教授Geoffrey Hinton近年在 distillation 这一想法做了一些前沿工作,包括Distill the Knowledge in a Neural Network等。今天我们介绍的是Hinton作为作者之一,谷歌大脑

学界 | 华为诺亚方舟实验室提出新型元学习法 Meta-SGD ,在回归与分类任务中表现超群

元气小坏坏 提交于 2019-12-03 05:24:06
学界 | 华为诺亚方舟实验室提出新型元学习法 Meta-SGD ,在回归与分类任务中表现超群 机器之心 发表于 机器之心 订阅 499 广告 关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 立即抢购 选自arXiv 机器之心编译 参与:Smith 从小数据中进行学习和调整的能力对于智能化来说是至关重要的,然而,我们现有的深度学习方面的成功则需要高度依赖大量标注数据。最近,华为公司诺亚方舟实验室的几名研究员提出了一种新型优化器 Meta-SGD,它非常易于训练,而且比其它元学习方法速度更快。机器之心对本文做出了概述。 原文链接:https://arxiv.org/pdf/1707.09835.pdf Few-shot 学习对于那些对每一个任务都进行从零开始的孤立学习的算法来说是很有挑战性的。与之相反,元学习(meta-learning)则可以从很多相关性任务中进行学习,一个元学习者仅利用少量的样本实例就可以更精准且快速地对一个新的任务进行学习,在这里,元学习者的相关选择则是至关重要的。在本篇文章中,我们研发了一种类似于随机梯度下降(SGD),且易于训练的元学习方法,叫做 Meta-SGD,它可以仅在单步中就对任意可微分学习者进行初始化和调整。与流行的元学习者 LSTM 相比较,Meta-SGD 在概念上很简单,易于执行,并且可以被有效地学习。与最新的元学习者

tensorflow自己实现SGD功能

匿名 (未验证) 提交于 2019-12-03 00:32:02
手动实现SGD和调用优化器结果比较 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #mnist已经作为官方的例子,做好了数据下载,分割,转浮点等一系列工作,源码在tensorflow源码中都可以找到 mnist = input_data.read_data_sets( 'MNIST_data' , one_hot=True) # 配置每个 GPU 上占用的内存的比例 # 没有GPU直接sess = tf.Session() gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction= 0.95 ) sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) #每个批次的大小 batch_size = 20 #定义训练轮数据 train_epoch = 1 #定义每n轮输出一次 test_epoch_n = 1 #计算一共有多少批次 n_batch = mnist.train.num_examples // batch_size print( "batch_size=" +str(batch_size)+ "n_batch=" +str

用命令行操作 VirtualBox 和 SGD

时光毁灭记忆、已成空白 提交于 2019-12-01 02:14:16
你可以在 这里 找到本文的原文。 作为Oracle桌面虚拟化仅存的两个解决方案,VirtualBox和SGD都提供了直观,友好的用户界面。在使用时,通过图形界面就可以完成大部分操作。 但是,在大规模部署时,不可能都在图形界面上进行。还需要通过命令行以脚本的形式进行批量处理。事实上,VirtualBox和SGD所有图形界面的操作都有对应的命令: VirtualBox提供了命令行工具:VBoxManage SGD提供了命令行工具:tarantella 本文列举了以上两个工具常用的一些命令。 利用VBoxManage管理VirtualBox 虚拟机克隆 VBoxManage clonevm mytemplate \ --basefolder /opt/vm-pools \ --name ubuntu-dp-06-01 --register 获取虚拟机IP 此命令有效的前提是虚拟机中已经安装了VirtualBox的Addon: VBoxManage guestproperty get ubuntu-dp-06-01 "/VirtualBox/GuestInfo/Net/0/IP/V4" 修改虚拟机Remote Display端口 VBoxManage modifyvm ubuntu-dp-06-01 --vrdeport 56001 开启虚拟机 使用headless方式,不弹出图形界面

SWATS算法剖析(自动切换adam与sgd)

一笑奈何 提交于 2019-11-29 10:24:44
SWATS算法剖析(自动切换adam与sgd) 战歌指挥官 搬砖、码砖、代查水表.... 27 人赞同了该文章 SWATS是ICLR在2018的高分论文,提出的一种自动由Adam切换为SGD而实现更好的泛化性能的方法。 论文名为 Improving Generalization Performance by Switching from Adam to SGD ,下载地址为: https:// arxiv.org/abs/1712.0762 8 。 作者指出,基于历史梯度平方的滑动平均值的如adam等算法并不能收敛到最优解,因此在泛化误差上可能要比SGD等方法差,因此提出了一种转换机制,试图让算法自动在经过一定轮次的adam学习后,转而由SGD去执行接下来的操作。 算法本身思想很简单,就是采用adam这种无需操心learning rate的方法,在开始阶段进行梯度下降,但是在学习到一定阶段后,由SGD接管。这里前面的部分与常规的adam实现区别不大,重要的是在切换到sgd后,这个更新的learning rate如何计算。 整个算法步骤流程如下: 熟悉adam的应该能熟悉蓝色的部分,这个就是adam的原生实现过程。 作者比较trick的地方就是14行到24行这一部分。这一部分作者做了部分推导, 作为最后的切换learning rate。 算法的整个实现逻辑并不复杂

机器学习常见优化器

六月ゝ 毕业季﹏ 提交于 2019-11-28 16:32:18
在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化器,都是什么呢,又该怎么选择呢? 在 Sebastian Ruder 的这篇论文中给出了常用优化器的比较,今天来学习一下: https://arxiv.org/pdf/1609.04747.pdf 本文将梳理: 每个算法的梯度更新规则和缺点 为了应对这个不足而提出的下一个算法 超参数的一般设定值 几种算法的效果比较 选择哪种算法 0.梯度下降法深入理解 以下为个人总结,如有错误之处,各位前辈请指出。 对于优化算法,优化的目标是网络模型中的参数θ(是一个集合,θ 1 、 θ 2 、 θ 3 ...... )目标函数为损失函数L = 1/N ∑ L i (每个样本损失函数的叠加求均值)。这个损失函数L变量就是θ,其中L中的参数是整个训练集,换句话说,目标函数(损失函数)是通过整个训练集来确定的,训练集全集不同,则损失函数的图像也不同。那么为何在mini-batch中如果遇到鞍点/局部最小值点就无法进行优化了呢?因为在这些点上,L对于θ的梯度为零,换句话说,对θ每个分量求偏导数,带入训练集全集,导数为零。对于SGD/MBGD而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性

机器学习优化器总结

一笑奈何 提交于 2019-11-28 16:32:05
一、梯度下降法 1、标准梯度下降法(GD) 公式: W t + 1 = W t − η t Δ J ( W t ) 其中, W t Wt表示 t t时刻的模型参数。 从表达式来看,模型参数的更新调整,与代价函数关于模型参数的梯度有关,即沿着梯度的方向不断减小模型参数,从而最小化代价函数。 基本策略可以理解为” 在有限视距内寻找最快路径下山 “,因此每走一步,参考当前位置最陡的方向(即 梯度 )进而迈出下一步。可以形象的表示为: 缺点: 训练速度慢: 每走一步都要要计算调整下一步的方向,下山的速度变慢。在应用于大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有的样本。会使得训练过程及其缓慢,需要花费很长时间才能得到收敛解。 容易陷入局部最优解: 由于是在有限视距内寻找下山的反向。当陷入平坦的洼地,会误以为到达了山地的最低点,从而不会继续往下走。所谓的局部最优解就是鞍点。落入鞍点,梯度为0,使得模型参数不在继续更新。 2、批量梯度下降法(BGD) 假设批量训练样本总数为nn,每次输入和输出的样本分别为X (i) ,Y (i) ,模型参数为W,代价函数为J(W),每输入一个样本i代价函数关于W的梯度为ΔJi(Wt,X (i) ,Y (i)) ,学习率为ηt,则使用批量梯度下降法更新参数表达式为: W t + 1 = W t − η t ∑ i = 1 n Δ J i (

机器学习(十四):深度学习梯度优化算法(SGD \\ SGD-M \\ NAG \\ AdaGrad \\ RMSProp \\ Adam )

耗尽温柔 提交于 2019-11-28 05:08:56
1.随机梯度下降算法(Stochastic Gradient Descent, SGD) 2.使用动量的随机梯度下降算法(Stochastic Gradient Descent - Momentum, SGD-M) 3.使用Nesterov动量的随机梯度下降算法(Nesterov Accelerated Gradient, NAG) 4.AdaGrad算法 5.RMSProp算法 6.Adam算法 ———————————————— 来源: https://www.cnblogs.com/pengfeiz/p/11393125.html

Adam和学习率衰减(learning rate decay)

∥☆過路亽.° 提交于 2019-11-27 22:35:21
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_31866177/article/details/88601294 从SGD(SGD指mini-batch gradient descent)和Adam两个方面说起。 更详细的可以看: 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam) (醍醐灌顶!) SGD SGD就是每一次迭代计算mini-batch的梯度,然后对参数进行更新,是最常见的优化方法了。即: 其中, 是学习率, 是梯度 SGD完全依赖于当前batch的梯度,所以 可理解为允许当前batch的梯度多大程度影响参数更新。 缺点 :(正因为有这些缺点才让这么多大神发展出了后续的各种算法) 选择合适的learning rate比较困难 - 对所有的参数更新使用同样的learning rate。对于稀疏数据或者特征,有时我们可能想更新快一些对于不经常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能满足要求了 SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点【原来写的是“容易困于鞍点”,经查阅论文发现,其实在合适的初始化和step size的情况下,鞍点的影响并没这么大。感谢@