麻省理工学院 6.S191:深度学习入门
2018 年 4 月 5 日
客座文章来自 麻省理工学院 6.S191 深度学习入门

麻省理工学院 6.S191:深度学习入门是一门入门课程,正式提供给 麻省理工学院,并在 课程网站 上开源。该课程包含一系列关于神经网络基础知识的基础讲座,以及其在序列建模、计算机视觉、生成模型和强化学习中的应用。

麻省理工学院 6.S191:麻省理工学院关于深度学习算法及其应用的官方入门课程
麻省理工学院 6.S191 不仅仅是另一个关于深度学习的讲座系列。在设计课程时,我们希望做更多的事情。我们希望为我们的观众提供实践技能,使他们能够去实践自己的深度学习模型,将从本课程中获得的知识应用到他们感兴趣和激励他们的问题中。

因此,我们转向了 TensorFlow。我们设计了两个基于 TensorFlow 的软件实验室,重点介绍使用循环神经网络进行音乐生成和医学图像中的气胸检测,以补充课程讲座。TensorFlow 实验室为学生提供了一个机会,让他们将基础知识应用到两个有趣且相关的难题中,并建立和完善他们的 TensorFlow 技能。

6.S191 中的材料旨在尽可能地易于访问,适合来自不同背景和经验水平的人,无论他们是在麻省理工学院社区还是其他地方。

因此,第一个实验室引导学生学习 TensorFlow 基础知识 - 建立和执行计算图、会话以及深度学习中常用的操作。本介绍还强调了 TensorFlow 的一些最新和最棒的功能:TensorFlow 的命令式版本,急切模式

这些背景知识使学生能够在 TensorFlow 中构建模型,用于音乐生成和胸部 X 光片中的气胸检测。

. . .

使用循环神经网络生成音乐

循环神经网络 (RNN) 广泛用于序列建模和预测任务,从股票趋势到自然语言处理到心电图等医学信号。查看我们关于 深度序列建模 的课程讲座,了解有关 RNN 及其应用的一些背景知识。

RNN 非常适合音乐生成,因为它们可以捕获时间序列数据(如音乐)中的时间依赖性。在这个第一个实验室中,学生将学习如何对音乐文件数据集进行编码、在 TensorFlow 中定义 RNN 模型以及从模型中采样以生成以前从未听过的全新音乐。

用于音乐生成的 RNN 模型

该数据集是一组流行歌曲片段,这些片段被编码为向量格式,以馈送到 RNN 模型中。数据处理完成后,下一步是使用这组流行歌曲片段定义和训练 RNN 模型。

该模型基于单个长短期记忆 (LSTM) 单元,其中状态向量跟踪连续音符之间的时间依赖关系。在每个时间步长,一系列先前音符被馈送到单元,并且 LSTM 中最后一个单元的最终输出被馈送到一个全连接层。因此,我们可以输出在给定所有先前时间步长的音符时,下一个时间步长 t 处下一个音符的概率分布。我们在下面的图中可视化了这个过程
预测序列中下一个音乐音符的可能性
我们为学生提供了一个构建 RNN 模型和定义适当计算图的指南。同样,我们设计这些实验室是为了让所有有兴趣的人都能访问,无论他们之前是否使用过 TensorFlow,所以他们有指导是有原因的!

该实验室首先介绍了设置相关超参数、定义占位符变量以及初始化 RNN 模型的权重。然后,学生们开始定义自己的函数 RNN(input_vec, weights, biases),该函数接收相应的输入变量并定义计算图。

该实验室允许学生尝试不同的损失函数、优化方案甚至准确度指标
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
    logits, labels))
optimizer = tf.train.AdamOptimizer(learning_rate)
true_note = tf.argmax(output_vec,1)  # identify the correct note
pred_note = tf.argmax(prediction, 1) # identify the predicted note
correct_pred = tf.equal(pred_note, true_note) # compare!

生成新音乐

建立和训练 RNN 的乐趣并没有随着结束!毕竟,这个实验室是关于音乐生成的 - 剩下的就是使用这个 RNN 来真正创作新音乐。

该实验室指导学生如何将训练后的模型馈送到种子中(毕竟,如果没有东西开始,它就无法预测任何新音符!),然后使用训练后的 RNN 迭代地预测每个后续音符。这相当于从 RNN 在每个时间步长输出的下一个音符的概率分布中进行随机采样,然后使用这些样本生成一首新歌曲。

和以前一样,我们为学生提供了一个指导结构来完成这项工作,但定义采样完全取决于他们。

为了提供生成歌曲的采样(双关语意),我们继续训练了一个模型,然后从中采样以生成新歌曲。听一下用训练后的模型生成的示例



生成更逼真的音乐

正如人们可能可以推断的那样,这里还有很多改进的空间。我们希望学生围绕我们提供的框架进行尝试,通过调整超参数、在分布上设置先验以及扩充数据集来生成更动听的音乐。

. . .

从人类 X 光扫描中检测气胸

我们的第二个实验室补充了关于 深度学习用于计算机视觉 的讲座。学生有机会在真实医学图像数据集上使用卷积神经网络 (CNN) 进行疾病检测。具体而言,学生使用一组真实的胸部 X 光片来构建一个模型,以检测和分类预测患有气胸的扫描结果,气胸是一种当肺部和胸壁之间的空间中存在异常空气量时发生的疾病。

我们将这个实验室提升到分类的下一步,尝试解决可解释性的概念 - 哪些量化指标反映了网络为什么以及如何将特定类别标签分配给给定图像?为了解决这个问题,学生们实现了一种称为 类别激活映射 的特征可视化技术,以了解区分性图像区域。

数据集

我们使用 ChestXRay 数据集的一个子集,顾名思义,它是一个大型的胸部 X 光片数据集,并带有相应的诊断标签。

由于这是一个真实数据集,因此它相当嘈杂。我们希望让学生使用真实数据,以便他们了解数据整理和标注中的一些挑战,尤其是在计算机视觉的背景下。
dataset images with and without pneumothorax

CNN 模型

学生们使用一个预训练的 CNN 来执行气胸检测任务;我们不是将其隐藏在黑盒中,而是提供了模型的代码以及训练模型的调用,并期望学生将其作为实验室的一部分进行操作。此外,该实验室还介绍了实现成本和预测函数以及 CNN 分类器的评估指标(如 ROC 曲线)。
用于气胸检测的 CNN 架构

使用 CAM 解释 CNN 输出

这个实验室的主要重点是实现类别激活映射 (CAM) 并使用它们来解释 CNN 的输出。虽然有很多资源可用于图像分类的 CNN 模型,但我们发现很少有指导性介绍或实验室也解决了可解释性的概念。重要的是帮助学生认识和理解深度学习的一些局限性,无论是在这个实验室还是在整个课程中。将 CAM 纳入实验室也为学生提供了一个机会,让他们阅读并真正实现来自最新研究成果的结果 - 我们认为这非常棒。

为了提供一些背景知识,CAM 是一种可视化 CNN 在其最后一个卷积层中“关注”的图像区域的方法。请注意,CAM 可视化与在最终全连接层之前具有全局平均池化层的体系结构有关,其中我们输出最后一个卷积层中每个单元的特征图的空间平均值。

CAM 有效地突出显示了输入图像中对分配特定类别标签最重要的部分。直观地说,某个类别的 CAM 是基于每个特征图在将图像分配到该类别的重要性。CNN 中的特征图反映了图像中特定视觉模式(即特征)的存在。我们通过对特征图进行加权求和来计算 CAM,权重是该特征图的重要性。因此,输入图像中在重要通道中具有较大激活的区域在 CAM 中获得了更大的权重,因此显得更“热”。

在我们气胸分类器的背景下,这相当于突出显示 X 光片中对检测(或未检测)气胸最重要的像素。
在最终特征图上进行类别激活映射
为了使这更具体,设F_k表示 CNN 最后一个卷积层中的第k个特征图,设w_k表示第k个特征图与全连接层之间的权重。分配气胸的类别激活映射由以下公式给出
对得到的类别激活映射进行上采样后,我们可以可视化胸部 X 光片中与气胸检测最相关的区域(至少从网络的角度来看)。

该实验室介绍了从头到尾在 Tensorflow 中计算和可视化 CAM 的过程。学生必须定义一个函数来提取特征图和权重以进行 CAM 计算
(feature_maps, dense_weights) = extract_features_weights(model)
学生将从最后一个卷积层中提取的 feature_maps 和从全连接层中提取的 dense_weights 馈送到用于计算 CAM 的函数中,然后定义上采样过程。
胸部 X 光片肺炎判断的类激活图
CAM 可以被可视化为输入图像上的热图,如图中肺炎阳性的胸部 X 光片所示。

也许这次实验最好的部分是它引发的讨论。学生们被留下来思考模型错误分类输入 X 光片的实例,这些实例中 CAM 的样子,以及可以对模型进行哪些更改来解决这些局限性。构建“查看”神经网络内部的算法激发了学生的好奇心,让他们体会了机器学习中可解释性的重要性。

. . .

这些实验是 MIT 6.S191 独有的,由课程组专门为本课程设计。如果您有兴趣参与并参与 MIT 6.S191,您可以关注我们的 Twitter @mitdeeplearning,观看我们的 课程视频,并查看我们的 实验。非常感谢我们优秀的赞助商、我们出色的课程组和 Google 团队使这个课程和博客成为可能!
免费在线观看所有 MIT 6.S191 课程!
下一篇
MIT 6.S191: Introduction to Deep Learning

MIT 6.S191 深度学习导论 客座撰稿

MIT 6.S191:深度学习导论是一门在 麻省理工学院 正式提供的入门课程,并在 课程网站 上开源。该课程包括一系列关于神经网络基础知识、其在序列建模、计算机视觉、生成模型和强化学习方面的应用的基础讲座。MIT 6.S…