精华内容
下载资源
问答
  • 比赛实践中,往往都是先用Adam实现快速收敛后,再使用SGD达到最优解,为什么Adam无法直接达到最优解呢? 强烈推荐: 关于这个问题的综述:https://www.jiqizhixin.com/articles/2017-12-06 ICLR 2018 的一篇论文...

    疑问来源:

    比赛实践中,往往都是先用Adam实现快速收敛后,再使用SGD达到最优解,为什么Adam无法直接达到最优解呢?

    强烈推荐:

    关于这个问题的综述:https://www.jiqizhixin.com/articles/2017-12-06

    ICLR 2018 的一篇论文认为是因为使用了指数滑动平均:

    < On the Convergence of Adam and Beyond > 
    原文链接:http://www.sanjivk.com/AdamConvergence_ICLR.pdf

    现在的最佳做法: 
    1. 最新版本Keras的Adam实现中已经支持了amsgrad算法 
    keras.optimizers.Adam(lr=0.0012, beta_1=0.9, beta_2=0.9, epsilon=1e-08, amsgrad=True) 
    2. 依然使用Adam+SGD(with momentum)的方法
    --------------------- 
    作者:LeYOUNGER 
    来源:CSDN 
    原文:https://blog.csdn.net/LeYOUNGER/article/details/80014734 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 深度学习网络训练不收敛问题

    千次阅读 2018-12-10 20:06:39
    图片质量极差,人眼几乎无法识别其中想要识别的特征,对于网络来说相当于输入的一直都是噪音数据,所以loss一直震荡无法收敛 大部分标签都是对应错误的标签 leaning rate 设置过大 不收敛情景2 描述 训练开始会...

    不收敛描述及可能原因分析

    不收敛情景1

    • 描述
      从训练开始就一直震荡或者发散
    • 可能原因
      • 图片质量极差,人眼几乎无法识别其中想要识别的特征,对于网络来说相当于输入的一直都是噪音数据,比如通过resize的时候,图片的长宽比改变特别大,使图片丧失对应特征;或者tfrecord中图片大小是(m,n),但是读取的时候,按照(n,m)读取。所以loss一直震荡无法收敛
      • 大部分标签都是对应错误的标签
      • leaning rate 设置过大

    不收敛情景2

    • 描述
      训练开始会有所下降,然后出现发散
    • 可能原因
      • 数据标签中有错误,甚至所有标签都有一定的错误,比如生成的标签文件格式和读取标签时设置的文件格式不一样,导致读取的标签是乱码;或者为标签中存在的空格未分配对应的编码,导致读取的空格为乱码(在OCR问题中)
      • learning rate 设置过大

    不收敛情景3

    • 描述
      训练开始会有所下降,然后出现震荡
    • 可能原因
      • loss函数中正则化系数设置有问题,或者loss函数本身有问题。比如,在序列化问题中的label_smoothing设置过大,比如设置为0.9,一般设置为0.1即可(OCR问题中)
      • 数据标签中有错误,甚至所有标签都有一定的错误
    展开全文
  • 以下列举了一些迭代次数判断的方法:01 当loss值收敛时结束迭代深度学习的一个关键原理就是比较学习结果和样本标签之间的差距。理论上差距越小,表明学习的效果越好。这个差距就是loss值。Loss值不可能变为0,只能...

    本着实事求是的态度总没有错。我们的目标就是用网络模型做出更好的预测效果,所以能实现这个目标的方法都是好方法。

    以下列举了一些迭代次数判断的方法:

    01 当loss值收敛时结束迭代

    深度学习的一个关键原理就是比较学习结果和样本标签之间的差距。理论上差距越小,表明学习的效果越好。这个差距就是loss值。

    Loss值不可能变为0,只能无限逼近0。所以通过脚趾都能想到,当loss值无法变小的时候,这称为收敛,就是学习结束之时。

    02 使用验证集来检验训练成果

    深度学习常常会遇到一个问题——过拟合。训练的时候学习效果很好,但是拿到其它地方测试发现效果就不行了。

    就是说,并不一定是学习效果最好的时候才停止。那如何来判断停止的时机呢?

    有学者提出了验证集。

    就是说,把训练集分为2部分,比如70%用来训练,30%用来验证。就像下面的代码。

    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=seed)

    然后在训练时加入验证的参数,就像这样:

    autoencoder.fit(train_data, train_data,

    epochs=50,

    batch_size=128,

    shuffle=True,

    validation_data=(noisy_imgs, data_test)

    )

    然后就是观察验证曲线,什么时候验证的loss值最小,就选那一次的训练模型进行测试应用。

    03 使用测试集来检验训练成果

    随着研究的广泛开展和对学习效果的极致追求,我们渐渐发现了一个问题——有时候从验证曲线看到的最优值并不是真实预测过程的最好效果。比如这种情况:对大尺度数据进行深度学习去噪。

    最优方法是通过测试效果来决定迭代的次数。

    首先,在训练代码中增加回调函数,如MyCallback():

    autoencoder.fit(train_data, train_data,

    epochs=50,

    batch_size=128,

    shuffle=True,

    validation_data=(noisy_imgs,data_test),

    callbacks=[TensorBoard(log_dir='tmp/autoencoder'),MyCallback()])

    然后,自己在回调函数中写测试效果的代码,比如以PSNR来检验预测效果。

    class MyCallback(Callback):

    def on_epoch_end(self, epoch, logs={}):

    reconstructed = autoencoder.predict(noisy_imgs)

    。。。。。。

    然后观察测试的曲线来决定迭代的次数。

    如果喜欢请点赞,或关注我交流。

    当对这样的小块进行50次训练后,曲线是这样的(上为训练loss,下为验证loss):

    那第15次迭代的网络模型用来做真实数据的预测效果是这样的:

    接下来,我们要写测试代码。

    首先,在训练代码中增加回调函数,如MyCallback():

    autoencoder.fit(train_data, train_data,

    epochs=50,

    batch_size=128,

    shuffle=True,

    validation_data=(noisy_imgs,data_test),

    callbacks=[TensorBoard(log_dir='tmp/autoencoder'),MyCallback()])

    然后,自己在回调函数中写测试效果的代码,比如以PSNR来检验预测效果。

    class MyCallback(Callback):

    def on_epoch_end(self, epoch, logs={}):

    reconstructed = autoencoder.predict(noisy_imgs)

    。。。。。。

    这样在训练50次后,可以看到测试的曲线是这样的(PSNR值越大越好):

    这样看来,学习迭代5次就足够了。效果是这样的:

    展开全文
  • 选自Psychology Today作者:Cami Rosso机器之心编译编辑:陈萍、杜伟在本文中,来自 MIT 的研究者探讨了关于深度学习中非常基础的问题,包括网络的近似能力、优化的动态规律和强泛化能力等。人工智能(AI)的复苏很大...

    选自Psychology Today

    作者:Cami Rosso

    机器之心编译

    编辑:陈萍、杜伟

    在本文中,来自 MIT 的研究者探讨了关于深度学习中非常基础的问题,包括网络的近似能力、优化的动态规律和强泛化能力等。

    人工智能(AI)的复苏很大程度上归功于深度学习在模式识别方面的快速发展。深度神经网络架构的构建一定程度上受到了生物大脑和神经科学的启发。就像生物大脑的内部运行机制一样,深度网络在很大程度上无法得到解释,没有一个统一的理论。对此,来自麻省理工学院(MIT)的研究者提出了深度学习网络如何运行的新见解,有助于人们揭开人工智能机器学习的黑匣子

    论文地址:https://cbmm.mit.edu/sites/default/files/publications/PNASlast.pdf

    论文作者 Tomaso Poggio、Andrzej Banburski 和 Quianli Liao 来自 MIT 大脑、心智和机器中心(Center for Brains, Minds and Machines, CBMM),其中 Tomaso Poggio 是 MIT 计算神经学科「大家」,也是深度学习理论研究的先锋。他们创建了一种新的理论来解释深度网络的运行原因,并于 2020 年 6 月 9 日在 PNAS(美国国家科学院院刊)上发表了他们的研究成果。

    5c0ef7cbb01b6d8fade78c0c310da248.png

    Tomaso Poggio

    值得强调的是,这篇论文的 editor 是 Stanford 理论大咖 David L. Donoho,他的研究方向主要包括谐波分析、信号处理、深度学习以及压缩感知。

    研究者重点探究了深度网络对某些类型的多元函数的近似,这些函数避免了维数灾难现象,即维数准确率与参数量成指数关系。在应用机器学习中,数据往往是高维的。高维数据的示例包括面部识别、客户购买历史、病人健康档案以及金融市场分析等。

    深度网络的深度是指计算的层数——计算层数越多,网络越深。为了阐明自己的理论,三位研究者检验了深度学习的近似能力、动态优化以及样本外性能

    深度网络的近似能力

    对于一般的范例如下:为了确定一个网络的复杂性,使用函数 f (x ) 表示,理论上应当保证一个未知目标函数 g 的近似达到给定的准确率(> 0)。特别地,深度网络在近似函数方面比浅层网络具备更好的条件。这两种类型的网络都使用相同的操作集——点积、线性组合、单一变量的固定非线性函数、可能的卷积和池化。

    如下图 1 所示,网络中的每个节点对应于要近似的函数的图中的节点。结果发现,深度网络具有比浅层网络更好的近似能力。

    bfcb02074394c4d65b648ef9d40afa92.png

    研究者发现通过具有局部层级的深度卷积网络,指数成本消失,并再次变得更加线性。然后证明了对于特定类型的复合函数,卷积深度网络可以避免维数灾难。这意味着,对于具有局部层级问题,例如图像分类,浅层网络与深度网络之间的差距是指数级的。

    「在近似理论中,无论是浅层网络还是深度网络,都在以指数代价近似连续函数,然而,我们证明了对于某些类型的组合函数,卷积型的深度网络(即使没有权重共享)可以避免维数灾难」,研究者表示。

    优化的动态规律

    之后该团队解释了为什么参数过多的深度网络在样本外数据上表现良好。该研究证明对于分类问题,给定一个用梯度下降算法训练的标准深度网络,那么重要的是参数空间的方向,而不是权重的范数或大小。

    参考文献 27 的最新结果说明了在二元分类线性网络的特殊情况下过拟合的明显缺失。他们证明了最小化损失函数,如 logistic 函数、交叉熵和指数损失函数等会使线性可分离数据集的最大边值解渐近收敛,不受初始条件的影响,也不需要显式正则化。这里该研究讨论了非线性多层深度神经网络(DNN)在指数型损失下的情况,如下图 2 所示:

    69199fea446f7bb6c2da22cd19c6f93f.png

    左图显示了在数据集(CIFAR-10)相同、初始化不同的网络上,测试与训练交叉熵损失的对比,结果显示在训练集上产生的分类误差为零,但测试误差不同;右图显示了在相同的数据、相同的网络上测试与训练损失的对比。

    研究者这样描述:「在描述经验指数损失最小化的特征时,我们考虑的是权重方向的梯度流,而不是权重本身,因为分类的相关函数对应于归一化网络。动态归一化权值与单位范数约束下最小化损失的约束问题等价。特别地,典型动态梯度下降与约束问题具有相同的临界点。」

    这意味着深度网络上的动态梯度下降与那些对参数的范数和大小都有明确约束的网络等价——梯度下降收敛于最大边值解。研究者发现了线性模型的相似性,在这种模型中,向量机收敛到伪逆解,目的是最小化解的数量。

    事实上,研究者假定训练深度网络的行为是为了提供隐式正则化和范数控制(norm control)。科学家们把深度网络的这种能力归因为泛化,而无需对正则化项或权重范数进行明确的控制,而对于数学计算问题,则表明不管在梯度下降中是否存在强制约束,单位向量(从梯度下降的解中计算)保持不变。换言之,深度网络选择最小范数解,因此具有指数型损失的深度网络的梯度流具有局部最小化期望误差。

    「我们认为,这项研究结果特别有趣,因为它可能解释了深度学习领域出现的最大谜团之一,即卷积深度网络在一些感知问题上的不合理有效性」,研究者写道。

    随着应用数学、统计学、工程学、认知科学以及计算机科学跨学科的交融,研究者开发了一种关于为什么深度学习有效的理论,它可能会促进新的机器学习技术的发展,并在未来加速人工智能的突破。

    展开全文
  • 机器学习6 -- 深度学习训练优化

    万次阅读 2020-08-30 15:46:05
    深度学习中,我们在训练集上进行训练,结束后利用模型在测试集上进行predict。一般来说可能遇到两大类问题 训练集上训练的不够好,模型指标本身就不高。一般称为欠拟合 训练集上表现很好,但测试集上表现不好。一般...
  • 深度学习中学习率的选择

    千次阅读 2018-03-11 22:56:31
    learning rate是深度学习模型中进行训练的一个比较关键的因素,也是通常我们设计模型中基本都会讨论和实验的一个参数。   大家都知道,梯度具有方向和大小,反向传播中,梯度下降算法乘以一个称为学习速率的变量...
  • 深度学习-归一化

    2020-12-17 17:10:39
    归一化意义:无论机器学习还是深度学习,使用哪一种框架,归一化都是必要环节。归一化的目标是将每一维特征压缩到一定范围之内,以免不同特征因取值范围不同而影响其权重。非常大或非常小的值搭配上不恰当的学习率,...
  • 深度学习题目摘选

    2018-08-07 13:05:00
    学习率即求导梯度前的系数,若学习率过大则参数更新过大,越过最低点导致无法收敛。 在一个神经网络中,下面哪种方法可以用来处理过拟合? A、Dropout B、分批归一化(Batch Normalizatio...
  • 感知器有一个问题,当面对的数据集不是线性可分的时候,『感知器规则』可能无法收敛,这意味着我们永远也无法完成一个感知器的训练。为了解决这个问题,我们使用一个可导的线性函数来替代感知器的阶跃函数,这种...
  • 可以看到只有保证(学习率*f(x))的倒数足够小的时候,才能带人泰勒展开式进行近似计算,保证损失函数在迭代过程中逐渐收敛,而当学习率太大时,使前面提到的一阶泰勒展开公式不再成立:这时我们无法保证迭代xxx会...
  • 【学习笔记】Pytorch深度学习-权值初始化梯度爆炸和消失Xavier方法和Kaiming方法常用的初始化方法 前面学习了搭建网络模型的各个层级与结构,想要训练得到1个良好的网络模型,正确的权值初始化方法可以加快模型的...
  • 学习率是深度学习中的一个重要的超参,如何调整学习率是训练出好模型的关键要素之一。在通过SGD求解问题的极小值时,梯度不能太大,也不能太小。太大容易出现超调现象,即在极值点两端不断发散,或是剧烈震荡,总之...
  • 深度学习的相关思想

    2019-09-26 13:12:00
    感知器有一个问题,当面对的数据集不是线性可分的时候,『感知器规则』可能无法收敛,这意味着我们永远也无法完成一个感知器的训练。为了解决这个问题,我们使用一个可导的线性函数来替代感知器的阶跃函数,这种感知...
  • 深度学习:梯度消失和梯度爆炸

    千次阅读 2017-11-08 00:28:33
    主要是因为网络层数太多,太深,导致梯度无法传播。本质应该是激活函数的饱和性。 DNN结果出现nan值? 梯度爆炸,导致结果不收敛。都是梯度太大惹的祸,所以可以通过减小学习率(梯度变化直接变小)、减小batch ...
  • 本文转自《零基础入门深度学习》系列文章,阅读原文请移步这里 一、线性单元是啥 感知器有一个问题,当面对的数据集不是线性可分的时候,『感知器规则』可能无法收敛,这意味着我们永远也无法完成一个感知器的训练。...
  • 譬如图像分类、识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性、时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型,所以这个时候迁移学习就派上用场了。...
  • 神经网络的代码,比一般的代码要难调试不少,和编译错误以及运行时程序崩溃相比,神经网络比较棘手的地方,往往在于程序运行正常,但是结果无法收敛,这个检查起来可要麻烦多了。下面是根据我平时调试神经网络的经验...
  • 截图来自于吴恩达的深度学习视频。 我们在参数更新的时候,存在一个步长α,这个参数代表了我们每一轮迭代在梯度方向上要进步的步伐长度,以前呢骂我们都是设置成规定值,那么有什么影响呢?首先简单不用说了,在...
  • 深度学习自用笔记1 深度学习-梯度下降算法-自用笔记 刚刚进入深度学习,了解到梯度下降算法,发现梯度下降算法会遇到局部最优点和鞍点 梯度下降算法 最终是要找到一个合适的权重W*来让损失函数cost(w)最小。但真正...
  • 一、梯度消失和梯度爆炸  1....  2.... 在深度神经网络中,通常采用BP方法更新权重,一般采用链式求导法则求得梯度来更新,导数项...这时如果梯度过大连乘起来就会越来越大以至于超出范围无法收敛这叫做梯度爆炸,反...
  • 如果发生任何一种情况,损失梯度太大或者太小,就无法有效向后反传,即便可以向后反传,网络也需要花更长的时间来达到收敛. 矩阵乘法是神经网络的基本数学运算。在多层深度神经网络中,一个正向传播仅需要在每层对...
  • 梯度下降法如果收敛到一个局部极小值点,梯度就等于或接近于0,无法进一步改进目标函数,导致学习过程无法收敛到全局最优解。 (2)如何选择合适的初始权值? BP算法的最终收敛结果有时受初始权值的影响很大。各个...
  • 学习过程中除了学习算法,学习率的控制也尤为重要,固定值的学习率很容易最终不断振荡,无法实现收敛。本文主要整理介绍一些学习率衰减算法,同时也简单介绍一些例如warm up和batch size有关的学习率控制经验。

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 136
精华内容 54
关键字:

无法收敛深度学习