激活函数总结

激活函数总结,第1张

因为神经网络是线性组合,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中好用的激活函数具有可求且方便求导,单调平滑下面简单介绍一下常用的激活函数:

1 sigmoid函数 :常用于LR中,也可以用于神经网络最后一层(一分类问题,是该类,和其他)函数公式和图表如下图:

如图2所示,它能够把输入的连续实值变换为(0,1)之间的输出,特别的,如果是非常大的负数,那么输出就是0,如果是非常大的正数,输出就是1 sigmoid曾经是主流的激活函数,但是由于一些缺陷,导致现在不主流了它的缺点有:

1) 由于sigmoid导数的性质(如图3),在神经网络进行反向传播时,会发生梯度消失(权重初始值在[0,1]内)和梯度爆炸(权重初始值在[1,+∞])

2) 其解析式中含有幂运算,计算机求解时相对来讲比较耗时,对于规模比较大的深度网络,这会较大地增加训练时间

3) sigmoid的输出不是0均值的,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入, 产生的一个结果就是:如果数据进入神经元的时候是正的,那么计算出的梯度也会始终都是正的

2 tanh函数 :tanh函数是拉伸后的sigmoid,它弥补了sigmoid的缺点3,tanh函数公式和曲线如下:

它的值域变成了(-1,1),均值从sigmoid的05,变成了0从而解决sigmoid的缺点3输出均值不为0的问题从图4可以看出,在0附近曲线的倾斜更为陡峭,所以它的导数的曲线是比图3更高更细一些

它的优点是解决了sigmoid的输出均值不为0的问题,还有就是比sigmoid的收敛更快一些

它的缺点是还没有解决sigmoid最大的问题1,梯度消失和梯度爆炸的问题

3 ReLU函数 :ReLU函数训练速度比tanh快6倍,是目前使用最广泛的激活函数当输入值小于零时,输出值为零当输入值大于等于零时,输出值等于输入值公式和曲线如下:

它的优点是训练速度快(因为线性),同时当输入为正数时,不会造成梯度爆炸

它的缺点是ReLU所在的神经元在训练的过程中可能会随机失活,如果learning rate很大,那么很有可能网络中的40%的神经元都”dead”了而且它的输出也不是均值为0

4 LeakyReLU & PReLU函数 :这两个激活函数类似,都是ReLU的改良版,目的是为了避免出现神经单元失活的问题公式如下:

其中LeakyReLU将α的值设为0001,而PReLU是将α当做参数一起参与到模型训练中去学习这样函数的输出下界不为0,从而也不会有神经元失活的现象

5 ELU函数 (指数线性单元):它解决了ReLU的两个问题,一个是失活,一个是均值不为0的问题

6 softmax函数 :常用于神经网络的最后一层(多分类),是sigmoid函数在多分类问题上的推广公式如下:

它的值域是[0,1],输出是概率值,所以加和为1用指数的形式是为了使大的值更大,同时也为了求导

1尽量不要使用sigmoid和tanh函数(梯度消失和爆炸),尽量使用ReLU及其变体

2使用ReLU时,注意设置小的learning rate

3尽量使用0均值的激活函数

作为一个标准的程序员,应该有一些基本的数学素养,尤其现在很多人在学习人工智能相关知识,想抓住一波人工智能的机会。很多程序员可能连这样一些基础的数学问题都回答不上来。

作为一个傲娇的程序员,应该要掌握这些数学基础知识,才更有可能码出一个伟大的产品。

向量 向量(vector)是由一组实数组成的有序数组,同时具有大小和方向。一个n维向量a是由n个有序实数组成,表示为 a = [a1, a2, · · · , an]

矩阵

线性映射 矩阵通常表示一个n维线性空间v到m维线性空间w的一个映射f: v -> w

注:为了书写方便, XT ,表示向量X的转置。 这里: X(x1,x2,,xn)T,y(y1,y2,ym)T ,都是列向量。分别表示v,w两个线性空间中的两个向量。A(m,n)是一个 mn 的矩阵,描述了从v到w的一个线性映射。

转置 将矩阵行列互换。

加法 如果A和B 都为m × n的矩阵,则A和B 的加也是m × n的矩阵,其每个元素是A和B相应元素相加。 [A + B]ij = aij + bij

乘法 如A是k × m矩阵和B 是m × n矩阵,则乘积AB 是一个k × n的矩阵。

对角矩阵 对角矩阵是一个主对角线之外的元素皆为0的矩阵。对角线上的元素可以为0或其他值。一个n × n的对角矩阵A满足: [A]ij = 0 if i ̸= j ∀i, j ∈ {1, · · · , n}

特征值与特征矢量 如果一个标量λ和一个非零向量v满足 Av = λv, 则λ和v分别称为矩阵A的特征值和特征向量。

矩阵分解 一个矩阵通常可以用一些比较“简单”的矩阵来表示,称为矩阵分解。

奇异值分解 一个m×n的矩阵A的奇异值分解

其中U 和V 分别为m × m和n×n 的正交矩阵,Σ为m × n的对角矩阵,其对角 线上的元素称为奇异值(singular value)。

特征分解 一个n × n的方块矩阵A的特征分解(Eigendecomposition)定义为

其中Q为n × n的方块矩阵,其每一列都为A的特征向量,^为对角阵,其每一 个对角元素为A的特征值。 如果A为对称矩阵,则A可以被分解为

其中Q为正交阵。

导数 对于定义域和值域都是实数域的函数 f : R → R ,若f(x)在点x0 的某个邻域∆x内,极限

存在,则称函数f(x)在点x0 处可导, f'(x0) 称为其导数,或导函数。 若函数f(x)在其定义域包含的某区间内每一个点都可导,那么也可以说函数f(x)在这个区间内可导。连续函数不一定可导,可导函数一定连续。例如函数|x|为连续函数,但在点x = 0处不可导。

加法法则

y = f(x),z = g(x) 则

乘法法则

链式法则 求复合函数导数的一个法则,是在微积分中计算导数的一种常用方法。若 x ∈ R,y = g(x) ∈ R,z = f(y) ∈ R ,则

Logistic函数是一种常用的S形函数,是比利时数学家 Pierre François Verhulst在 1844-1845 年研究种群数量的增长模型时提出命名的,最初作为一种生 态学模型。 Logistic函数定义为:

当参数为 (k = 1, x0 = 0, L = 1) 时,logistic函数称为标准logistic函数,记 为 σ(x) 。

标准logistic函数在机器学习中使用得非常广泛,经常用来将一个实数空间的数映射到(0, 1)区间。标准 logistic 函数的导数为:

softmax函数是将多个标量映射为一个概率分布。对于 K 个标量 x1, · · · , xK , softmax 函数定义为

这样,我们可以将 K 个变量 x1, · · · , xK 转换为一个分布: z1, · · · , zK ,满足

当softmax 函数的输入为K 维向量x时,

其中,1K = [1, · · · , 1]K×1 是K 维的全1向量。其导数为

离散优化和连续优化 :根据输入变量x的值域是否为实数域,数学优化问题可以分为离散优化问题和连续优化问题。

无约束优化和约束优化 :在连续优化问题中,根据是否有变量的约束条件,可以将优化问题分为无约束优化问题和约束优化问题。 ### 优化算法

全局最优和局部最优

海赛矩阵

《运筹学里面有讲》,前面一篇文章计算梯度步长的时候也用到了: 梯度下降算法

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

梯度下降法

梯度下降法(Gradient Descent Method),也叫最速下降法(Steepest Descend Method),经常用来求解无约束优化的极小值问题。

梯度下降法的过程如图所示。曲线是等高线(水平集),即函数f为不同常数的集合构成的曲线。红色的箭头指向该点梯度的反方向(梯度方向与通过该点的等高线垂直)。沿着梯度下降方向,将最终到达函数f 值的局部最优解。

梯度上升法

如果我们要求解一个最大值问题,就需要向梯度正方向迭代进行搜索,逐渐接近函数的局部极大值点,这个过程则被称为梯度上升法。

概率论主要研究大量随机现象中的数量规律,其应用十分广泛,几乎遍及各个领域。

离散随机变量

如果随机变量X 所可能取的值为有限可列举的,有n个有限取值 {x1, · · · , xn}, 则称X 为离散随机变量。要了解X 的统计规律,就必须知道它取每种可能值xi 的概率,即

称为离散型随机变量X 的概率分布或分布,并且满足

常见的离散随机概率分布有:

伯努利分布

二项分布

连续随机变量

与离散随机变量不同,一些随机变量X 的取值是不可列举的,由全部实数 或者由一部分区间组成,比如

则称X 为连续随机变量。

概率密度函数

连续随机变量X 的概率分布一般用概率密度函数 p(x) 来描述。 p(x) 为可积函数,并满足:

均匀分布 若a, b为有限数,[a, b]上的均匀分布的概率密度函数定义为

正态分布 又名高斯分布,是自然界最常见的一种分布,并且具有很多良好的性质,在很多领域都有非常重要的影响力,其概率密度函数为

其中, σ > 0,µ 和 σ 均为常数。若随机变量X 服从一个参数为 µ 和 σ 的概率分布,简记为

累积分布函数

对于一个随机变量X,其累积分布函数是随机变量X 的取值小于等于x的概率。

以连续随机变量X 为例,累积分布函数定义为:

其中p(x)为概率密度函数,标准正态分布的累计分布函数:

随机向量

随机向量是指一组随机变量构成的向量。如果 X1, X2, · · · , Xn 为n个随机变量, 那么称 [X1, X2, · · · , Xn] 为一个 n 维随机向量。一维随机向量称为随机变量。随机向量也分为离散随机向量和连续随机向量。 条件概率分布 对于离散随机向量 (X, Y) ,已知X = x的条件下,随机变量 Y = y 的条件概率为:

对于二维连续随机向量(X, Y ),已知X = x的条件下,随机变量Y = y 的条件概率密度函数为

期望 对于离散变量X,其概率分布为 p(x1), · · · , p(xn) ,X 的期望(expectation)或均值定义为

对于连续随机变量X,概率密度函数为p(x),其期望定义为

方差 随机变量X 的方差(variance)用来定义它的概率分布的离散程度,定义为

标准差 随机变量 X 的方差也称为它的二阶矩。X 的根方差或标准差。

协方差 两个连续随机变量X 和Y 的协方差(covariance)用来衡量两个随机变量的分布之间的总体变化性,定义为

协方差经常也用来衡量两个随机变量之间的线性相关性。如果两个随机变量的协方差为0,那么称这两个随机变量是线性不相关。两个随机变量之间没有线性相关性,并非表示它们之间独立的,可能存在某种非线性的函数关系。反之,如果X 与Y 是统计独立的,那么它们之间的协方差一定为0。

随机过程(stochastic process)是一组随机变量Xt 的集合,其中t属于一个索引(index)集合T 。索引集合T 可以定义在时间域或者空间域,但一般为时间域,以实数或正数表示。当t为实数时,随机过程为连续随机过程;当t为整数时,为离散随机过程。日常生活中的很多例子包括股票的波动、语音信号、身高的变化等都可以看作是随机过程。常见的和时间相关的随机过程模型包括贝努力过程、随机游走、马尔可夫过程等。

马尔可夫过程 指一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态。

其中X0:t 表示变量集合X0, X1, · · · , Xt,x0:t 为在状态空间中的状态序列。

马尔可夫链 离散时间的马尔可夫过程也称为马尔可夫链(Markov chain)。如果一个马尔可夫链的条件概率

马尔可夫的使用可以看前面一篇写的有意思的文章: 女朋友的心思你能猜得到吗?——马尔可夫链告诉你 随机过程还有高斯过程,比较复杂,这里就不详细说明了。

信息论(information theory)是数学、物理、统计、计算机科学等多个学科的交叉领域。信息论是由 Claude Shannon最早提出的,主要研究信息的量化、存储和通信等方法。在机器学习相关领域,信息论也有着大量的应用。比如特征抽取、统计推断、自然语言处理等。

在信息论中,熵用来衡量一个随机事件的不确定性。假设对一个随机变量X(取值集合为C概率分布为 p(x), x ∈ C )进行编码,自信息I(x)是变量X = x时的信息量或编码长度,定义为 I(x) = − log(p(x)), 那么随机变量X 的平均编码长度,即熵定义为

其中当p(x) = 0时,我们定义0log0 = 0 熵是一个随机变量的平均编码长度,即自信息的数学期望。熵越高,则随机变量的信息越多;熵越低,则信息越少。如果变量X 当且仅当在x时 p(x) = 1 ,则熵为0。也就是说,对于一个确定的信息,其熵为0,信息量也为0。如果其概率分布为一个均匀分布,则熵最大。假设一个随机变量X 有三种可能值x1, x2, x3,不同概率分布对应的熵如下:

联合熵和条件熵 对于两个离散随机变量X 和Y ,假设X 取值集合为X;Y 取值集合为Y,其联合概率分布满足为 p(x, y) ,则X 和Y 的联合熵(Joint Entropy)为

X 和Y 的条件熵为

互信息 互信息(mutual information)是衡量已知一个变量时,另一个变量不确定性的减少程度。两个离散随机变量X 和Y 的互信息定义为

交叉熵和散度 交叉熵 对应分布为p(x)的随机变量,熵H(p)表示其最优编码长度。交叉熵是按照概率分布q 的最优编码对真实分布为p的信息进行编码的长度,定义为

在给定p的情况下,如果q 和p越接近,交叉熵越小;如果q 和p越远,交叉熵就越大。

LR算法

回头看LR算法真是异常简单啊

但是算法背后的数学原理想讲清楚也不容易

LR算法可以解决分类和回归问题

整个过程重点在于选择特征,以及特征离散化。

---特征、特征权重、预测值、预测分类

重要函数,见微知著:虽然是最简单的LR模型但是也是完整地完成整个做一个模型的流程。

1、激活函数: 

sigmoid 1/(1+e^(-x))

对应softmax:

2、损失函数:

交叉熵 loss     -[ylog(p)+(1-y)log(1-p)]

3、梯度下降:

sigmoid函数的导数是:x(1-x)

softmax的梯度求导:

4、参数更新:

softmax函数的参数更新过程:

softmax的公式:

e(wx)/(sum(e(wx))

参数更新的整体过程都为:

w=w-a求导

得求导求到参数w的部分:

即为:

w=w-a(求导结果)x

todo:

使用tensorflow完成lr模型,也是说一个最简单的lr模型,也是完成一个完整的模型~

参考资料

1、常见的损失函数(loss function)总结

https://zhuanlanzhihucom/p/58883095

2、softmax的log似然代价函数(公式求导)

https://blogcsdnnet/u014313009/article/details/51045303

原文: https://wwwtensorfloworg/extras/candidate_samplingpdf

假设有一个单分类问题。训练集中的每个样本 包含一个上下文和一个目标类。将给定上下文 时,目标类为 写作概率

我们使用函数 产生softmax logits,即对数化的概率:

其中 是一个不依赖 的函数。

在完整的softmax训练中,对于每个训练样本 ,都需要对所有的分类 计算 。如果分类集L非常大,该 *** 作将变得非常昂贵。

而在“Sampled Softmax”中,对于每个训练样本 ,我们根据一个选定的抽样函数 来选择一个小的采样分类集 ,其中的每一个分类 都以概率 独立的存在:

我们创建一个候选集 ,联合了目标分类和采样的分类集:

我们的训练任务是计算出,在给定候选集 的条件下, 中的哪一个分类是目标分类。

对于 中的每一个分类 ,我们想要计算出当给定 和 时, 的后验概率,记作 :

应用贝叶斯法则:

现在,来计算 ,我们注意到要使这发生, 可能在也可能不在 中, 一定包含 中所有的其它(除 外)元素,并且不包含任何不在 中的元素,

因此:

是一个不依赖于y的函数,所以:

这些是应该输入softmax分类器的相对logits,用于预测 中的哪一个候选类才是真正的分类。

既然我们试图训练函数 来拟合 ,我们用神经网络中的层输出表示 ,然后减去 ,将结果传入一个softmax分类器来预测哪个候选是真正的分类。

从分类输出中反向传播梯度到F,这就是我们所要的。

这是一个简单的神经网络,输出层的激活函数为SoftMax,根据定义,输出层各节点的输出值为:

其中 是该节点的输入

是上一层节点的输出值, 是权重,所以:

再来看损失函数:

是训练实例的标签值:

显然,只有一个是正确分类,所以向量里只有一个分量值为1,其余都是0:

t是正确类别的下标,所以:

例如一个三分类的任务, 正确分类是第二个,输出结果是[03,05,02],所以这里的误差为:

再比如输出为[04,015,045]:

显然,输出是[0,1,0]时误差是0,现在要根据误差来求得 的梯度:

这里求的是 关于 的梯度,所以要分两种情况讨论,第一种是当 时:

所以:

而当 时, 并不影响 ,所以:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12155266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存