梯度

梯度弥散与梯度爆炸

匆匆过客 提交于 2019-12-03 10:35:59
问题描述 先来看看问题描述。 当我们使用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-12-03 06:43:42
我是一个地地道道的技术人员,今天不跟大家讲复杂的数学原理,其实从图像就可以看出来一些蛛丝马迹,X是呱呱坠地的我们,W是指引我们前进的方向,B是我们生活的压力值,Func会根据W和B显示我们的轨迹,然而轨迹的平缓程度与好多复杂的因素有关,Y是我们的终点 很明显X,Y我们没办法控制,W和B的初始值也是随机的,Func根据复杂的环境,处理很复杂决策,每个环节我们想操控简直一点可能都没有,但是我们始终不会放弃前进的脚步,因为时间也不会允许…… 来源: https://www.cnblogs.com/hsliuyl/p/11781098.html

kaldi 1d-CNN源码

僤鯓⒐⒋嵵緔 提交于 2019-12-03 04:07:08
CNN nnet/nnet-convolutional-component.h 假设CNN相关参数如下 ###输入相关参数 num_splice= 3 #语音数据的左右context,此处左右一帧 path_stride= 5 #一帧特征的维度 input_dim=path_stride *num_splice = 15 #输入特征的维度 ###滤波器相关参数 num_filters= 2 #滤波器个数 patch_dim= 2 #滤波器在一帧特征上面的维度 filter_dim=num_splice *patch_dim = 6 #滤波器在3帧特征上的维度 patch_step= 1 #patch移动的步长 ###输出相关参数 num_patch= 1 + (patch_stride - patch_dim) / patch_step= 4 #每个滤波器在特征上面做卷积的次数(即输出个数) output_dim=num_patch *num_filters = 8 #cnn的输出维度 ###多帧并行的参数 frame_num= 2 #一次计算特征的个数 PropagateFnc 首先将特征按照splice重新组织成vectorized_feature_patches,然后跟对应的filters做卷积 BackpropagateFnc 计算对输入的梯度(向后继续传播) Update

Batch Normalization

心已入冬 提交于 2019-12-03 02:36:43
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,BN本质上也是解释并从某个不同的角度来解决这个问题的(这个解释还是很妙的)。

线性回归和梯度下降

匿名 (未验证) 提交于 2019-12-03 00:41:02
在上一章我们说到,机器学习中主要的两个任务就是回归和分类。如果读者有高中数学基础,我们很容易回忆到我们高中学习过的一种回归方法―― 线性回归 。我们将这种方法泛化,就可以得到机器学习中的一种常见模型―― 线性模型 ,线性模型是 监督学习的一种 我们已经说过,我们要从数据集中训练出模型,每个数据可以视为 (属性,标签) f(x)=wTx+bf(x)=wTx+b 我们将这样的模型称为线性模型,不得不提的是,线性模型并不是只能进行线性分类,它具有很强的泛化能力,我们后面会提到。 我们注意到,在线性模型中,属性值都是 实数 属性离散,但是有序关系(可以比较) 属性离散,但是无序关系(不可比较) f(x)=wx+bf(x)=wx+b 其中w,x,b都是实数,相信这个模型大家在高中都学习过。在这里我们有两种方法求解这个模型,分别是 最小二乘法 和 梯度下降法 我们的目标是,求得适当的w和b,使得S最小,其中S是预测值和真值的差距平方和,亦称为 代价函数 其中的1n1n只是将代价函数值归一化的系数。 最小二乘法 梯度下降法 我们刚刚利用了方程的方法求得了单变量线性回归的模型。但是对于几百万,上亿的数据,这种方法太慢了,这时,我们可以使用 凸优化 中最常见的方法之一―― 梯度下降法 梯度下降法的相当于 我们下山的过程 给w、b随机赋初值,一般可以都设为0给w、b随机赋初值,一般可以都设为0 w

Gradient Descent with Momentum

匿名 (未验证) 提交于 2019-12-03 00:40:02
在Batch Gradient Descent及Mini-batch Gradient Descent, Stochastic Gradient Descent(SGD)算法中,每一步优化相对于之前的操作,都是独立的。每一次迭代开始,算法都要根据更新后的Cost Function来计算梯度,并用该梯度来做Gradient Descent。 Momentum Gradient Descent相较于前三种算法,虽然也会根据Cost Function来计算当前的梯度,但是却不直接用此梯度去做Gradient Descent。而是赋予该梯度一个权值,并综合考虑之前N次优化的梯度,得到一个加权平均的移动平均值(Weighted Moving Average),并以此来作为Gradient Descent的参数。 这里使用Exponential Moving Average(EMA)来计算该加权平均值,公式为: dW为本次计算出的梯度值,beta是衰减因子。如果将上式展开,可以得到: 根据β值的大小,可以得出大致纳入考虑范围的步数为1/(1-β),β值越大,步数约多,反之则窗口约窄。 EMA算法的优点: 1.EMA会减小算法的震荡 2.在实现上也非常有效率,比起Simple Moving Average,EMA所用的存储空间小,并且每次迭代中使用一行代码即可实现。 不过

深度学习最佳实践系列――权重w初始化

匿名 (未验证) 提交于 2019-12-03 00:36:02
摘要: 本文是深度学习最佳实践系列博客之权重初始化,主要介绍权重初始化的相关问题及方法,文中提及的权重初始化方法均可以应用于普通的神经网络、卷积神经网络和递归神经网络之中。 推荐这门课程 。 基础和符号 1.初始化权重和偏置 。 2.前向传播(forward propagation) :使用输入X,权重W和偏置b,对于每一层计算Z和A。在最后一层中,计算f(A ^(L-1)),它可能会是S形函数softmax或线性函数的A ^(L-1),并得到预测值y_hat。 3.计算损失函数(loss function) :该函数是理想标签y和预测标签y_hat二者的函数,它表明预测值离实际目标值有多大差距,训练神经网络模型的目的就是要尽量减少损失函数的值。 4.反向传播(back propagation) :在这一过程中,需要计算损失函数f(y,y_hat)相对于A、W和b的梯度,分别称为dA、dW和db。使用这些梯度值,将参数的值从最后一层反向更新到第一层。 5.对n次迭代重复步骤2-4 ,直到我们觉得已经最小化了损失函数,且没有过拟合训练数据时则表明训练结束。 前向传播 反向传播 权重W初始化 1.将所有权重初始化为0 2.随机初始化权重 a)梯度消失 ――对于深度网络,任何激活函数abs(dW)值将随着反向传播过程中每一层向后移动而变得越来越小。在这种情况下,较早的层次变化是最慢的。

深度学习剖根问底:梯度消失以及爆炸

匿名 (未验证) 提交于 2019-12-03 00:36:02
转载自:https://blog.csdn.net/qq_25737169/article/details/78847691 前言 其中,梯度消失爆炸的解决方案主要包括以下几个部分。 - 预训练加微调 - 梯度剪切、权重正则(针对梯度爆炸) - 使用不同的激活函数 - 使用batchnorm - 使用残差结构 - 使用LSTM网络 第一部分:为什么要使用梯度更新规则 我们最终的目的是希望这个多元函数可以很好的完成输入到输出之间的映射,假设不同的输入,输出的最优解是 取得极小值点,比如最简单的损失函数 第二部分:梯度消失、爆炸 梯度消失与梯度爆炸其实是一种情况,看接下来的文章就知道了。两种情况下梯度消失经常出现,一是在 深层网络 中,二是采用了 不合适的损失函数 ,比如sigmoid。梯度爆炸一般出现在深层网络和 权值初始化值太大 的情况下,下面分别从这两个角度分析梯度消失和爆炸的原因。 1.深层网络角度 图中的曲线表示权值更新的速度,对于下图两个隐层的网络来说,已经可以发现隐藏层2的权值更新速度要比隐藏层1更新的速度慢 那么对于四个隐层的网络来说,就更明显了,第四隐藏层比第一隐藏层的更新速度慢了两个数量级: 总结: 从深层网络角度来讲,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久

Opencv和C++实现canny边缘检测

匿名 (未验证) 提交于 2019-12-03 00:30:01
Canny边缘检测主要包括: 图像的灰度化; 图像的高斯滤波; 计算出每一个像素点位置的梯度(X方向梯度、Y方向梯度、已经该点的梯度幅值)和方向角度; 局部非极大值抑制处理; 双阈值处理和连接处理; Canny算法思路参考下面的博客: https://blog.csdn.net/dcrmg/article/details/52344902 https://www.cnblogs.com/love6tao/p/5152020.html 我在下面直接给出可以运行的C++代码(Opencv2.4.9) #include <iostream> #include "opencv2/opencv.hpp" using namespace std ; using namespace cv; /* 生成高斯卷积核 kernel */ void Gaussian_kernel( int kernel_size, int sigma, Mat &kernel) { const double PI = 3.1415926 ; int m = kernel_size / 2 ; kernel = Mat(kernel_size, kernel_size, CV_32FC1); float s = 2 * sigma*sigma; for ( int i = 0 ; i < kernel_size; i++

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

匿名 (未验证) 提交于 2019-12-03 00:30:01
参考文章: http://ruder.io/optimizing-gradient-descent/ tensorflow-梯度下降 (代码) 深度解读最流行的优化算法:梯度下降(精简版) 这里主要进行梯度公式推导,基本知识和内容可参考上述博客: (一)、Cost Function 线性回归是给出一系列点假设拟合直线为h(x)=theta0+theta1*x, 记Cost Function为J(theta0,theta1) 之所以说 单参数是因为只有一个变量x,即影响回归参数 θ1, θ0的是一维变量 ,或者说输入变量只有一维属性。 下图中为简化模式,只有theta1没有theta0的情况,即拟合直线为h(x)=theta1*x 左图为给定theta1时的直线和数据点 × 右图为不同theta1下的cost function J(theta1) cost function plot: 当存在两个参数theta0和theta1时,cost function是一个三维函数,这种样子的图像叫 bowl-shape function 将上图中的cost function在二维上用不同颜色的等高线映射为如下右图,可得在左图中给定一个(theta0,theta1)时又图中显示的cost function. 我们的目的是最小化cost function,即上图中最后一幅图,theta0=450