sigmoid

zz1998_Efficient Backprop笔记

谁都会走 提交于 2019-11-28 14:14:34
1998_Efficient Backprop笔记 A few practical tricks 1. Stochastic vs Batch learning 在最小值附近震荡的幅度与学习速率成比例,为了减小震荡,可以减小学习速率或者使用自适应的batch size。 有理论证明以下这种形式的学习速率最好: 其中t是类别数,c是一个常量,实际上,这个速率可能太快。 另一种消除噪声的方法是用mini-batch,就是开始用一个小的batch size,然后随着训练进行增加。但是如何增加和调整学习速率一样困难。 2. Shuffling the examples 网络从未知样本学习最快,因此要在每一次迭代选择最不熟悉的样本。这个方法只适用于SGD,最简单的方式是选择连续的不同类的样本。 3. Normalizing the inputs 4. The Sigmoid 用对称的sigmoid函数有一个潜在的问题,那就是误差平面会变得很平坦,因此应该避免用很小的值初始化weights。 5. Choosing Target Values 6. Initializing the weights 7. Choosing Learning Rates 一般情况下权重向量震荡时减小学习速率,而始终保持稳定的方向则增加,但是不适用于SGD和online learning,因为他们始终在震荡。

机器学习之logist回归

泪湿孤枕 提交于 2019-11-28 13:42:29
必要的数学概念 1、离散型随机变量及分布规律 1.1:0-1分布(两点分布)(伯努利分布) :当 时,其分布函数为 ,期望为E=1*p+0*(1-p)=p,方差:D=p(1-p) 1.2:二项分布(n重伯努利分布) :分布函数: ,期望 E=np,方差:D = np(1-p) 1.3:泊松分布 : 分布函数 ,期望E= λ,方差D= λ 2、最大似然估计(Likelihood) :通过参数选择使已知数据最大概率出现 在条件概率中 P(X| θ ) 表示在 θ条件下,X出现的概率,与之对应的就是似然函数: L( θ|X )已知数据X 在参数 θ 的作用下的概率,数值上等于P(X| θ )。 几种常见的线性回归 ①线性回归; f(Xi)=WXi+b,其中Xi为特征,W与b是需要确定的参数,模型训练就是获得最佳的W与b 线性回归中的 损失函数 :用来衡量W与b是否最佳,使用均方误差。 均方误差J(θ)=∑[f(Xi)-y]^2 。目标是使得误差最小,利用偏导来求,偏导为0则为最优解,求最小误差的这个过程称为最小二乘。 利用偏导求得最优解为: 最小二乘: 估计值与实际值之差的平方和最小。凸显优化的特点。 ② 多元线性回归 ,W是一个向量, ,同样也可通过最小二乘求得最优解为 所以最终获得的多元线性模型为 ③对数线性回归 : ④logistic回归(对数几率回归) , 基于sigmoid函数

Keras神经网络的学习与使用(2)

爱⌒轻易说出口 提交于 2019-11-28 10:35:54
Keras中函数与优化器的学习 激活函数 Sigmoid函数 防止梯度弥散现象的发生 Softmax激活函数 ReLU函数 Keras激活函数的使用 优化器 SGD优化器 学习率 Adadelta优化器 损失函数 均方误差 交叉熵损失函数 激活函数 机器学习模型的学习过程就是一个不断地通过数据集来修正自身数学模型中参数的过程。 引入激活函数可以增加神经网络模型的 非线性 ,以便增强对样本非线性关系的拟合能力。如果没有激活函数,那么神经网络的每一层都只相当于矩阵相乘,即便叠加了若干层,也只相当于将这些矩阵连续相乘而已。 激活函数有很多,例如ReLU、Sigmoid、tanh、elu等。 Sigmoid函数 Sigmoid激活函数是一个非线性函数,它的定义域可以是全体实数,而值域却是(0, 1)。也就是说,使用Sigmoid函数通常用在回归预测和二分类(即按照是否大于0.5进行分类)模型的输出层中。 Sigmoid函数的公式如下: S ( x ) = 1 1 + e − x S(x) = \frac{1}{1+e^{-x}} S ( x ) = 1 + e − x 1 ​ 该函数在python下画图 import numpy as np from math import * import matplotlib . pyplot as plt x = np . arange ( - 10

MathNet Raise Scalar by a Matrix

雨燕双飞 提交于 2019-11-28 09:48:39
问题 I'm attempting to implement Logistic regression in .net using MathNumerics Linear Algebra libraries. I need to implement the following equation and am unsure of how to accomplish raising e by a matrix. 1.0 ./ (1.0 + E .^ (-1 .* Z)) where Z is a matrix and E is the mathematical constant e. So the problematic section of code is E .^ Z 回答1: let sigmoid (z : Matrix<double>) : Matrix<double> = z.Map (fun x -> 1.0 / (1.0 + exp (0.0 - x))) 来源: https://stackoverflow.com/questions/37593876/mathnet

深度学习优化性能(转载)

醉酒当歌 提交于 2019-11-28 07:29:37
转载自 https://blog.csdn.net/qq_16234613/article/details/79596609 注意 1、调参看验证集。trainset loss通常能够一直降低,但validation set loss在经过一段降低期后会开始逐渐上升,此时模型开始在训练集上过拟合。 2、着重关注val loss变化,val acc可能会突变,但loss衡量的整体目标,但是你的测试集是验证集的话还是看评判标准为佳。 3、优先调参学习率。 4、通过对模型预测结果,可以判断模型的学习程度,如果softmax输出在0或1边缘说明还不错,如果在0.5边缘说明模型有待提高。 5、调参只是为了寻找合适的参数。一般在小数据集上合适的参数,在大数据集上效果也不会太差。因此可以尝试采样部分数据集,以提高速度,在有限的时间内可以尝试更多参数。 6、使用深度框架编程时,尽量使用框架提供的API,如tensor index索引,不要用for循环啥的。速度不是一个级别的。 学习率(重要) 画图分析是种不错调参学习率的方式:学习率过大,loss曲线可能会上升,或者不能一直下降,出现震荡情况,由于学习率较大,导致参数在最优点附近徘徊,loss大小一下大一下小,就是却无法到达最优点,容易拟合在局部最小值。学习率太小loss曲线可能下降速度过于缓慢。好的学习率loss呈平滑的下降曲线。  

深度学习之长短期记忆网络LSTM理解

五迷三道 提交于 2019-11-28 05:55:15
转自博客 http://colah.github.io/posts/2015-08-Understanding-LSTMs/ ,大致翻译了一下,大神讲的很好。 RNN Networks 人类不会每时每刻都开始思考。当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。你不会扔掉所有东西,然后再从头开始思考。你的思想有持久性。 传统的神经网络无法做到这一点,这似乎是一个主要的缺点。例如, 目前还不清楚传统的神经网络如何利用其对电影中先前事件的推理来为后来的事件提供信息。 循环神经网络解决了这个问题。它们是带有循环的网络,允许信息持续存在。 递归神经网络具有循环。 在上图中,一块神经网络A,接受一些输入 并输出值 。循环允许信息从网络的一个步骤传递到下一个步骤。 这些循环使得循环神经网络看起来有点神秘。但是,如果你多想一点,事实证明它们与普通的神经网络并没有什么不同。可以将循环神经网络视为同一网络的多个副本,每个副本都将消息传递给后继者。考虑如果我们展开循环会发生什么: 展开的递归神经网络。 这种类似链的性质表明,递归神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然架构。 他们肯定会被使用!在过去几年中,将RNN应用于各种问题取得了令人难以置信的成功:语音识别,语言建模,翻译,图像字幕......这个列表还在继续。我将讨论使用RNNs可以实现的惊人壮举

logistic regression tensorflow实现

怎甘沉沦 提交于 2019-11-28 05:25:48
logistic regression 逻辑回归,属于线性的分类问题,即在给的数据集中,需要找到一条直线将数据集分成两种类别。直线可以表示为 y = W X y = WX y = W X ,其中, W 和 X W和X W 和 X 都是向量,那么如何将线段映射到列别上呢,假设有一个函数,输入可以任意数据,但是输出只有两种结果,是不是就满足了需求。这种函数一般为分段函数,但是分段函数计算不方便,有一种函数可以近似的看成分段函数。即sigmoid函数 f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f ( x ) = 1 + e − x 1 ​ 。关于sigmoid函数的图像,可以前往我的另一篇文章查看: https://blog.csdn.net/xzccfzy/article/details/99432448 假设现在有一条数据 X i X^{i} X i ,那么如果判断他的类别呢。根据上述的直线函数以及分类函数(sigmoid),我们可以得到数据 X i X^{i} X i 的两种类别的概率: P ( y = 1 ∣ W , X i ) = 1 1 + e − ( W X i ) P(y=1|W,X^{i}) = \frac{1}{1+ e^{-(WX^{i})}} P ( y = 1 ∣ W , X i ) = 1 + e −

sigmoid与softmax 二分类、多分类的使用

ぃ、小莉子 提交于 2019-11-27 22:03:26
二分类下,sigmoid、softmax两者的数学公式是等价的,理论上应该是一样的,但实际使用的时候还是sigmoid好 https://www.zhihu.com/question/295247085 为什么好?其实现在我得到一个确切的答案! 多个sigmoid与一个softmax都可以进行多分类 如果多个类别之间是互斥的,就应该使用softmax,即这个东西只可能是几个类别中的一种。 如果多个类别之间不是互斥的,使用多个sigmoid。比如4个类别人声音乐、舞曲、影视原声、流行歌曲,一首歌曲可以来自影视原声,同时也包含人声。 https://max.book118.com/html/2017/0428/102950525.shtm 为什么softmax使用在类别互斥,多个sigmoid使用在不是互斥? 因为softmax中,所有类别之和是1,如果你一个类别高了,另一个类别的概率肯定下降。但多个sigmoid,可以同时输出多个0.9的概率,多个sigmoid之间不影响。比如一首歌曲,第一个类别是判断是否是影视歌曲,可以是0.9,判断的人声的类别也可以是0.9。但如果是softmax,影视歌曲类别是0.9了,人声就最多只能是0.1了。 来源: https://www.cnblogs.com/ymjyqsx/p/11379726.html

sigmoid函数

风流意气都作罢 提交于 2019-11-27 19:42:08
Sigmoid函数(也叫逻辑斯谛函数)由下列公式定义: 其对x的导数可以用自身表示: 相关代码: def nonlin(x, deriv=False): if(deriv): return x*(1-x) return 1/(1+np.exp(-x)) Sigmoid函数的图形如S曲线: 1.在神经网络中sigmoid通常被用作激活函数,它可以用来处理二分类问题。那么什么是激活函数呢? 我们知道在多层的神经网络中,上一层的信号(也就是wx+b算出的结果y)要作为下一层的输入,但是这个上一层的信号在输入到下一层之前需要一次激活f = sigmoid(y),因为 并不是所有的上一层信号都可以激活下一层,如果所有的上一层信号都可以激活下一层,那么这一层相当于什么都没有做。因此我需要选择一些信号激活下一层的神经元。如何表 示激活呢?就是当activation function的输出结果是0就代表抑制,是1就代表激活。因为按照下一层的神经元的计算wf+b来看,如果f接近于0,那么就会阻止x对应的权重起 作用,如果接近1,这个权重的作用会最大,在这个就是激活的含义。 2.可以很容易的抑制误差,尤其是相差比较大的误差。 在x=5的点和x=10的点原本相差很远(10-5=5)的点,在激活之后,也就是x=5和x=10对应的y坐标的值,相差的不大。比如说有一个噪声误差,在x=1000处,其他的点都分布

梯度弥散与梯度爆炸

北战南征 提交于 2019-11-27 18:56:39
问题描述 先来看看问题描述。 当我们使用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