sigmoid

神经网络反向传播算法

喜你入骨 提交于 2019-12-06 05:22:46
反向传播算法是求代价函数小时参数θ的一种算法。 以监督学习为例,假设我们有训练样本集 ,那么神经网络算法能够提供一种复杂且非线性的假设模型 ,它具有参数 ,可以以此参数来拟合我们的数据。 为了描述神经网络,我们先从最简单的神经网络讲起,这个神经网络仅由一个“神经元”构成,以下即是这个“神经元”的图示: 这个“神经元”是一个以 及截距 为输入值的运算单元,其输出为 ,其中函数 被称为“激活函数”。在本教程中,我们选用sigmoid函数作为激活函数 可以看出,这个单一“神经元”的输入-输出映射关系其实就是一个逻辑回归(logistic regression)。 虽然本系列教程采用sigmoid函数,但你也可以选择双曲正切函数(tanh): 以下分别是sigmoid及tanh的函数图像 函数是sigmoid函数的一种变体,它的取值范围为 ,而不是sigmoid函数的 。 注意,与其它地方(包括OpenClassroom公开课以及斯坦福大学CS229课程)不同的是,这里我们不再令 。取而代之,我们用单独的参数 来表示截距。 最后要说明的是,有一个等式我们以后会经常用到:如果选择 ,也就是sigmoid函数,那么它的导数就是 (如果选择tanh函数,那它的导数就是 ,你可以根据sigmoid(或tanh)函数的定义自行推导这个等式。 神经网络模型 所谓神经网络就是将许多个单一“神经元

机器学习之激活函数

混江龙づ霸主 提交于 2019-12-05 22:40:21
本文的内容包括几个部分: 什么是激活函数? 激活函数的用途(为什么需要激活函数)? 有哪些激活函数,都有什么性质和特点? 应用中如何选择合适的激活函数? 如果你对以上几个问题不是很清楚,下面的内容对你是有价值的。 什么是激活函数? 首先要了解神经网络的基本模型。(不熟悉的同学请去看本人另外一篇介绍:人工神经网络基本原理) 单一神经元模型如下图所示。 神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。 激活函数的用途(为什么需要激活函数)? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。 有哪些激活函数,都有什么性质和特点? 早期研究神经网络主要采用sigmoid函数或者tanh函数,输出有界

Python 深入浅出支持向量机(SVM)算法

时光总嘲笑我的痴心妄想 提交于 2019-12-05 20:20:16
相比于逻辑回归,在很多情况下,SVM算法能够对数据计算从而产生更好的精度。而传统的SVM只能适用于二分类操作,不过却可以通过核技巧(核函数),使得SVM可以应用于多分类的任务中。 本篇文章只是介绍SVM的原理以及核技巧究竟是怎么一回事,最后会介绍sklearn svm各个参数作用和一个demo实战的内容,尽量通俗易懂。至于公式推导方面,网上关于这方面的文章太多了,这里就不多进行展开了~ 1.SVM简介 支持向量机,能在N维平面中,找到最明显得对数据进行分类的一个超平面!看下面这幅图: 如上图中,在二维平面中,有红和蓝两类点。要对这两类点进行分类,可以有很多种分类方法,就如同图中多条绿线,都可以把数据分成两部分。 但 SVM做的,是找到最好的那条线(二维空间),或者说那个超平面(更高维度的空间),来对数据进行分类。这个最好的标准,就是最大间距 。 至于要怎么找到这个最大间距,要找到这个最大间距,这里大概简单说一下,两个类别的数据,到超平面的距离之和,称之为 间隔 。而要做的就是找到最大的间隔。 这最终就变成了一个最大化间隔的优化问题。 2.SVM的核技巧 核技巧,主要是为了解决线性SVM无法进行多分类以及SVM在某些线性不可分的情况下无法分类的情况。 比如下面这样的数据: 这种时候就可以使用核函数,将数据转换一下,比如这里,我们手动定义了一个新的点,然后对所有的数据

Why multiply the error by the derivative of the sigmoid in neural networks?

。_饼干妹妹 提交于 2019-12-05 18:06:56
Here is the code: import numpy as np # sigmoid function def nonlin(x,deriv=False): if(deriv==True): return x*(1-x) return 1/(1+np.exp(-x)) # input dataset X = np.array([ [0,0,1], [0,1,1], [1,0,1], [1,1,1] ]) # output dataset y = np.array([[0,0,1,1]]).T # seed random numbers to make calculation # deterministic (just a good practice) np.random.seed(1) # initialize weights randomly with mean 0 syn0 = 2*np.random.random((3,1)) - 1 for iter in xrange(10000): # forward propagation l0 = X l1 = nonlin(np.dot(l0,syn0)) # how much did we miss? l1_error = y - l1 # multiply how much we missed by the #

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

江枫思渺然 提交于 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: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}

Andrew Ng机器学习 四:Neural Networks Learning

冷暖自知 提交于 2019-12-05 11:24:51
      背景:跟上一讲一样,识别手写数字,给一组数据集ex4data1.mat,,每个样例都为灰度化为20*20像素,也就是每个样例的维度为400,加载这组数据后,我们会有5000*400的矩阵X(5000个样例),5000*1的矩阵y(表示每个样例所代表的数据)。现在让你拟合出一个模型,使得这个模型能很好的预测其它手写的数字。 (注意:我们用10代表0(矩阵y也是这样),因为Octave的矩阵没有0行) 一: 神经网络 ( Neural Networks)    神经网络脚本ex4.m: %% Machine Learning Online Class - Exercise 4 Neural Network Learning % Instructions % ------------ % % This file contains code that helps you get started on the % linear exercise. You will need to complete the following functions % in this exericse: % % sigmoidGradient.m % randInitializeWeights.m % nnCostFunction.m % % For this exercise, you will

原始GAN网络Tensorflow实现MNIST图片生成(附详细注释)

折月煮酒 提交于 2019-12-05 10:43:38
原始GAN网络论文(非常经典)介绍: https://arxiv.org/pdf/1406.2661.pdf 数据集采用的是黑白图像数据集MNIST。话不多说,直接上代码: 1. 导入必要的库 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import numpy as np import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec #可视化库 import os 2. 权重初始化函数 # 权重初始化函数方法 def variable_init(size): in_dim = size[0] # 计算随机生成变量所服从的正态分布标准差 w_stddev = 1. / tf.sqrt(in_dim / 2.0) return tf.random_normal(shape=size, stddev=w_stddev) #从服从指定正太分布的数值中取出指定个数的值 3. 变量定义 # 定义输入矩阵的占位符,输入层单元为784,None批量大小的占位,X代表输入的真实图片。占位符的数值类型为32位浮点型 X = tf.placeholder(tf.float32, shape=[None,

论文笔记-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 让我们可以使用 更大的学习率

深度学习-LSTM与GRU

社会主义新天地 提交于 2019-12-05 03:55:28
http://www.sohu.com/a/259957763_610300 此篇文章绕开了数学公式,对LSTM与GRU采用图文并茂的方式进行说明,尤其是里面的动图,让人一目了然。   在RNN训练期间,信息不断地循环往复,神经网络模型权重的更新非常大。因为在更新过程中累积了错误梯度,会导致网络不稳定。极端情况下,权重的值可能变得大到溢出并导致NaN值。爆炸通过拥有大于1的值的网络层反复累积梯度导致指数增长产生,如果值小于1就会出现消失。   由于RNN 有一定的局限性它会出现梯度消失的情况不能长时间保存记忆例如: I am from China, I speak Chinese.这个句子中的China对Chinese具有一定的决定性,但是由于距离太远难以产生关联。 为解决这一问题,LSTM使用了Gate(“门”),它可以保存重要记忆 RNN LSTM LSTM的核心内容就是CT 信息流控制的关键,参数决定了h t 传递过程中,哪些被保存或舍弃。参数被Gate影响Sigmoid函数系数决定 C t 参数的变化,而Sigmoid 函数决定于--输入, 之前状态 gate 如何进行控制? https://blog.csdn.net/m0epnwstyk4/article/details/79124800 方法:用门的输出向量按元素乘以我们需要控制的那个向量 原理:门的输出是 0到1