sigmoid

深度学习之学习笔记(六)—— 激活函数

三世轮回 提交于 2020-01-28 02:17:04
激活函数 在第三章《神经元的工作原理》中,我们曾经提到过激活函数。当时使用的是最简单的阶跃函数作为激活函数。 阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数。Sigmoid函数的定义和图形如下: Sigmoid函数把可能在较大范围内变换的输入值挤压到(0,1)输出范围内,因此也称为“ 挤压函数 ”(Squashing function)。 其中 , Sigmoid函数被选为激活函数还有一个很重要的原因是它的 导数很容易计算。 求导过程如下: 先将 稍微变形,有 记 , 则 其中 根据复合函数求导法则: 若 ,则 为什么要计算激活函数的导数?这个我们在后面《误差反向传播法》一章里解释。 非线性激活函数 ( ) 可以很明显地看出,Sigmoid函数是一个非线性函数。关于线性函数和非线性函数的定义如下: 输出值是输入值的常倍数的函数称为 线性函数 ,用数学式表示为 , 为常数。因此线性函数是一条直线 非线性函数 ,就是指不像线性函数那样呈现出一条直线的函数,比如Sigmoid函数 所有的 激活函数 都是 非线性函数 让我们回顾一下神经网络训练时的具体操作:我们将输入 和它对应的权重 相乘,并将激活函数 应用于该乘积来获取该层的输出,并将激活函数的运算结果作为输入馈送到下一个层。 问题是,为什么我们一定要加上一个非线性的激活函数来处理输入信号呢?

三层神经网络的推理过程实现(前向处理)

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-27 18:52:56
# 1.三层神经网络推理过程 示意图 上图从左到右依次是输入层、隐藏层1、隐藏层2和输出层。由于有权重的只有三层,故称之为三层神经网络。 x1,x2表示整个神经网络的输入信号,y1,y2表示整个神经网络的输出信号。内含1的神经元以及bij标识是为了表示偏置,bij表示第i层偏置的第j个元素。 比较大的神经元中aij表示它的输入信号,zij表示它的输出信号。图中的直线均表示从左到右的箭头,各层权重的具体数据没有在箭头上表示出来,但它们是存在的。aij就是指向它所有箭头所表示的加权和,将aij经过激活函数转化就得到zij。 将输入信号x1,x2通过如图三层神经网络的推理处理,就可以得到该神经网络的推理结果y1,y2。 # 2.三层神经网络推理过程的实现以及解析 import numpy as np from sigmoid import sigmoid # 从sigmoid.py文件中导入sigmoid函数 from identity import identity_function # 从identity.py文件中导入identity_function函数 #三层神经网络的实现 #初始化函数 def init_network(): network={} #定义一个字典变量network network['W1']=np.array([[0.1,0.3,0.5],[0.2,0.4,0

深度学习之循环神经网络(RNN)

岁酱吖の 提交于 2020-01-26 13:39:29
文章目录 什么是循环神经网络 RNN的应用 RNN网络结构 RNN的反向求导 Vanilla-RNN Vanilla-RNN存在的问题 RNN动态图 梯度消失 梯度消失带来的影响 梯度爆炸 梯度消失带来的影响 RNN的反向传播 Bidirectional RNN(双向的RNN) Deep(Bidirectional) RNN(深度的双向RNN) LSTM(长短时记忆) LSTM关键:“细胞状态” 第一个“门”——“忘记门” 第二个“门”——“学习门”: 第三个“门”——“记忆门”: 第四个“门”——“使用门”: lstm动态图展示 LSTM可以使用别的激活函数吗? LSTM-总结 GRU GRU动图 LSTM与GRU区别 什么是循环神经网络 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) 它并⾮刚性地记忆所有固定⻓度的序列,而是通过隐藏状态来存储之前时间步的信息。 为什么有BP神经网络、CNN,还需要RNN? 因为PB,CNN网络(前馈神经网络)的输入输出都是相互独立的(只能正向或者反向传播的,单向的),但是实际应用中的有些场景的输出内容和之前的内容相关的(时序性)

Batch Normalization 批量标准化

喜欢而已 提交于 2020-01-26 10:12:10
本篇博文转自:https://www.cnblogs.com/guoyaohua/p/8724433.html  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本质上也是解释并从某个不同的角度来解决这个问题的。 一、

Ng deep learning 2_1

你说的曾经没有我的故事 提交于 2020-01-25 23:12:28
Python Basics with Numpy (optional assignment) Welcome to your first assignment. This exercise gives you a brief introduction to Python. Even if you've used Python before, this will help familiarize you with functions we'll need. Instructions: You will be using Python 3. Avoid using for-loops and while-loops, unless you are explicitly told to do so. Do not modify the (# GRADED FUNCTION [function name]) comment in some cells. Your work would not be graded if you change this. Each cell containing that comment should only contain one function. After coding your function, run the cell right below

补充(代码)-入门神经网络-Python 实现(下)

吃可爱长大的小学妹 提交于 2020-01-25 01:35:23
回顾 紧接着上篇, 整到了, MES的公式和代码的实现. \(MSE = \frac {1}{n} \sum\limits_{i=1}^n (y_i - \hat y_i)^2\) n 表示样本数, 这里为 4 y 表示要预测的变量, 这里是 性别 训练的约束, 就是使得 MSE 的值尽可能小. -> 求解参数 MSE 的工作机制, 举个栗子, 假设网络的纵输出是 0, 也就是预测所有的 小伙伴都是 妹子. 姓名 \(y_i\) (真实值) \(\hat y_i\) (预测值) \((y_i - \hat y_i)\) youge 1 0 1 share 1 0 1 naive 0 0 0 beyes 0 0 0 \(MSE = \frac {1}{4} (1 + 1 + 0 + 1) = 0.5\) BP算法本质 - 求导链式法则 现在继续... 始终要明确我们的目标: 最小化神经网络的损失 这个损失呢, 本质也就是一个关于 权重和偏置 的函数 如图 所示: 则本例的损失函数可以这样参数化表示为: \(L(w_1, w_2, w_3, w_4, w_5, w_6, b1, b_2, b_3)\) 现在来考虑对 w 进行优化, 假设要优化 \(w_1\) (即当 \(w_1\) 变化时, L 会如何变化), 也就是: \(\frac {\partial L}{\partial w

torch.nn.functional.binary_cross_entropy_with_logits

独自空忆成欢 提交于 2020-01-24 00:16:41
torch.nn.functional.binary_cross_entropy_with_logits(input, target, weight=None, size_average=None, reduce=None, reduction=‘mean’, pos_weight=None) 参数说明 input 神经网络预测结果(未经过sigmoid),任意形状的tensor target 标签值,与input形状相同 weight 权重值,可用于mask的作用, 具体作用下面讲解,形状同input size_average 弃用,见reduction参数 reduce 弃用,见reduction参数 reduction 指定对输出结果的操作,可以设定为 none mean sum ; none将不对结果进行任何处理,mean对结果求均值, sum对结果求和, 默认是mean 函数功能 对神经网络的输出结果进行sigmoid操作,然后求交叉熵,当参数reduction=mean时其实际效果和下面的程序相同; weight参数实际是对交叉熵结果的权重 x = torch . sigmoid ( pred ) # pred是神经网络的输出 result = - torch . mean ( ( label * torch . log ( x ) + ( 1 - label ) *

Pytorch常用包

偶尔善良 提交于 2020-01-23 20:14:08
torch:张量的有关运算。如创建、索引、连接、转置、加减乘除、切片等 torch.nn: 包含搭建神经网络层的模块(Modules)和一系列loss函数。如全连接、卷积、BN批处理、dropout、CrossEntryLoss、MSELoss等 torch.nn.functional:常用的激活函数relu、leaky_relu、sigmoid等 torch.autograd:提供Tensor所有操作的自动求导方法 torch.optim:各种参数优化方法,例如SGD、AdaGrad、Adam、RMSProp等 torch.utils.data:用于加载数据 torch.nn.init:可以用它更改nn.Module的默认参数初始化方式 torchvision.datasets:常用数据集。MNIST、COCO、CIFAR10、Imagenet等 torchvision.modules:常用模型。AlexNet、VGG、ResNet、DenseNet等 torchvision.transforms:图片相关处理。裁剪、尺寸缩放、归一化等 -torchvision.utils:将给定的Tensor保存成image文件 来源: CSDN 作者: 立志正常毕业的二狗子 链接: https://blog.csdn.net/qq_43270479/article/details

Pytorch框架学习(4)——autograd与逻辑回归

倾然丶 夕夏残阳落幕 提交于 2020-01-23 02:32:44
autograd与逻辑回归 文章目录 autograd与逻辑回归 1. torch.autograd自动求导系统 2. 逻辑回归 1. torch.autograd自动求导系统 torch.autograd.backward 功能:自动求取梯度 tensors:用于求导的张量,如loss retain_graph:保存计算图 create_graph:创建导数计算图,用于高阶求导 grad_tensors:多梯度权重(当有多个loss需要计算梯度时,需要设置各个loss之间的权重比例) w = torch . tensor ( [ 1 . ] , requires_grad = True ) x = torch . tensor ( [ 2 . ] , requires_grad = True ) a = torch . add ( w , x ) b = torch . add ( w , 1 ) y0 = torch . mul ( a , b ) y1 = torch . add ( a , b ) loss = torch . cat ( [ y0 , y1 ] , dim = 0 ) grad_tensors = torch . tensor ( [ 1 . , 2 . ] ) loss . backward ( gradient = grad_tensors ) #

【深度学习】为什么会存在激活函数?

孤者浪人 提交于 2020-01-18 21:56:41
来源: AINLPer 微信公众号( 点击了解一下吧 ) 编辑: ShuYini 校稿: ShuYini 时间: 2019-9-1 引言     在深度学习网络中,我们经常可以看到对于某一个隐藏层节点的激活值计算一般分为两步,如下图:     第一步,输入该节点的值为 x 1 x_1 x 1 ​ , x 2 x_2 x 2 ​ 时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值 z [ 1 ] = w 1 x 1 + w 2 x 2 + b [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]}=w_1x_1+w_2x_2+b^{[1]}=W^{[1]}x+b^{[1]} z [ 1 ] = w 1 ​ x 1 ​ + w 2 ​ x 2 ​ + b [ 1 ] = W [ 1 ] x + b [ 1 ] ,上标 1 表示第 1 层隐藏层。     第二步,再进行一个非线性变换,也就是经过非线性激活函数,计算出该节点的输出值(激活值) a ( 1 ) = g ( z ( 1 ) ) a^{(1)}=g(z^{(1)}) a ( 1 ) = g ( z ( 1 ) ) ,其中 g(z)为非线性函数。     那么问题来了,这个激活函数到底有什么用呢,可不可以不加激活函数呢? 什么是激活函数?     激活函数是神经网络中极其重要的概念