梯度

人工智能数学基础――最优化方法

匿名 (未验证) 提交于 2019-12-03 00:30:01
最优化理论(optimization)研究的问题是判定给定目标函数的最大值(最小值)是否存在,并找到令目标函数取到最大值(最小值)的数值 。 目标函数(objective function)或评价函数 ,大多数最优化问题都可以通过使目标函数 f ( x ) f ( x ) 最小化解决,最大化问题则可以通过最小化 f ( x ) f ( x ) 实现。 全局最小值(global minimum) ,也可能找到 局部极小值(local minimum) ,两者的区别在于全局最小值比定义域内所有其他点的函数值都小;而局部极小值只是比所有邻近点的函数值都小。 无约束优化(unconstrained optimization)和约束优化(constrained optimization) 两类。无约束优化对自变量 x x 的取值没有限制,约束优化则把 x x 的取值限制在特定的集合内,也就是满足一定的约束条件。 线性规划(linear programming) 就是一类典型的约束优化,其解决的问题通常是在有限的成本约束下取得最大的收益。约束优化问题通常比无约束优化问题更加复杂,但通过拉格朗日乘子(Lagrange multiplier)的引入可以将含有 n n 个变量和 k k 个约束条件的问题转化为含有 ( n + k ) ( n + k ) 个变量的无约束优化问题

理解梯度下降法

匿名 (未验证) 提交于 2019-12-03 00:30:01
导言 最优化问题在机器学习中有非常重要的地位,很多机器学习算法最后都归结为求解最优化问题。在各种最优化算法中,梯度下降法是最简单、最常见的一种,在深度学习的训练中被广为使用。在本文中, SIGAI 将为大家系统的讲述梯度下降法的原理和实现细节问题。 最优化问题是求解函数极值的问题,包括极大值和极小值。相信所有的读者对这个问题都不陌生,在初中时我们就学会了求解二次函数的极值(抛物线的顶点),高中时学习了幂函数,指数函数,对数函数,三角函数,反三角函数等各种类型的函数,求函数极值的题更是频频出现。这些方法都采用了各种各样的技巧,没有一个统一的方案。 真正的飞跃发生在大学时,微积分为我们求函数的极值提供了一个统一的思路:找函数的导数等于0的点,因为在极值点处,导数必定为0。这样,只要函数的可导的,我们就可以用这个万能的方法解决问题,幸运的是,在实际应用中我们遇到的函数基本上都是可导的。 在机器学习之类的实际应用中,我们一般将最优化问题统一表述为求解函数的极小值问题,即: 其中x称为优化变量,f称为目标函数。极大值问题可以转换成极小值问题来求解,只需要将目标函数加上负号即可: 有些时候会对优化变量x有约束,包括等式约束和不等式约束,它们定义了优化变量的可行域,即满足约束条件的点构成的集合。在这里我们先不考虑带约束条件的问题。 一个优化问题的全局极小值是指对于可行域里所有的x,有:

感知机

匿名 (未验证) 提交于 2019-12-03 00:29:01
感知机是一个二类分类的线性分类模型。所谓二类分类就是它只能将实例分为正类和负类两个类别。那么为什么是线性分类模型呢,我的理解是感知机学习旨在 求出可以将数据进行划分的分离超平面 ,而分离超平面的方程: 为线性方程,所以感知机为线性分类模型。 模型如下图所示: sign(x)={+1,x≥0 由此我们可以得到由输入空间到输出空间的函数 感知机学习的目的就在于确定参数w和b的值。 给定一个线性可分的数据集: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x N , y N ) } T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x N , y N ) } 为了确定感知机模型的参数w和b,需要确定一个学习策略,即 定义一个损失函数并将损失函数极小化 。感知机采用的损失函数为 误分类点到超平面的总距离 。首先写出输入空间Rn中任一点 x 0 x 0 到分离超平面的距离: 1 ‖ w ‖ | w x 0 + b | 1 ‖ w ‖ | w x 0 + b | 这里 ‖ w ‖ ‖ w ‖ 是 w w 的 L 2 L 2 范数。 其次对于误分类的数据 ( x i , y i ) ( x i , y i ) 来说, y i ( w x i + b ) > 0 y i ( w x i + b ) > 0

TensorFlow三种常用的优化器

匿名 (未验证) 提交于 2019-12-03 00:22:01
简介 目前TensorFlow支持11种不同的经典优化器(参考 TensorFlow API tf.train文档 ) tf.train.Optimizer tf.train.GradientDescentOptimizer tf.train.AdadeltaOptimizer tf.train.AdagtadOptimizer tf.train.AdagradDAOptimizer tf.train.MomentumOptimizer tf.train.AdamOptimizer tf.train.FtrlOptimizer tf.train.ProximalGradientDescentOptimizer tf.train.ProximalAdagradOptimizer tf.train.RMSProOptimizer 介绍三种常用优化器 tf.train.GradientDescentOptimizer 、 tf.train.MomentumOptimizer、 tf.train.AdamOptimizer 1. tf.train.GradientDescentOptimizer 这个优化器主要实现的是 梯度下降算法 __init__( learning_rate, use_locking=False, name='GradientDescent' ) learning

机器学习基础-5.PCA和梯度上升

匿名 (未验证) 提交于 2019-12-03 00:22:01
一、PCA 1.PCA概念 PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,主要用于数据的降维,通过降维可以发现更便于人理解的特征,此外还可以应用于可视化和去噪。 例如对于有2个特征的样本,现在对样本进行降维处理。首先考虑选择特征1或者特征2,经过降维后的样本如图所示。 这个时候可以发现相对于选择特征2,选择特征1进行映射后,样本的可区分度更高。除了向某个特征做映射,还可以选择某个轴进行映射,例如下图所示的轴,样本经过映射后,可以有更大的间距。所以现在的问题就是如何找一个轴,使样本的有最大的间距。 2.求解思路 事实上,可以使用方差来定义样本之间的间距。方差越大表示样本分布越稀疏,方差越小表示样本分布越密集。 在求解方差前,可以先对样本减去每个特征的均值,这种处理方式不会改变样本的相对分布,并且求方差的公式可以转换成图示的公式。在这里,xi代表已经经过映射后的样本,此时xi每个维度上的均值都是0。 现在求一个轴的方向w=(w1,w2),使得映射到w之后方差最大。 因此求解的公式可以转换成如下形式。 因此求解的目标转换成。这就转换成了求目标函数的最优化问题,可以通过梯度上升法进行求解。 二、梯度上升法求解 1.公式求解 最终公式可以化简为如下形式。 2.代码实现 import numpy as np import

机器学习实战----梯度下降

匿名 (未验证) 提交于 2019-12-03 00:21:02
当f'(x)=0时,导数无法提供往哪个方向移动的信息。f'(x)=0的点称为临界点或驻点。一个局部极小值意味着这个点在f(x)小于所有邻近点,因此不可能通过移动无穷小的步长来减小f(x)。一个局部极大点意味着这个点的f(x)大于所有邻近点,一次不可能通过移动无穷小的步长增大f(x)。有些临界点(斜率为0的点)既不是最小点也不是最大点,这些点称为鞍点。 x u T x f(x)。为了最小化f,找到使f下降最快的方向,计算方向导数: min u T x f(x)=min|| x x x f(x)),并选择其中能产生最小目标函数值的ε。这种策略为线搜索。 总结: 文章来源: 机器学习实战----梯度下降

Keras框架中的epoch、bacth、batch size、iteration

匿名 (未验证) 提交于 2019-12-03 00:21:02
1、epoch Keras官方文档 中给出的解释是:“ 简单说,epochs指的就是训练过程 接 中数据将被“轮”多少次” (1)释义: 训练过程中当一个完整的数据集通过了神经万罗一次并且返回了一次,这个过程称为一个epoch,网络会在每个epoch结束时报告关于模型学些进度的调试信息。 (2)为什么要训练多个epoch,即数据要被“轮”多次 在神经网络中传递完整的数据集一次是不够的,对于有限的数据集 (是在批梯度下降情况下) ,使用一个迭代过程,更新权重一次或者说使用一个epoch是不够的,需要将完整的数据集在同样的神经网络中传递多次,随着epoch次数增加,神经网络中的权重的更新次数也增加,模型从欠拟合变得过拟合。 2、batch (1) keras官方文档 中给出的解释: 深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式: 第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这种称为Batch gradient descent,批梯度下降 另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent.这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去

卷积神经网络 + 机器视觉:L7_进阶梯度下降_正则化_迁移学习 (斯坦福课堂)

匿名 (未验证) 提交于 2019-12-03 00:19:01
完整的视频课堂链接如下: https://www.youtube.com/watch?v=_JB0AO7QxSA&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&index=7 完整的视频课堂投影片连接: http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture7.pdf 前一课堂笔记连结: 卷积神经网络 + 机器视觉: L6_初始化_激励函数_BN_梯度下降 (斯坦福课堂) Menu this round Fancier Optimization Regularization Transfer Learning 如果一个神经网络模型中,我们把学习效率 learning rate 总是调的很低,理论上只要时间允许的情况下,结果也总是可以达到预期的。但是现实很骨感,在迅速变迁的时代,学得不够快的模型又怎么能够满足以效率著称的科技公司们的胃口呢?因此必须有一个更好的办法加速这个学习过程,更快的找到 Hyperparameter 才行。 虽然前面说的 Gradient Descent 理论上很完美,总是沿着梯度不断下滑,到最后就可以找到最小值,但是实际过程中越多维度越容易造成的坑坑巴巴路面总是让 GD 的路径扭来扭去,不直接快速的滑到低谷里,因此这边即将介绍一些方法来改进这个缺陷。 最简单的 GD

梯度弥散与梯度爆炸

匿名 (未验证) 提交于 2019-12-03 00:17:01
问题描述 先来看看问题描述。 当我们使用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