精华内容
下载资源
问答
  • 均方差损失函数+Sigmoid激活函数 Sigmoid激活函数σ(z)=11+e−z\sigma(z) = \frac{1}{1+e^{-z}}σ(z)=1+e−z1​ 对于Sigmoid,当????的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数????′(????)也...

    均方差损失函数+Sigmoid激活函数

    Sigmoid激活函数σ(z)=11+ez\sigma(z) = \frac{1}{1+e^{-z}}在这里插入图片描述

    • 对于Sigmoid,当𝑧的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数𝜎′(𝑧)也越来越小。同样的,当𝑧的取值越来越小时,也有这个问题。仅仅在𝑧取值为0附近时,导数𝜎′(𝑧)的取值较大。
    • 均方差+Sigmoid的BP反向传播算法中,每一层向前递推都要乘以𝜎′(𝑧),得到梯度变化值。Sigmoid曲线意味着在大多数时候,梯度变化值都很小,导致𝑊, 𝑏更新到极值的速度较慢。(算法收敛速度较慢)

    交叉熵损失函数+Sigmoid激活函数

    CrossEntropy损失函数J(W,b,a,y)=[ylna+(1y)ln(1a)]J(W,b,a,y) = - [y lna + (1-y) ln(1 -a)]δL=J(W,b,aL,y)zL=y1aL(aL)(1aL)+(1y)11aL(aL)(1aL)=aLy\delta^L = \frac{\partial J(W,b,a^L,y)}{\partial z^L} = -y\frac{1}{a^L}(a^L)(1-a^L) + (1-y) \frac{1}{1-a^L}(a^L)(1-a^L)= a^L-y

    • 使用交叉熵,得到的的δl\delta^l梯度表达式没有了𝜎′(𝑧),梯度为预测值和真实值的差距,这样求得的Wl,blW^l,b^l的梯度也不包含𝜎′(𝑧),因此避免了反向传播收敛速度慢的问题。

    对数似然损失函数和softmax激活函数

    Softmax激活函数ai=ezij=1nezja_i = \frac{e^{z_i}}{\sum\limits_{j=1}^{n}e^{z_j}}
    对数似然损失函数J(W,b,aL,y)=kyklnakLJ(W,b,a^L,y) = - \sum\limits_ky_klna_k^L如果某一训练样本的输出为第i类,则yiy_i= 1,其余的𝑗≠𝑖都有yjy_j= 0。J(W,b,aL,y)=lnaiLJ(W,b,a^L,y) = - lna_i^LJ(W,b,aL,y)wijL=J(W,b,aL,y)aiLaiLziLziLwijL=(aiL1)ajL1\frac{\partial J(W,b,a^L,y)}{\partial w_{ij}^L}= \frac{\partial J(W,b,a^L,y)}{\partial a_i^L}\frac{\partial a_i^L}{\partial z_i^L}\frac{\partial z_i^L}{\partial w_{ij}^L}=(a_i^L -1) a_j^{L-1}J(W,b,aL,y)biL=aiL1\frac{\partial J(W,b,a^L,y)}{\partial b_i^L} = a_i^L -1


    梯度爆炸梯度消失与ReLU激活函数

    在反向传播算法过程中,由于使用了矩阵求导的链式法则,如果连乘的数字在每层都小于1,则梯度越往前乘越小,导致梯度消失,而如果连乘的数字在每层都大于1,则梯度越往前乘越大,导致梯度爆炸。
    δl=J(W,b,x,y)zl=(zLzL1zL1zL2...zl+1zl)TJ(W,b,x,y)zL\delta^l =\frac{\partial J(W,b,x,y)}{\partial z^l} = (\frac{\partial z^L}{\partial z^{L-1}}\frac{\partial z^{L-1}}{\partial z^{L-2}}...\frac{\partial z^{l+1}}{\partial z^{l}})^T\frac{\partial J(W,b,x,y)}{\partial z^L}

    • 如果样本导致每一层zl+1zl\frac{\partial z^{l+1}}{\partial z^{l}}都小于1,则随着反向传播的进行,δl\delta^l会随着层数越来越小,甚至接近于0,导致梯度几乎消失,进而导致前面隐藏层的𝑊, 𝑏参数随着迭代的进行,几乎没有大的改变,不能收敛。这个问题目前没有完美的解决办法。
      • 一个可能部分解决梯度消失问题的办法是使用ReLU(Rectified Linear Unit)激活函数σ(z)=max(0,z)\sigma(z) = max(0,z)
    • 对于梯度爆炸,则一般可以通过调整DNN模型中的初始化参数得以解决。

    解决方案

    1. 换用Relu、LeakyRelu、Elu等激活函数
    2. BatchNormalization
    3. ResNet残差结构
    4. LSTM结构
    5. 预训练加fine_tunning
      每次训练一层隐藏层节点,将上一层隐藏层的输出作为输入,而本层的输出作为下一层的输入,这就是逐层预训练。
    6. 梯度剪切、正则
      如果更新梯度时,梯度超过了这个阈值,那么就将其强制限制在这个范围之内。这样可以防止梯度爆炸。

    DNN其他激活函数

    1. tanh:sigmoid的变种tanh(z)=ezezez+eztanh(z) = \frac{e^z-e^{-z}}{e^z+e^{-z}}在这里插入图片描述
      tanh和sigmoid对比主要的特点是:输出落在了[-1,1],这样输出可以进行标准化。同时tanh的曲线在较大时平坦的幅度没有sigmoid那么大,这样求梯度变化值有一些优势。

    小结

    1. 如果使用sigmoid激活函数,则交叉熵损失函数一般肯定比均方差损失函数好。
    2. 如果是DNN用于分类,则一般在输出层使用softmax激活函数和对数似然损失函数。
    3. ReLU激活函数对梯度消失问题有一定程度的解决,尤其是在CNN模型中。
    展开全文
  • DNN损失函数和激活函数的选择 ...    从图上可以看出,对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)也越来越小。同样的,当z的取值越来越小时,也...

    DNN损失函数和激活函数的选择

    现对DNN损失函数和激活函数的搭配与选择进行梳理:

    (1)均方差损失函数+Sigmoid激活函数

         首先回顾下Sigmoid激活函数的表达式为:

        在这里插入图片描述
        σ(z)的函数图像如下:
        在这里插入图片描述
        从图上可以看出,对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)也越来越小。同样的,当z的取值越来越小时,也有这个问题。仅仅在z取值为0附近时,导数σ′(z)的取值较大。

    • Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。那么有什么什么办法可以改进呢?
    (2)使用交叉熵损失函数+Sigmoid激活函数改进DNN算法收敛速度

        二分类时每个样本的交叉熵损失函数的形式:

        在这里插入图片描述
        这个损失函数的学名叫交叉熵。

        当使用交叉熵时,我们输出层在这里插入图片描述的梯度情况:
        在这里插入图片描述
        可见此时我们的在这里插入图片描述梯度表达式里面已经没有了σ′(z),作为一个特例,回顾一下我们上一节均方差损失函数时在在这里插入图片描述梯度,
        在这里插入图片描述

    • 对比两者在第L层的在这里插入图片描述梯度表达式,就可以看出,使用交叉熵,得到的在这里插入图片描述梯度表达式没有了σ′(z),梯度为预测值和真实值的差距,这样求得的wlw^l,blb^l的地图也不包含σ′(z),因此避免了反向传播收敛速度慢的问题。
    • 通常情况下,如果我们使用了sigmoid激活函数,交叉熵损失函数肯定比均方差损失函数好用。
    (3) 使用对数似然损失函数和softmax激活函数进行DNN分类输出

        前面都假设输出是连续可导的值。但是如果是分类问题,那么输出是一个个的类别,那我们怎么用DNN来解决这个问题呢?

        比如假设我们有一个三个类别的分类问题,这样我们的DNN输出层应该有三个神经元,假设第一个神经元对应类别一,第二个对应类别二,第三个对应类别三,这样我们期望的输出应该是(1,0,0),(0,1,0)和(0,0,1)这三种。即样本真实类别对应的神经元输出应该无限接近或者等于1,而非改样本真实输出对应的神经元的输出应该无限接近或者等于0。或者说,我们希望输出层的神经元对应的输出是若干个概率值,这若干个概率值即我们DNN模型对于输入值对于各类别的输出预测,同时为满足概率模型,这若干个概率值之和应该等于1。

        DNN分类模型要求是输出层神经元输出的值在0到1之间,同时所有输出值之和为1。很明显,现有的普通DNN是无法满足这个要求的。但是我们只需要对现有的全连接DNN稍作改良,即可用于解决分类问题。在现有的DNN模型中,我们可以将输出层第i个神经元的激活函数定义为如下形式:

        在这里插入图片描述
        其中,nL是输出层第L层的神经元个数,或者说我们的分类问题的类别数。很容易看出,所有的在这里插入图片描述都是在(0,1) 之间的数字,所有的在这里插入图片描述之和为1。
        下面这个例子清晰的描述了softmax激活函数在前向传播算法时的使用:
        在这里插入图片描述
        对于用于分类的softmax激活函数,对应的损失函数一般都是用对数似然函数,即:

        在这里插入图片描述
        其中yky_k的取值为0或者1,如果某一训练样本的输出为第i类。则yiy_i=1,其余的j≠i都有yjy_j=0。由于每个样本只属于一个类别,所以这个对数似然函数可以简化为:
        在这里插入图片描述
        其中ii即为训练样本真实的类别序号。
        可见损失函数只和真实类别对应的输出有关,这样假设真实类别是第i类,则其他不属于第i类序号对应的神经元的梯度导数直接为0。对于真实类别第i类,他对应的第j个w链接在这里插入图片描述对应的梯度计算为:
        在这里插入图片描述
        同样的可以得到在这里插入图片描述的梯度表达式为:

        在这里插入图片描述
         可见,梯度计算也很简洁,也没有第一节说的训练速度慢的问题。

    (4)梯度爆炸梯度消失与ReLU激活函数

        学习DNN,经常听说梯度爆炸和梯度消失两个词。尤其是梯度消失,是限制DNN与深度学习的一个关键障碍,目前也没有完全攻克。

        什么是梯度爆炸和梯度消失呢?从理论上说都可以写一篇论文出来。不过简单理解,就是在反向传播的算法过程中,由于我们使用了是矩阵求导的链式法则,有一大串连乘,如果连乘的数字在每层都是小于1的,则梯度越往前乘越小,导致梯度消失,而如果连乘的数字在每层都是大于1的,则梯度越往前乘越大,导致梯度爆炸。

        比如反向传播算法里面提到的δ的计算,可以表示为:

        在这里插入图片描述
        如果不巧我们的样本导致每一层的在这里插入图片描述都小于1,则随着反向传播算法的进行,我们的在这里插入图片描述会随着层数越来越小,甚至接近越0,导致梯度几乎消失,进而导致前面的隐藏层的W,b参数随着迭代的进行,几乎没有大的改变,更谈不上收敛了。这个问题目前没有完美的解决办法。

    • 而对于梯度爆炸,则一般可以通过调整我们DNN模型中的初始化参数得以解决。
    • 对于无法完美解决的梯度消失问题,目前有很多研究,一个可能部分解决梯度消失问题的办法是使用ReLU(Rectified Linear Unit)激活函数,ReLU在卷积神经网络CNN中得到了广泛的应用,在CNN中梯度消失似乎不再是问题。那么它是什么样子呢?其实很简单,比我们前面提到的所有激活函数都简单,表达式为:
    • 在这里插入图片描述
          也就是说大于等于0则不变,小于0则激活后为0。ReLU激活函数对梯度消失问题有一定程度的解决,尤其是在CNN模型中。
    (5)DNN其他激活函数

         除了上面提到了激活函数,DNN常用的激活函数还有:

    • <1> tanh

        这个是sigmoid的变种,表达式为:

        在这里插入图片描述
        tanh激活函数和sigmoid激活函数的关系为:

        在这里插入图片描述
        tanh和sigmoid对比主要的特点是它的输出落在了[-1,1],这样输出可以进行标准化。同时tanh的曲线在较大时变得平坦的幅度没有sigmoid那么大,这样求梯度变化值有一些优势。当然,要说tanh一定比sigmoid好倒不一定,还是要具体问题具体分析。

    • <2> softplus

        这个其实就是sigmoid函数的原函数,表达式为:

        在这里插入图片描述
        它的导数就是sigmoid函数。softplus的函数图像和ReLU有些类似。它出现的比ReLU早,可以视为ReLU的鼻祖。

        在这里插入图片描述

    • <3> PReLU

        从名字就可以看出它是ReLU的变种,特点是如果未激活值小于0,不是简单粗暴的直接变为0,而是进行一定幅度的缩小。如下图。当然,由于ReLU的成功,有很多的跟风者,有其他各种变种ReLU,这里就不多提了。

        在这里插入图片描述

    展开全文
  • 损失函数优化结果可能出现的问题

    千次阅读 2019-09-14 20:31:28
    如果学习速率过快,损失函数会在开始的时候有一个很明显的下降趋势,如果说学习速率太高的或者每一步走的太远,那么一开始损失函数值会在空间内来回乱窜,之后损失函数不会收敛甚至会越来越大(如图黄线),如果学习...

    如果学习速率过快,损失函数会在开始的时候有一个很明显的下降趋势,如果说学习速率太高的或者每一步走的太远,那么一开始损失函数值会在空间内来回乱窜,之后损失函数不会收敛甚至会越来越大(如图黄线),如果学习速率很低的话,那么损失函数的更新速度会很慢(如图蓝线),最终是损失函数达到收敛会需要很多时间。如果使用一个比较高的学习速率,最终也使损失函数收敛但有可能收敛之后的函数值会卡在一个比较高的位置,也就是说没有找到最低的函数值(如图绿线)。在这种情况下,由于更新速度比较快,你不能确定你要优化的函数是不是进入了一个局部最小值。

    展开全文
  • 机器学习中的各种损失/误差函数

    千次阅读 2017-11-10 17:49:49
    对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)也越来越小。同样的,当z的取值越来越小时,也有这个问题。仅仅在z取值为0附近时,导数σ′(z)的取值较大。 在反向传播算法中...

    一、均方误差

    二、交叉熵
    L=∑i=1Nylogy^+(1−y)log(1−y^)L = \sum^{N}_{i=1}ylog\hat{y}+(1-y)log(1-\hat{y})L=i=1Nylogy^+(1y)log(1y^)
    神经网络

    简单的交叉熵损失函数,你真的懂了吗?
    三、对数似然误差
    LR
    四、损失函数和激活函数的组合
    1.均方差损失函数+Sigmoid激活函数(不推荐)
    对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)也越来越小。同样的,当z的取值越来越小时,也有这个问题。仅仅在z取值为0附近时,导数σ′(z)的取值较大。
    在反向传播算法中,每一层向前递推都要乘以σ′(z),得到梯度变化值。Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。
    2. 使用交叉熵损失函数+Sigmoid激活函数(提高收敛速度)

    展开全文
  • 在每一个神经网络中,总会遇到各种必须要定义的函数,像激活函数啊,损失函数啊……越来越有意思了,这里就记录一下常用的激活函数吧,毕竟她在神经网络中的作用挺的。废话不多说了,下面一起看看有哪些激活函数。...
  • matlab复变函数指数函数代码GlobalSearchRegression 抽象的 GlobalSearchRegression既是世界上最快的全子集回归命令(一种广泛的用于自动模型/特征选择的工具),也是开发针对机器学习和计量经济学算法的一致框架的...
  • 在日常的开发过程中,App的性能和用户体验一直是我们关注的重点,尤其是对于公司来说每天的日活都是千万或者上亿的量级。操作过程中的不流畅和卡顿将严重影响用户的体验,甚至可能面临卸载导致用户流失。在拉新...
  • XGBoost算法简介及Python实现

    千次阅读 2018-10-19 10:04:33
    GB(梯度提升)算法就是用损失函数...此时的目标函数没有正则化项,仅仅是损失函数(通常是平方损失函数)值之和,这样容易造成过拟合,因为对于回归树一直细分下去损失函数一直减小,树的层数却越来越大。 实质上决策...
  • 如果能有一种理论告诉我们什么样的模型架构、运算方式能最好地表示某种数据,什么样的损失函数、迭代方式能最高效地学习到某种能力,什么样的设置又使这种能力能处理各种意外情况。那么,这样的深度学习,乃至机器...
  • 神经网络越写越深,参数容量越来越大。那只有一层的神经网络,能不能训练用于识别可爱的猫咪呢? 这篇文章不再用 TensorFlow、PyTorch 等人工智能的框架,采用最基础的数学库 NumPy,手把手带你一步步吃透深度学习...
  • 3,设计损失函数,也就是用数学公式来表示,神经网络的输出结果与正确结果之间的差距。 4,优化,通过梯度下降法修改神经元的链路权重,然后使得网络的输出结果与正确结果之间的差距越来越小。 下图就能将网络的...
  •   举个例子,如下图所示,神经网络使用sigmoid函数作为激活函数,由于sigmoid函数将函数的输入压缩到0和1之间,所以导致到浅层网络处的w变化很时loss变化很小,即损失函数对w的梯度几乎为0。 3. ReL
  • 机器学习 --超参数调优

    千次阅读 2018-05-13 04:08:39
     机器学习中,绝大部分模型没有...1、 模型发散,参数随着迭代数值绝对值越来越大,甚至发散到无穷,从损失函数来看,误差也会越来越大。 2、 震荡,从损失函数来看,误差出现震荡,模型在局部最优解附近徘徊。 ...
  • η\etaη的取值过大的话会使得每次步子太大,从而导致损失函数(loss function)不能达到最小值,甚至有可能越来越大;而η\etaη的取值过小的话会导致梯度下降的速度太慢很费时间。因为刚开始进行梯度下降的时候我们...
  • 对于最简单的损失函数:该误差函数是系数w的二次函数,因此它关于w的偏导数是线性函数,所以误差函数的最小值有一个唯一解;2.均方根误差(RMS)公式:3.随着M的增大(M为模型多项式的阶),模型的系数也越来越大,...
  • 当确定损失函数时,你需要一个优化器使损失函数的参数能够快速有效求解成功。优化器很程度影响计算效率。越来越多的超参数调整是通过自动化方式完成,使用明智的搜索在更短的时间内找到最佳超参组合,无需在初始...
  • 对抗生成网络,通过对分别两个...函数一:是判别损失函数,使得判别式的准确率越来越大, 及self.D1被判断为1, self.D2被判断为0 self.loss_d = tf.reduce_mean(-tf.log(self.D1) - tf.log(1-self.D2)) 函数二:...
  • 第五周正则归一

    2019-06-17 14:15:51
    在层数很深 的时候 ,损失函数的导数越来越大,或指数级减少 梯度消失解决–网络的权重初始化 W[1]=np.random.randn(shape)*np.sqrt(1/n[n-1]) ReLu激活函数:var(w)=2/n tanh函数:用np.sqr...
  • 梯度消失

    2020-07-02 17:10:05
    在训练神经网络时,为了让损失函数越来越小,常用优化的方法是梯度下降。梯度下降法简单的来说就是在权重的负梯度方向更新权重,一直到梯度收敛为零。(实际过程中,会通过设定一个超参数叫做最大跌代数来控制,如果...
  • 目录梯度爆炸原因:梯度变得非常,使得学习过程难以继续不当的损失函数不当的输入池化层中步长比核的尺寸梯度爆炸 原因:梯度变得非常,使得学习过程难以继续 现象:观察log,注意每一轮迭代后的loss。loss...
  • 在神经网络中,相对下一层来说,每一个隐层都是输入层,那么能不能对每个隐层都做白化呢?这就是启发BN产生的原初想法,可以...**这样输入的小变化就会导致损失函数的变化,避免梯度消失问题,加快训练收敛过程。
  • 二是采用了不合适的损失函数,比如sigmoid(导数最大为0.25,神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,...
  • 生成对抗网络(一)

    2019-03-23 14:45:06
    生成器生成的图片主要是逐像素级别的相似,判别...最大化损失函数。即是真实图片判别为1,生成的图片判别为0。 (2)固定判别器,训练生成器。 在此过程中不断交替,生成器则越来越好,生成的越来越真实。判别器的能...
  • 梯度消失爆炸

    2020-02-02 10:46:08
    找出最小值,找最小值就涉及到求导,多维数据应用到多层网络中求导时会涉及到链式法则,使用激活函数时,如果初始化参数w在0-1,激活函数的导数也是0-1,连乘后越来越小,导致模型无法从训练数据中更新,损失几乎...
  • 优化算法:牛顿法

    千次阅读 2017-02-15 15:59:24
    笔者越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或...
  • 优化算法:梯度法

    千次阅读 2017-02-12 17:55:05
    越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失...

空空如也

空空如也

1 2 3 4
收藏数 68
精华内容 27
关键字:

损失函数越来越大