MIT 深度学习入门
2019 年 2 月 28 日
来自 MIT 6.S191 深度学习入门 的客座文章

MIT 深度学习入门 讲座和实验面向所有人开放,免费提供!

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

MIT 的官方座右铭是“Mens et Manus” - 心智与双手 - 因此,我们也是这个理念的坚定拥护者,这绝非偶然。作为 MIT 深度学习入门课程的组织者和讲师,我们希望开发一门专注于概念基础实践技能的课程,帮助大家理解和实现深度学习算法。我们非常高兴能在这里与大家分享我们精心准备的内容:九个技术讲座和三个 TensorFlow 软件实验,旨在面向各种技术背景的人群,免费开放。
MIT 的深度学习入门课程包括关于最新算法的技术讲座,以及 TensorFlow 的应用软件实验。
Mens:技术讲座。 我们从神经网络的最基本原理开始 - 感知机、全连接网络和反向传播算法;探索循环神经网络和卷积神经网络、生成模型和深度强化学习;并探索现代深度学习研究不断扩展的前沿领域,最后以来自领先行业研究人员的一系列客座讲座结束。所有讲座均免费开放,请查看下面的介绍。
所有讲座都可以在线免费观看 - 点击 这里 观看!
Manus:TensorFlow 软件实验。我们设计了三个开源、交互式 TensorFlow 软件实验,涵盖了 TensorFlow 的基础知识,以及用于音乐生成、计算机视觉、消除人脸识别系统偏差和深度强化学习的循环神经网络模型。这些实验在谷歌的出色 Colaboratory 环境 中运行(您只需要一个谷歌帐户即可开始!),并包含供您完成的“待办事项”代码块。我们指导您如何使用 TensorFlow 的 Keras API 及其新的命令式执行风格定义和训练深度学习模型。

本博客重点介绍了这三个软件实验及其相应的讲座。
通过深入的 TensorFlow 软件实验获得实践经验.

实验 1:TensorFlow 入门和音乐生成

我们非常重视使这门课程和实验尽可能地易于访问。因此,讲座 1 侧重于神经网络基础知识,实验 1 中的第一个模块提供了对 TensorFlow 的清晰介绍,并为即将发布的 TensorFlow 2.0 做好了准备。

我们对 TensorFlow 的介绍练习重点突出了几个关键概念:如何使用数学运算符执行计算、如何定义神经网络模型以及如何使用自动微分通过反向传播训练网络。

在 TensorFlow 入门模块之后,实验 1 的第二个模块直接深入到构建和应用用于音乐生成的循环神经网络(RNN),旨在与关于深度序列建模的讲座 2 相辅相成。您将构建一个能够生成全新的、从未听过的爱尔兰民间音乐的人工智能算法。您可能会问,为什么要用爱尔兰民间音乐?好吧,我们认为这些可爱的跳舞三叶草(由谷歌提供)就是足够的理由。



您将填写代码块以定义 RNN 模型,使用爱尔兰民间歌曲数据集(以 ABC 符号 表示)训练模型,使用学习到的模型生成一首新歌曲,然后播放生成的歌曲,以了解您的模型执行得有多好。请查看我们生成的示例歌曲


实验 2:计算机视觉:消除人脸检测系统的偏差

实验 2 伴随关于 深度计算机视觉深度生成模型 的讲座。第一部分通过在著名的 MNIST 数据集中对手写数字进行分类的卷积神经网络(CNN)示例,提供了对基本神经网络架构实现的持续实践。

这个实验的第二部分更进一步,探索了两个应用深度学习的突出例子:人脸检测和算法偏差。虽然神经网络在识别图像中的人脸方面表现出色,这可能并不令人意外,但最近关于这种人工智能的一些问题存在着隐藏的算法偏差,这一点引起了 广泛关注。事实上,事实证明深度学习本身可以帮助消除这种偏差。

在最近的研究中,我们训练了一个基于变分自编码器 (VAE) 的模型,该模型既学习特定任务(如人脸检测),又学习训练数据的底层结构。该算法反过来利用这种学习到的潜在结构来发现并最小化隐藏的偏差。当应用于人脸检测任务时,与最先进的模型相比,我们的算法降低了分类偏差,并保持了较高的总体准确率。

这个软件实验的灵感来自于这项工作:您实际上将构建这个消除偏差的模型,并评估其在消除人脸检测任务偏差方面的有效性
debiasing model
除了思考算法偏差的问题 - 以及如何消除这些问题 - 您还将获得在使用 VAE方面的实践经验,这是一种在深度学习实现教程中通常不会重点介绍的架构。例如,您将填写定义用于消除偏差模型中 VAE 的损失函数的代码块
def debiasing_loss_func(x, x_pred, y_label, y_logit, z_mu, z_logsigma, kl_weight=0.005):
  # compute loss components
  reconstruction_loss = tf.reduce_mean(tf.keras.losses.MSE(x,x_pred), axis=(1,2)) 
  classification_loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=y_label, logits=y_logit)
  kl_loss = 0.5 * tf.reduce_sum(tf.exp(z_logsigma) + tf.square(z_mu) - 1.0 - z_logsigma, axis=1)
  
  # propogate debiasing gradients only on relevant datapoints
  gradient_mask = tf.cast(tf.equal(y_label, 1), tf.float32)
  
  # define the total debiasing loss as a combination of the three losses
  vae_loss = kl_weight * kl_loss + reconstruction_loss
  total_loss = tf.reduce_mean(classification_loss + gradient_mask * vae_loss)
  return total_loss
重要的是,这种方法 可以应用于除人脸检测之外的任何场景,只要我们希望消除数据中可能存在的失衡现象。

如果您想了解更多信息,请查看这篇论文:Amini, Soleimany, et al., “通过学习到的潜在结构发现和减轻算法偏差”。AAAI/ACM 人工智能、伦理和社会大会,2019 年。

实验 3:无模型强化学习

最后的实验 中,学生探索了与前两个实验中不同的学习问题类别。在 讲座 5 中,学生接触了深度强化学习的基础技术。

与之前专注于监督学习和无监督学习的实验相比,强化学习旨在教导一个代理如何在世界中采取行动以最大化其自身的奖励。Tensorflow 的命令式执行为 RL 提供了一种简化的实现方法,学生可以在实验 3 中从头开始对其实现编程。

我们专注于学习两个任务,包括控制(例如,Cart-Pole)和游戏(例如,Pong)。学生的任务是构建一个模块化的 RL 框架,以使用单个“RL 大脑”学习这两个截然不同的环境。

处理这些基线环境为学生提供了一种快速原型设计新算法的方法,让他们对如何实现 RL 训练过程有了具体的了解,并将其作为模板,在他们最后的项目中继续使用这些想法。

总结

我们要感谢 TensorFlow 团队和我们令人难以置信的 TA 小组,感谢他们对使这门 MIT 课程成为可能的持续支持。MIT 6.S191 软件实验提供了一种快速获得 TensorFlow 实践经验的好方法,方法是通过实现讲座中介绍的最新技术和算法。


下一篇文章
MIT Introduction to Deep Learning

2019 年 2 月 27 日 — 作者:Paige Bailey 和 Anna Revinskaya
TensorFlow 2.0 将包含许多 API 更改,例如重新排序参数、重命名符号以及更改参数的默认值。手动执行所有这些修改将很繁琐且容易出错。为了简化更改,并使您尽可能无缝地过渡到 TF 2.0,TensorFlow 工程团队创建了…