专栏首页机器之心为何Keras中的CNN是有问题的,如何修复它们?

为何Keras中的CNN是有问题的,如何修复它们?

选自Medium

作者:Nathan Hubens

机器之心编译

参与:Nurhachu Null、张倩

在训练了 50 个 epoch 之后,本文作者惊讶地发现模型什么都没学到,于是开始深挖背后的问题,并最终从恺明大神论文中得到的知识解决了问题。

上个星期我做了一些实验,用了在 CIFAR10 数据集上训练的 VGG16。我需要从零开始训练模型,所以没有使用在 ImageNet 上预训练的版本。

我开始了 50 个 epoch 的训练,然后去喝了个咖啡,回来就看到了这些学习曲线:

模型什么都没学到!

我见过网络收敛得极其缓慢、振荡、过拟合、发散,但这是我第一次发现这种行为——模型根本就没有起任何作用。

因此我就深挖了一下,看看究竟发生了什么。

实验

这是我创建模型的方法。它遵循了 VGG16 的原始结构,但是,大多数全连接层被移除了,所以只留下了相当多的卷积层。

现在让我们了解一下是什么导致了我在文章开头展示的训练曲线。

学习模型过程中出现错误时,检查一下梯度的表现通常是一个好主意。我们可以使用下面的方法得到每层梯度的平均值和标准差:

然后将它们画出来,我们就得到了以下内容:

使用 Glorot 函数初始化的 VGG16 梯度的统计值

呀... 我的模型中根本就没有梯度,或许应该检查一下激活值是如何逐层变化的。我们可以试用下面的方法得到激活值的平均值和标准差:

然后将它们画出来:

使用 Glorot 函数进行初始化的 VGG16 模型的激活值

这就是问题所在!

提醒一下,每个卷积层的梯度是通过以下公式计算的:

其中Δx 和Δy 用来表示梯度∂L/∂x 和∂L/∂y。梯度是通过反向传播算法和链式法则计算的,这意味着我们是从最后一层开始,反向传递到较浅的层。但当最后一层的激活值接近零时会发生什么呢?这正是我们面临的情况,梯度到处都是零,所以不能反向传播,导致网络什么都学不到。

由于我的网络是相当简约的:没有批归一化,没有 Dropout,没有数据增强,所以我猜问题可能来源于比较糟糕的初始化,因此我拜读了何恺明的论文——《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》

论文链接:https://arxiv.org/pdf/1502.01852.pdf

下面简要描述一下论文内容。

初始化方法

初始化始终是深度学习研究中的一个重要领域,尤其是结构和非线性经常变化的时候。实际上一个好的初始化是我们能够训练深度神经网络的原因。

以下是何恺明论文中的关键思想,他们展示了初始化应该具备的条件,以便使用 ReLU 激活函数正确初始化 CNN。这里会需要一些数学知识,但是不必担心,你只需抓住整体思路。

我们将一个卷积层 l 的输出写成下面的形式:

接下来,如果偏置值被初始化为 0,再假设权重 w 和元素 x 相互独立并且共享相同的分布,我们就得到了:

其中 n 是一层的权重数目(例如 n=k²c)。通过独立变量的乘积的方差公式:

它变成了:

然后,如果我们让权重 w 的均值为 0,就会得到:

通过 König-Huygens 性质:

最终得到:

然而,由于我们使用的是 ReLU 激活函数,所以就有了:

因此:

这就是一个单独卷积层的输出的方差,到那时如果我们想考虑所有层的情况,就必须将它们乘起来,这就得到了:

由于我们做了乘积,所以现在很容易看到如果每一层的方差不接近于 1,网络就会快速衰减。实际上,如果它比 1 小,就会快速地朝着零消散,如果比 1 大,激活的值就会急剧增长,甚至变成一个你的计算机都无法表示的数字(NaN)。因此,为了拥有表现良好的 ReLU CNN,下面的问题必须被重视:

作者比较了使用标准初始化(Xavier/Glorot)[2] 和使用它们自己的解初始化深度 CNN 时的情况:

在一个 22 层的 ReLU CNN 上使用 Glorot(蓝色)初始化和 Kaiming 的初始化方法进行训练时的对比。使用 Glorot 初始化的模型没有学到任何东西。

这幅图是不是很熟悉?这就是我在文章开始向你们展示的图形!使用 Xavier/Glorot 初始化训练的网络没有学到任何东西。

现在猜一下 Keras 中默认的初始化是哪一种?

没错!在 Keras 中,卷积层默认是以 Glorot Uniform 分布进行初始化的:

所以如果我们将初始化方法改成 Kaiming Uniform 分布会怎么样呢?

使用 Kaiming 的初始化方法

现在来创建我们的 VGG16 模型,但是这次将初始化改成 he_uniform。

在训练模型之前,让我们来检查一下激活值和梯度。

所以现在,使用 Kaiming 的初始化方法时,我们的激活拥有 0.5 左右的均值,以及 0.8 左右的标准差。

可以看到,现在我们有一些梯度,如果希望模型能够学到一些东西,这种梯度就是一种好现象了。

现在,如果我们训练一个新的模型,就会得到下面的学习曲线:

我们可能需要增加一些正则化,但是现在,哈哈,已经比之前好很多了,不是吗?

结论

在这篇文章中,我们证明,初始化是模型中特别重要的一件事情,这一点你可能经常忽略。此外,文章还证明,即便像 Keras 这种卓越的库中的默认设置,也不能想当然拿来就用。

参考文献和扩展阅读:

[1]: Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification:https://arxiv.org/pdf/1502.01852.pdf

[2]: Understanding the difficulty of training deep feedforward neural networks:http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

[3]: 吴恩达课程:https://www.youtube.com/watch?v=s2coXdufOzE

原文地址:https://towardsdatascience.com/why-default-cnn-are-broken-in-keras-and-how-to-fix-them-ce295e5e5f2

本文为机器之心编译,转载请联系本公众号获得授权。

✄------------------------------------------------

加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告 & 商务合作:bd@jiqizhixin.com

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【技术分享】快速迭代聚类

      在分析快速迭代聚类之前,我们先来了解一下谱聚类算法。谱聚类算法是建立在谱图理论的基础上的算法,与传统的聚类算法相比,它能在任意形状的样本空间上聚类且能够收敛...

    腾讯智能钛AI开发者
  • 学界 | 机器学习如何从上游抑制歧视性行为?斯坦福 AI 实验室的最新成果给出了答案

    AI 科技评论按:随着机器学习系统越来越多地运用于许多重大决策中,如何对其公平性实现精细地控制已经成了我们亟需解决的问题。为解决这一问题,目前已有一些研究人员通...

    AI研习社
  • 宋仲基宋慧乔没能找到对的人,算法能帮我们找到么?

    场景描述:寻找能够相伴一生的灵魂伴侣是很多人的美好愿望,但现实往往残酷。为此,基于大数据,机器学习,AI 算法的婚恋网站和应用纷纷出招,它们能够帮助广大单身男女...

    用户1564362
  • 学机器学习有必要懂数学吗?深入浅出机器学习与数学的关系

    小黑,Datawhale团队成员,秦时明月十年铁粉,本科就读于山西大学,保研至天津大学并硕博连读,现为2018级博士,研究方向:脑机接口。

    用户1564362
  • 动态 | 谷歌 Dropout 专利生效,AI 圈内人表示坐不住了!

    AI 科技评论按:今天,谷歌的 Dropout 专利生效这一消息突然在圈内传开,而生效日期就在 6 月 25 日,有效期 15 年。三年前,谷歌就给 Dropo...

    AI研习社
  • LabelEncoder(标签编码)与One—Hot(独热编码)

    在做Kaggle项目的时候,碰到的问题,通常拿到一个比赛项目,将特征分为数字型特征和文字性特征,分别进行处理,而对于文字型特征如何处理,这时就...

    用户5745385
  • 用深度学习从非结构化文本中提取特定信息

    这是我们在iki项目工作中的一系列技术文章中的第一篇,内容涵盖用机器学习和深度学习技术来解决自然语言处理与理解问题的一些应用案例。

    AI研习社
  • 机器学习中为什么需要对数据进行归一化?

    如下图所示,蓝色的圈圈图代表的是两个特征的等高线。其中左图两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是[1,5],其所...

    用户5745385
  • 【干货】适合NLP初学者的8个免费资源分享

    微软全球执行副总裁沈向洋博士曾表示“懂语言者得天下,人工智能对人类影响最为深刻的就是自然语言方面。”现在很多研究人员都在进入自然语言领域,希望可以解决“让机器理...

    用户2769421
  • 带答案面经分享-L1正则&L2正则

    1、过拟合的解决方式有哪些,l1和l2正则化都有哪些不同,各自有什么优缺点(爱奇艺)

    用户2769421

扫码关注云+社区

领取腾讯云代金券