sigmoid

如何选取激活函数

匿名 (未验证) 提交于 2019-12-03 00:30:01
不是所有信息都是有用的,一些只是噪音。激活函数可以帮助神经网络做这种隔离。它激活有用的信息,并抑制无关的数据点。 激活函数有哪些: 1. Sigmoid函数 适用于: 当我们尝试将值分类到特定的类时,使用Sigmoid函数非常理想。 2. tanh函数 解决了sigmoid的大多数缺点,仍然有两边学习率太低的缺点 3. ReLU函数 优点:不会同时激活所有的神经元, 这意味着,在一段时间内,只有少量的神经元被激活,神经网络的这种稀疏性使其变得高效且易于计算。 缺点: x<0时,梯度是零。随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。也就是说,ReLU神经元在训练中不可逆地死亡了。 4. Leaky ReLU函数 解决了RELU死神经元的问题 5. Softmax函数 优点:可以处理多分类问题。 softmax函数最好在分类器的输出层使用。 更多激活函数,参见参考文献4...... 如何选择正确的激活函数? 根据问题的性质,我们可以为神经网络更快更方便地收敛作出更好的选择。 用于分类器时,Sigmoid函数及其组合通常效果更好。 由于梯度消失问题,有时要避免使用sigmoid和tanh函数。 ReLU函数是一个通用的激活函数,目前在大多数情况下使用。 如果神经网络中出现死神经元,那么PReLU函数就是最好的选择。 请记住,ReLU函数只能在隐藏层中使用。 一点经验

人工神经网络(ANN)模型简介

匿名 (未验证) 提交于 2019-12-03 00:30:01
作为深度学习的基础,神经网络模型发挥着很重要的作用。 我们来看一下ANN的定义: 神经网络是由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所作出交互反应 。 我们知道,生物神经网络的简单单元由生物神经元组成,那么在ANN模型中,简单单元由什么组成呢? 在经典ANN模型中, 简单单元 ,即 M-P神经元模型 。我们知道感知机和Logistic回归都是线性分类模型,它们的不同点在于分类函数的选取是不一样的。 我们令 z = w T x z = w T x 。感知机的分类决策函数: f ( x ) = g ( z ) = s i g n ( z ) f ( x ) = g ( z ) = s i g n ( z ) 其中 s i g n ( ) s i g n ( ) 为阶跃函数: s i g n ( z ) = 1 i f z ≥ 0 e l s e 1 s i g n ( z ) = 1 i f z ≥ 0 e l s e 1 Logistic回归的分类决策函数则是Sigmoid函数: f ( x ) = g ( z ) = 1 1 + e z f ( x ) = g ( z ) = 1 1 + e z ,它表示的是将样本分类成正例和负例的几率比。也是一个阶跃函数的替代函数。 具体地请参考我的博客 https://blog.csdn.net

梯度弥散与梯度爆炸

匿名 (未验证) 提交于 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

深度学习入门

匿名 (未验证) 提交于 2019-12-03 00:15:02
Deep Learning with Pytorch_002 chapter03_深入研究神经网络的构建块 在上一章中,我们使用Py Torch的低级操作来构建模块,如网络体系结构、损失函数和优化器。在本章中,我们将探讨解决现实世界问题所需的神经网络的一些重要组成部分,以及PyTorch如何通过提供大量的高级函数来抽象出大量的复杂性。 本章将讨论以下主题: 深入研究神经网络的各种构建块 探索PyTorch中的高级功能来构建深度学习体系结构 将深度学习应用在一个真实图像分类问题 任何深入的学习训练都需要获取数据,构建一个总体上是将一堆层聚集在一起的体系结构。 理解PyTorch为构建层、损失函数和优化器提供的更高层次的抽象。 层次――神经网络的基本块 最重要的层之一――线性层 对输入的数据应用线性变换: y = x A T + b y y = xA^T + by y = x A T + b y torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor 返回一个由均值为0、方差为1的正态分布(标准正态分布)中的随机数组成的张量。 o u t i N ( 0 , 1 ) o u t i N ( 0 , 1 ) torch.from

常见的激活函数

匿名 (未验证) 提交于 2019-12-02 23:57:01
1,Sigmoid sigmoid 函数映射之后取值范围为(0,1) tanh函数映射之后取值范围(-1,1) Relu函数映射之后取值范围(0,..)大宇等于0 Sigmoid函数的特点是会把输出限定在0~1之间,如果是非常大的负数,输出就是0,如果是非常大的正数,输出就是1,这样使得数据在传递过程中不容易发散。 Sigmod有两个主要缺点,一是Sigmoid容易过饱和,丢失梯度。从Sigmoid的示意图上可以看到,神经元的活跃度在0和1处饱和,梯度接近于0,这样在反向传播时,很容易出现梯度消失的情况,导致训练无法完整;二是Sigmoid的输出均值不是0,基于这两个缺点,SIgmoid使用越来越少了。 2. tanh tanh是Sigmoid函数的变形,tanh的均值是0,在实际应用中有比Sigmoid更好的效果。 3. ReLU ReLU是近来比较流行的激活函数,当输入信号小于0时,输出为0;当输入信号大于0时,输出等于输入。 ReLU的优点: 1. ReLU是部分线性的,并且不会出现过饱和的现象,使用ReLU得到的随机梯度下降法(SGD)的收敛速度比Sigmodi和tanh都快。 2. ReLU只需要一个阈值就可以得到激活值,不需要像Sigmoid一样需要复杂的指数运算。 ReLU的缺点: 在训练的过程中,ReLU神经元比价脆弱容易失去作用

[C1W3] Neural Networks and Deep Learning - Shallow neural networks

匿名 (未验证) 提交于 2019-12-02 23:47:01
神经网络中,我们将使用上标方括号的形式表示这些值来自于哪一层,有趣的是在约定俗成的符号传统中,在这里你所看到的这个例子,只能叫做一个两层的神经网络。原因是输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。第二个惯例是我们将输入层称为第零层,所以在技术上,这仍然是一个三层的神经网络,因为这里有输入层、隐藏层,还有输出层。但是在传统的符号使用中,如果你阅读研究论文或者在这门课中,你会看到人们将这个神经网络称为一个两层的神经网络,因为我们不将输入层看作一个标准的层。 单个样本时,向量化图示 单个样本时,运用四行代码计算出一个简单神经网络的输出(预测)。 上一节使用的是单个样本,如果把单个样本的向量横向堆叠成矩阵,就可以计算全部样本的神经网络输出(预测)。 Pros and cons of activation functions 结果表明,如果在隐藏层上使用 tanh (双曲正切)函数效果总是优于 sigmoid 函数。因为函数值域在 -1 和 +1 的激活函数,其均值是更接近 0 均值的,而不是0.5,这会使下一层学习简单一点。 在讨论优化算法时,有一点要说明:我基本已经不用 sigmoid 激活函数了,tanh 函数在所有场合都优于 sigmoid 函数。 但有一个例外:在二分类的问题中,对于输出层,想让的数值介于 0 和 1 之间,而不是在 -1 和 +1 之间

sklearn中svm详解

匿名 (未验证) 提交于 2019-12-02 23:43:01
1、SVC函数原型 SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma=‘auto’, kernel=‘rbf’, max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) 2、参数详解 C:惩罚参数。 默认值是1.0,C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但容易过拟合,高方差,泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强,但过小容易欠拟合,高偏差。 cache_size :核函数cache缓存大小,默认为200。 class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C) coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。 decision_function_shape :‘ovo’, ‘ovr’ or None, default=ovr degree :多项式poly函数的维度,默认是3

吴恩达深度学习编程作业1-1

匿名 (未验证) 提交于 2019-12-02 23:37:01
import numpy as np import matplotlib.pyplot as plt import h5py import scipy from PIL import Image from scipy import ndimage % matplotlib inline 第一部分: python 的numpy 基础练习 1.1“sigmoid ” def sigmoid(x): """ 计算x的sigmoid 参数: x 是一个值 或者一个数列,范围是无穷 返回: s -- simoid(x) """ s = 1.0/(1+1/np.exp(x)) return s 测试当x是一个值或者一个数列时候不同结果 print('x is a number of 3',sigmoid(3)) print('x is a array of [1,2,3]',sigmoid(np.array([1,2,3]))) 0utput: x is a number of 3 0.9525741268224334 x is a array of [1,2,3] [0.73105858 0.88079708 0.95257413] 1.2 编写sigmoid_derivative方法实现sigmoid 梯度计算 sigmoid 的代价函数和推导过程可以看吴恩达老师的讲解,很好很详细。

深度学习常问

匿名 (未验证) 提交于 2019-12-02 23:37:01
pooling 层的作用? *本质上,是在精简feature map数据量的同时,最大化保留空间信息和特征信息,的处理技巧;   目的是,(a)对feature map及参数进行压缩,起到降维作用;       (b)减小过拟合的作用。包括Max pooling 和average pooling;       (c)引入不变性,包括平移、旋转、尺度不变性。但CNN的invariance的能力,本质是由convolution创造的;   简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。 为什么不用卷积步长的压缩:因为pooling layer的工作原理,在压缩上比convolution更专注和易用。 为什么不用BP神经网络去做呢? (1)全连接,权值太多,需要很多样本去训练,计算困难。应对之道:减少权值的尝试,局部连接,权值共享。   卷积神经网络有两种神器可以降低参数数目。   第一种神器叫做局部感知野,一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。     第二级神器,即权值共享。   (2)边缘过渡不平滑。应对之道:采样窗口彼此重叠。 归一化的作用?

深度学习之Batch Normalization

匿名 (未验证) 提交于 2019-12-02 22:56:40
1、Batch Normalization的引入   在机器学习领域有个很重要的假设:IID独立同分布假设,也就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集上获得好的效果的一个基本保障。在深度学习网络中,后一层的输入是受前一层的影响的,而为了方便训练网络,我们一般都是采用Mini-Batch SGD来训练网络的(Mini-Batch SGD的两个优点是:梯度更新方向更准确和并行计算速度快)。   我们知道在神经网络训练开始前,都要对输入数据做一个归一化处理,那么具体为什么需要归一化呢?归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。   对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。   除了输入层的数据外(因为输入层数据