OpenAI开源了这些用于可视化神经网络的框架

Microscope和Lucid库是OpenAI开源堆栈的新增功能 。
OpenAI开源了这些用于可视化神经网络的框架文章插图
> Source:
可解释性是深度学习领域最具挑战性的方面之一 。想象一下 , 了解一个神经网络 , 其中有成千上万个神经元分布在数千个隐藏层中 。大多数深度神经网络的互连性和复杂性使其不适用于传统的调试工具 。结果 , 数据科学家经常依靠可视化技术来帮助他们了解神经网络如何做出决策 , 这是一个持续的挑战 。为了推动这一领域的发展 , OpenAI刚刚推出了显微镜和清醒库 , 它们可以可视化神经网络中的神经元 。
在您需要牺牲准确性等其他方面之前 , 可解释性是深度神经网络解决方案中的一项理想属性 。深度学习模型的可解释性和准确性能力之间的摩擦是能够完成复杂的知识任务与理解如何完成这些任务之间的摩擦 。知识与控制 , 绩效与问责制 , 效率与简单性……选择您最喜欢的难题 , 可以通过在准确性和可解释性之间进行权衡取舍来解释所有这些难题 。许多深度学习技术本质上是复杂的 , 尽管它们在许多情况下都非常准确 , 但是它们却难以解释 。所有深度学习模型都具有一定程度的可解释性 , 但是其具体细节取决于一些关键的构建块 。
可解释性的基石当涉及深度学习模型时 , 可解释性不是一个单一的概念 , 而是不同原理的结合 。 在最近的一篇论文中 , 来自Google的研究人员概述了他们认为可解释性的一些基本构成部分 。 本文提出了使模型可解释的三个基本特征:
OpenAI开源了这些用于可视化神经网络的框架文章插图
了解隐藏层的作用:深度学习模型中的大部分知识都是在隐藏层中形成的 。 在宏级别上了解不同隐藏层的功能对于解释深度学习模型至关重要 。
·了解如何激活节点:可解释性的关键不是了解网络中单个神经元的功能 , 而是了解在同一空间位置一起发射的一组互连神经元 。通过互连神经元的组对网络进行分段将提供更简单的抽象级别 , 以了解其功能 。
·了解概念的形成方式:了解深度神经网络如何形成各个概念 , 然后将这些概念组合成最终输出 , 这是可解释性的另一个关键组成部分 。
从自然科学中汲取灵感概述可解释性的关键组成部分无疑是朝着正确方向迈出的一步 , 但远未得到普遍采用 。 大多数深度学习社区在可解释性方面都同意的几件事之一是 , 我们甚至没有正确的定义 。
在围绕可解释性缺乏统一共识的情况下 , 答案可能取决于更深入地了解我们对神经网络决策过程的理解 。这种方法似乎已经在其他许多科学领域起作用 。例如 , 在关于生物体结构没有基本共识的时代 , 显微镜的发明使得能够可视化催化细胞生物学革命的细胞 。
也许我们需要一台用于神经网络的显微镜 。
Microscope 显微镜OpenAI Microscope是常见的深度神经网络可视化的集合 , 以促进其可解释性 。 显微镜使分析这些神经网络内部的特征及其神经元之间的联系变得更加容易 。
让我们以著名的AlexNet神经网络为例 , 它是ILSVRC 2012的获奖条目 。 它解决了图像分类的问题 , 其中输入是1000种不同类别(例如猫 , 狗等)之一的图像 , 而输出是 1000个数字的向量 。
使用OpenAI Microscope , 我们可以选择一个样本数据集 , 并可视化AlexNet的核心架构以及每层图像分类过程的状态 。
OpenAI开源了这些用于可视化神经网络的框架文章插图
> Source:
选择特定层后(例如:conv5_1) , 显微镜将显示该层中不同隐藏单元的可视化 。
OpenAI开源了这些用于可视化神经网络的框架文章插图
> Source:
选择一个层后 , Microscope将可视化对应的特征以及与训练数据集形成相关的训练数据集的元素 。
OpenAI开源了这些用于可视化神经网络的框架文章插图
> Source:
浏览Microscope可以帮助说明智能的可视化如何帮助改善特定深度神经网络的可解释性 。 为了扩大初始研究范围 , OpenAI还开放了一个框架以重用一些现有的可视化模型 。
Lucid库Lucid库是一个开放源代码框架 , 用于改善对深度神经网络的解释 。 当前版本包括Miroscope中包含的所有可视化内容 。
使用Lucid非常简单 。该框架可以作为简单的Python软件包安装 。
# Install Lucid!pip install --quiet lucid==0.2.3#!pip install --quiet --upgrade-strategy=only-if-needed git+# %tensorflow_version only works on colab%tensorflow_version 1.x# Importsimport numpy as npimport tensorflow as tfassert tf.__version__.startswith('1')import lucid.modelzoo.vision_models as modelsfrom lucid.misc.io import showimport lucid.optvis.objectives as objectivesimport lucid.optvis.param as paramimport lucid.optvis.render as renderimport lucid.optvis.transform as transform# Let's import a model from the Lucid modelzoo!model = models.InceptionV1()model.load_graphdef()