梯度

神经网络基础知识

被刻印的时光 ゝ 提交于 2020-01-04 21:22:58
神经网络出现了很多年了,它曾经沉寂,但如今他又火热起来,尤其是卷积神经网络(CNN)在图像识别领域具有广泛应用和不可替代的优势。 首先从简单的神经网络说起: M-P模型: 它是首个通过模仿神经元而形成的模型。在模型中,多个输入xi(i=1,…,n),对应一个输出y。让每个输入xi乘以对应的权重wi,然后相加求和得到y结果之和如果大于阈值h,则输出1,否则就输出0。 上述的f(x)就是激活函数,就是看输入x能不能激活f,使其输出对应的值。 上面对应的是多输入单输出,当然也有单输入单输出,但是用处相对较小。 但是这种简单的输入输出并不能解决我们遇到的问题,我们需要他自己有学习功能,自己调整参数wi。为什么要调整参数wi呢?因为常常输出的y并不是我们想要得到的准确值。为此我们需要修改参数wi,使其输出我们想要的值。因此我们想要的值(设为target),与输出的值之间就会有一个误差E,E=target-y。这就是实际输出和期望输出之间的误差。而我们可以通过误差修正学习,修改参数wi,h。 wi=wi+α(target-y)xi h=h-α(target-y)。 α是学习率,后边会讲。α越大,学习速度越快,修改参数wi的速度越快。α越小,学习速度越慢,修改参数wi的速度越慢 多层感知器 上面的例子已经具有了初步的功能,但是要是解决更加复杂的问题,还是不行。多层感知器应运而生。 如图

【机器学习】(五)神经网络

点点圈 提交于 2020-01-03 09:15:24
神经元模型 神经网络 (neural networks)定义为:神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。 神经网络中最基本的成分是 神经元 (neuron)模型,其中最典型的是“M-P神经元模型”,其由多个输入信号,神经元模型通过将输入信号在加权求和,然后与该神经元阈值比较,通过 激活函数 (activation function)处理后产生结果输出。 理想的激活函数为阶跃函数,但是为避免其不连续不光滑的性质,常用Sigmoid函数代替作为激活函数,由于其将输入值挤压到了(0,1)的输出范围,因此也称 挤压函数 (squashing function) 把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络 感知机与多层网络 感知机 (Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层,输岀层是M-P神经元,亦称阈值 逻辑单元 (threshold logic unit) 感知机能够很简单的实现逻辑与、或、非运算 通过训练集可以对感知机进行训练,训练的过程即对阈值参数、权重参数进行调整的过程,其中η称 学习率 (learning rate) 感知机只拥有单层 功能神经元 (functional neuron),只能解决 线性可分 (linearly separable

各种优化方法总结比較(sgd/momentum/Nesterov/adagrad/adadelta)

人盡茶涼 提交于 2020-01-02 02:11:36
前言 这里讨论的优化问题指的是,给定目标函数f(x),我们须要找到一组參数x。使得f(x)的值最小。 本文下面内容如果读者已经了解机器学习基本知识,和梯度下降的原理。 SGD SGD指stochastic gradient descent,即随机梯度下降。是梯度下降的batch版本号。 对于训练数据集,我们首先将其分成n个batch,每一个batch包括m个样本。我们每次更新都利用一个batch的数据。而非整个训练集。 即: x t + 1 = x t + Δ x t Δ x t = − η g t 当中。 η 为学习率, g t 为x在t时刻的梯度。 这么做的优点在于: 当训练数据太多时。利用整个数据集更新往往时间上不显示。batch的方法能够降低机器的压力,而且能够更快地收敛。 当训练集有非常多冗余时(相似的样本出现多次),batch方法收敛更快。以一个极端情况为例。若训练集前一半和后一半梯度同样。那么如果前一半作为一个batch,后一半作为还有一个batch。那么在一次遍历训练集时,batch的方法向最优解前进两个step,而总体的方法仅仅前进一个step。 Momentum SGD方法的一个缺点是,其更新方向全然依赖于当前的batch。因而其更新十分不稳定。 解决这一问题的一个简单的做法便是引入momentum。 momentum即动量,它模拟的是物体运动时的惯性

神经网络优化器

只谈情不闲聊 提交于 2020-01-02 02:02:18
首先梯度下降算法一共有三个变形:BGD, SGD , MBGD, 这三种形式的区别就是取决于我们用多少数据来计算目标函数的梯度. 1.BGD( Batch gradient descent )   BGD 采用整个训练集的数据来执行一次更新:    for i in range(nb_epochs ):     params_grad = evaluate_gradient(loss_function , data , params)     params = params - learning_rate * params_grad   缺点是:     (1).Batch gradient descent is guaranteed to converge to the global minimum for convex error surfaces and to a local minimum for non-convex surfaces(凸函数可以保证到全局最优,非凸函数可能收敛到局部最优).     (2).As we need to calculate the gradients for the whole dataset to perform just one update, batch gradient descent can be very slow and is

永兴的笔记-OpenCV-6图像梯度和边缘检测

。_饼干妹妹 提交于 2020-01-01 15:15:48
一、什么是图像梯度: 图像的梯度就是描述图像中灰度的变化,微积分就是求函数的变化率,即导数(梯度)。图像的梯度相当于2个相邻像素之间的差值。 图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导: 在x方向,选取某个像素,假设其像素值是100,沿x方向的相邻像素分别是90,90,90,则根据上面的计算其x方向梯度分别是10,0,0。这里只取变化率的绝对值,表明变化的大小即可。 灰度值100和90之间亮度相差10,并不是很明显,与一大群90的连续灰度值在一起,轮廓必然是模糊的。我们注意到,如果相邻像素灰度值有变化,那么梯度就有值,如果相邻像素灰度值没有变化,那么梯度就为0。如果我们把梯度值与对应的像素相加,那么灰度值没有变化的,像素值不变,而有梯度值的,灰度值变大了,那么图像的边缘更加明显。 二、OpenCV中的图像梯度应用(检测边缘): OpenCV提供三种类型的梯度滤波器或高通滤波器,Sobel,Scharr和Laplacian. 高通滤波器(英语:High-pass filter)是容许高频信号通过、但减弱(或减少)频率低于截止频率信号通过的滤波器。对于不同滤波器而言,每个频率的信号的减弱程度不同。它有时被称为低频剪切滤波器; 1、Sober 算子 Sober 算子是离散微分算子(discrete differentiation operator)

Pytorch中.data与.detach()的区别和作用

喜你入骨 提交于 2020-01-01 14:58:01
在Pytorch中,创建模型和数据运算传递时,经常会使用到tensor.data和tensor.detach(),对于这两种使用方式,都是对Variable中的tensor进行处理,但是都不进行梯度计算和被进行梯度跟踪,即requires_grad=False,简单来说,他们的区别如下: 相同点 两者都和原数据共享同一块数据; 都和原来数据的计算历史无关; requires_grad = False; 不同点 detach会进行提示,相比data更安全,在使用in-place操作后,会修改原数据的值,而如果在反向传播过程中使用到原数据会导致计算错误,而使用.detach就会报错。 在量化时的应用 在进行图像压缩或者其他需要对数据进行量化时,.data与.detach()的作用就很明显了,因为通常量化是不可导的,所以在整个模型的训练过程中,需要forward时量化取整,backward时梯度回传,就需要.data或者.detach()来实现了,forward时使用.data或者.detach,不进行梯度计算和梯度跟踪,软量化(为了使量化可导而使用逼近量化的可导函数)使用正常的tensor操作即可实现量化的同时,还能进行梯度回传。 例如: # y是需要量化的一个tensor y = y - alpha * F.sin(2 * np.pi * y) / (2 * np.pi) #软量化

表面应变计算(Surface strain calculation)

喜你入骨 提交于 2019-12-31 22:53:31
1. 背景介绍 应力-应变曲线能够有效地帮助我们分析材料的力学性能,应力指物体单位面积上所受到力的大小,应变指物体的相对变形量。正应变描述的是沿着某一方向上长度的变化量,而切应变描述的是角度的变化量。 根据力的大小可根据胡克定律理论上计算得到任意位置应变。对于现代的测量方式而言,主要有引伸计、应变片、光学测量等方式,光学测量因非接触、精度高的特点,在工业测量领域受到高度关注。 2 变形梯度张量 光学测量使用数字图像相关法(Digital Image Correlation, DIC)获得被测物体表面的变形情况,因此,计算的是表面应变(Surface Strain)。在连续介质力学中,描述物体运动的方式有两种,即Lagrange描述与Euler描述。前者以不同时刻下物体的位置为研究对象,而后者以固定空间内的变化为对象。本文中我们在Lagrange描述下进行分析。 上图中,参考位置 P Q ⃗ \vec{PQ} P Q ​ ,在 t t t 刻为 p q ⃗ \vec{pq} p q ​ ,P和Q的位移量分别为 u ( X ) u(\bf{X}) u ( X ) , u ( X + d X ) u({\bf{X}}+d\bf{X}) u ( X + d X ) ,该过程的运动描述为 x = χ ( X , t ) {\bf{x}}=\chi({\bf{X}},t) x = χ ( X

深度学习 —— 深度前馈网络

青春壹個敷衍的年華 提交于 2019-12-28 05:03:20
6.1 XOR例子 对于如图所示的异或问题,简单的单层线性函数 f ( x , w , b ) = x T w + b f(x,w,b)=x^Tw+b f ( x , w , b ) = x T w + b 无法解决异或问题; 解决办法是增加深度,即加入隐层单元h; h = f ( 1 ) ( x , W , c ) , y = f ( 2 ) ( h , w , b ) h=f^{(1)}(x,W,c),y=f^{(2)}(h,w,b) h = f ( 1 ) ( x , W , c ) , y = f ( 2 ) ( h , w , b ) ,完整版的模型是 f ( x , W , c , w , b ) = f ( 2 ) ( f ( 1 ) ( x ) ) f(x,W,c,w,b)=f^{(2)}(f^{(1)}(x)) f ( x , W , c , w , b ) = f ( 2 ) ( f ( 1 ) ( x ) ) 。 f ( 1 ) f^{(1)} f ( 1 ) 应该是哪种函数?线性模型到目前为止都表现不错,让 f ( 1 ) f^{(1)} f ( 1 ) 也是线性的似乎很有诱惑力。可惜的是,如果 f ( 1 ) f^{(1)} f ( 1 ) 是线性的。那么前馈网络作为一个整体对于输入仍然是线性的。暂时忽略截距项,假设 f ( 1 ) ( x ) = W T

激活函数

寵の児 提交于 2019-12-27 18:19:19
为什么要引入激活函数? 为神经网络引入非线性属性,也就是说,我们希望神经网络既能计算线形函数,也能计算非线性函数。 1.sigmoid 优点: 输出在0-1之间,单调连续,输出范围有限 容易求导: f ( x ) ′ = f ( x ) ( 1 − f ( x ) ) f{\left( x \right)^\prime } = f\left( x \right)\left( {1 - f\left( x \right)} \right) f ( x ) ′ = f ( x ) ( 1 − f ( x ) ) 缺点: 导致模型的梯度消失 误差反向传播时会有: ∂ E ∂ y ( x ) ∂ y ( x ) ∂ θ \frac{{\partial E}}{{\partial y\left( x \right)}}\frac{{\partial y\left( x \right)}}{{\partial \theta }} ∂ y ( x ) ∂ E ​ ∂ θ ∂ y ( x ) ​ ,而一次反向传播,对激活函数有: ∂ σ ( x ) ∂ θ = σ ( 1 − σ ) < 1 \frac{{\partial \sigma \left( x \right)}}{{\partial \theta }} = \sigma (1 - \sigma ) < 1 ∂ θ ∂ σ ( x ) ​

(Review cs231n) Optimized Methods

蹲街弑〆低调 提交于 2019-12-27 17:30:45
Mini-batch SGD的步骤: 1.Sample a batch of data 2.Forward prop it through the graph,get loss 3.backprop to calculate the gradient 4. updata the parameters using the gradient The initialization of weights is important. 如果 初始化过小, 经过激活后网络中权值的update就会 趋于0;如果过大,就可能出现梯度爆炸;尝试xavier initialization main loop: while True: data_batch = dataset.sample_data_batch() loss = network.forward(data_batch) loss = network.backward() x += -learning_rate * dx 不同的参数更新方案有不同的优化途径和优化速度,SGD方法是所有方法中最慢的。 The problems of SGD and why SGD is slow? 假设一个损失函数空间,损失函数的垂直方向非常陡峭,水平方向非常shallow 水平方向上的梯度非常小,垂直方向上梯度很大。 更新方式如上,补救的一种方式是 动量更新: