返回介绍

3.2 神经网络大脑内部

发布于 2024-01-27 20:58:55 字数 3799 浏览 0 评论 0 收藏 0

在求解各种各样我们不知道如何使用简约明快的规则解决的问题时,神经网络发挥了重要作用。想象一下,写下一组规则,将这些规则应用于手写数字图像,来确定数字是什么,这件事并不是那么容易,并且我们的尝试也可能不会那么成功。

3.2.1 神秘的黑盒子

一旦神经网络得到了训练,并且在测试数据上表现良好,那么基本上你就拥有了一个神秘的黑盒子。你不知道这个黑盒子如何计算出答案,但是它确实成功地计算出了答案。

如果你只对答案感兴趣,而不真正关心它们如何得出这个答案的,那么对你来说,这就不是一个问题了。但是,我要指出这是这些机器学习方法类型的缺点,即虽然黑盒子(神经网络)已经学会如何求解问题,但是其所学习到的知识常常不能转化为对问题的理解和智慧。

让我们来看看是否可以到神经网络内部一探究竟,是否能够理解神经网络所学习到的知识,将神经网络通过训练搜集到的知识可视化。

我们可以观察权重,这毕竟是神经网络学习的内容。但是,权重不太可能告诉我们太多信息。特别是,神经网络的工作方式是将学习分布到不同的链接权重中。这种方式使得神经网络对损坏具有了弹性,这就像是生物大脑的运行方式。删除一个节点甚至相当多的节点,都不太可能彻底破坏神经网络良好的工作能力。

这里有一个疯狂的想法。

3.2.2 向后查询

在通常情况下,我们馈送给已受训练的神经网络一个问题,神经网络弹出一个答案。在我们的例子中,这个问题是人类的手写数字图像。答案是表示数字0到9中的某个标签。

如果将这种方式反转,向后操作,会发生什么呢?如果馈送一个标签到输出节点,通过已受训练的网络反向输入信号,直到输入节点弹出一个图像,那会怎么样?下图显示了正常的正向查询和疯狂的反向向后查询的想法。

我们已经知道如何通过网络传播信号,使用链接权重调节信号,在应用激活函数之前在节点处重新组合信号。除了使用的是逆激活函数以外,所有这一切操作也都适用于反向传播信号。如果y = f(x ) 是正向激活函数,那么这个函数的逆就是x = g(y )。使用简单的代数,求出逻辑函数的逆,也并非难事:

y = 1 / (1 + e-x )

1 + e-x = 1/y

e-x = (1/y ) -1 = (1 - y ) / y

-x = ln [ (1-y ) / y ]

x = ln [ y / (1-y ) ]

这就是所谓的对数函数,就像Python为逻辑S函数提供scipy.special.expit()一样,Python中的scipy.special库也提供了这个函数,即scipy.special.logit()。

在应用逆激活函数logit()之前,我们需要确保信号是有效的。这是什么意思呢?还记得吧,逻辑S函数接受了任何数值,输出0和1之间的某个值,但是不包括0和1本身。逆函数必须接受相同的范围0和1之间的某个值,不包括0和1,弹出任何正值或负值。为了实现这一目标,我们简单地接受输出层中的所有值,应用logit(),并将它们重新调整到有效范围。我选择的范围为0.01至0.99。

这段代码在网上始终可用,请访问GitHub以获取:

· https://github.com/makeyourownneuralnetwork/makeyourownneuralnetwork/ blob/master/part3_neural_network_mnist_backquery.ipynb

3.2.3 标签“0”

来看看如果我们使用标签“0”进行反向查询,会发生什么情况。也就是说,我们向输出节点展示了一些值,除了使用值0.99展示给第一个节点表示标签“0”,其余节点都展示了0.01。换句话说,也就是数组[0.99, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,0.01]。

下图显示了输入节点弹出的图像。

这真是太有趣了!

这个图像让我们对神经网络的“大脑”有了一种深刻的见解。这个图像是什么意思?该如何解释这个图像呢?

我们注意到最主要的特征是,图像中的圆形。我们是在询问神经网络——对于答案“0”,最理想的问题是什么,因此,这个图像是有道理的。

我们也注意到深色、浅色和一些介中的灰色区域。

· 深色区域是问题图像中应该使用笔来标记的部分,这部分图像组成了支持证据,证明答案为“0”,可以这样理解,这些部分看起来组成了0的形状轮廓。

· 浅色区域是问题图像中应该没有任何笔痕的部分,这支持了答案为“0”。同样,可以这样理解,这些部分形成了0形状的中间部分。

· 大体上,神经网络对灰色区域不是很敏感。

因此,粗略来讲,我们实际上已经理解了,针对如何将图像归类为标签“0”,神经网络已经学习到的知识。

这是一种难得的见解,对于较多层、较复杂的神经网络或较复杂的问题而言,可能没有如此容易解释的结果。我们鼓励你进行实验,亲自动手试一试。

3.2.4 更多的大脑扫描

下图显示了其他数字向后查询的结果。

哇!同样是一些非常有趣的图像,就像使用超声波扫描神经网络的大脑一样。

关于这些图像,我们做了一些注解:

· “7”真的很清楚。可以看到在查询图像中标记的深色位置,强烈暗示了这是标签“7”。也可以看到额外的“白色”区域,这些区域没有任何标记。这两个特点结合起来,指示出了这是“7”。

· 这同样适用于数字“3”,有标记的深色区域指示出了“3”,白色的区域也非常清晰。

· “2”和“5”具有类似的清晰度。

· 数字“4”有点有趣,这个形状出现在4个象限中,是4个互相分隔的区域。

· “8”主要是由“雪人”构成的,这个“雪人”由白色区域形成,表明8的特征在于保持了“头部和身体”区的标记。

· 数字“1”令人相当费解。这看起来好像神经网络较多关注无需标记的区域,而较少关注需要标记的区域。没关系,这就是网络从样本中学到的知识。

· 数字“9”一点都不清楚。它有一个明确的深色区域,还有一些形状相对精细的白色区域。这就是神经网络所学习到的知识,总体来说,当与网络学会的其他数字结合时,这允许神经网络的表现达到了97.5%的准确度。我们观察一下这个图片,并得出结论,有更多的培训样本将有助于神经网络学到更清晰的“9”的模板。

现在,你对神经网络大脑的工作方式应该有了一个深刻的了解了吧。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文