MIT 深度学习基础:TensorFlow 简介和概述
2019 年 2 月 4 日
客座文章由 Lex Fridman 撰写

MIT 深度学习课程系列(6.S091、6.S093、6.S094)。讲座视频和教程对所有人开放。
作为 MIT 深度学习 系列讲座和 GitHub 教程 的一部分,我们涵盖了使用神经网络解决计算机视觉、自然语言处理、游戏、自动驾驶、机器人技术等领域问题的基础知识。

这篇博文概述了深度学习中的 **7 种架构范式**,并附有每个范式的 TensorFlow 教程链接。它还附有以下关于 深度学习基础 的讲座,作为 MIT 课程 6.S094 的一部分。



深度学习 是表示学习:从数据中自动形成有用的表示。我们如何表示世界,可以使复杂的事物对我们人类和我们构建的机器学习模型变得简单。

我最喜欢的例子是哥白尼在 1543 年发表的 **日心说** 模型,该模型将太阳置于“宇宙”的中心,而不是之前的 **地心说** 模型,该模型将地球置于中心。在最好的情况下,深度学习使我们能够自动化这一步骤,从“特征工程”过程中移除哥白尼(即专家人类)。
日心说(1543 年)与地心说(公元前 6 世纪)。
在高级别上,神经网络要么是编码器,要么是解码器,要么是二者的组合。
  • **编码器** 在原始数据中查找模式,以形成紧凑、有用的表示。
  • **解码器** 从这些表示中生成高分辨率数据。生成的数据要么是新示例,要么是描述性知识。

其余的是一些巧妙的方法,可以帮助我们有效地处理视觉信息、语言、音频(#1-6),甚至根据这些信息和偶尔的奖励在一个世界中行动(#7)。以下是总体视图: 在以下部分中,我将简要介绍每种 7 种架构范式,并附有每个范式的说明性 TensorFlow 教程链接。在最后看到“超越基础知识”部分,该部分讨论了一些不完全属于这七个类别中的令人兴奋的深度学习领域。

1. 前馈神经网络 (FFNN)

前馈神经网络 FFNN,其历史可以追溯到 1940 年代,只是没有循环的网络。数据从输入到输出单次通过,没有任何对之前数据的“状态记忆”。从技术上讲,深度学习中的大多数网络都可以被认为是 FFNN,但通常“FFNN”指的是其最简单的变体:密集连接的多层感知器 (MLP)。
密集编码器用于将输入上的已压缩数字集映射到预测:分类(离散)或回归(连续)。
TensorFlow 教程:查看我们 深度学习基础教程 的第 1 部分,了解 FFNN 用于波士顿房价预测(以回归问题形式提出)的示例。
网络学习时,训练集和验证集上的误差。

2. 卷积神经网络 (CNN)

卷积神经网络 CNN(也称为 ConvNet)是前馈神经网络,它使用空间不变性技巧来有效地学习局部模式,最常见的是在图像中。空间不变性意味着图像左上角的猫耳朵与图像右下角的猫耳朵具有相同的特征。CNN 在空间上共享权重,以更有效地检测猫耳朵和其他模式。
它们不只使用密集连接层,而是使用卷积层(卷积编码器)。这些网络用于图像分类、目标检测、视频动作识别以及任何在其结构中具有一定空间不变性的数据(例如,语音音频)。
TensorFlow 教程:查看我们 深度学习基础教程 的第 2 部分,了解 CNN 用于对 MNIST 数据集中手写数字进行分类的示例,并通过一个美丽的梦幻般的转变来测试我们的分类器,在该转变中,我们对来自数据集之外的高分辨率生成的、变形的手写数字进行测试。
变形、生成的手写数字(左)的分类预测(右)。

3. 循环神经网络 (RNN)

循环神经网络 RNN 是具有循环的网络,因此具有“状态记忆”。它们可以在时间上展开,成为前馈网络,其中权重是共享的。正如 CNN 在“空间”上共享权重一样,RNN 在“时间”上共享权重。这使它们能够处理和有效地表示序列数据中的模式。
许多 RNN 模块的变体已被开发出来,包括 LSTMGRU,以帮助学习更长序列中的模式。应用包括自然语言建模、语音识别、语音生成等。
TensorFlow 教程:循环神经网络可能难以训练,但同时使我们能够对序列数据进行一些有趣且强大的建模。关于 使用 TensorFlow 进行文本生成 的教程是我最喜欢的教程之一,因为它在很少的代码行中完成了一项非凡的任务:以逐字符的方式生成合理的文本。
来源:使用 TensorFlow 进行文本生成

4. 编码器-解码器架构

编码器-解码器架构 前 3 部分介绍的 FFNN、CNN 和 RNN 只是使用密集编码器、卷积编码器或循环编码器(分别)进行预测的网络。这些编码器可以根据我们尝试形成有用表示的原始数据的类型进行组合或切换。“编码器-解码器”架构是一个更高级别的概念,它以编码步骤为基础,而不是进行预测,而是通过解码步骤对压缩表示进行上采样,以生成高维输出。
请注意,编码器和解码器可能彼此非常不同。例如,图像字幕网络可能具有卷积编码器(用于图像输入)和循环解码器(用于自然语言输出)。应用包括语义分割、机器翻译等。
TensorFlow 教程:查看我们关于 驾驶场景分割 的教程,该教程演示了用于自动驾驶感知问题的最先进的分割网络。
教程:使用 TensorFlow 进行驾驶场景分割

5. 自编码器

自编码器 自编码器是“无监督学习”的一种更简单的形式,它采用了编码器-解码器架构,并学习生成输入数据的精确副本。由于编码表示远小于输入数据,因此网络被迫学习如何形成最有意义的表示。
由于地面真实数据来自输入数据,因此不需要人工干预。换句话说,它是自监督的。应用包括无监督嵌入、图像去噪等。但最重要的是,“表示学习”的基本思想是下一节中生成模型以及所有深度学习的核心。
TensorFlow 教程:您可以在此 TensorFlow Keras 教程 中探索自编码器在 MNIST 数据集上(1)去噪输入数据和(2)形成嵌入的能力。

6. 生成对抗网络 (GAN)

生成对抗网络 (GAN) GAN 是一个训练网络的框架,该网络针对从特定表示生成新的逼真样本进行了优化。在最简单的形式中,训练过程涉及两个网络。一个网络称为“生成器”,生成新的数据实例,试图欺骗另一个网络“判别器”,该网络将图像分类为真实或虚假。
在过去几年中,已经提出了许多 GAN 的变体和改进,包括从特定类别生成图像的能力、将图像从一个域映射到另一个域的能力,以及生成的图像真实性的惊人提高。请参见关于 深度学习最新技术 的讲座,该讲座涉及并描述了 GAN 的快速发展。例如,请看一下由 BigGAN (arXiv 论文) 从单个类别(毒蝇伞)生成的三個样本。
BigGAN 生成的图像。
TensorFlow 教程:查看关于 条件 GANDCGAN 的教程,了解 GAN 的早期变体的示例。随着课程的进行,我们将在我们的 GitHub 上发布关于 GAN 最新技术的教程。

7. 深度强化学习 (Deep RL)

强化学习 (RL) 是一个教导智能体如何在世界上行动以最大化奖励的框架。当学习由神经网络完成时,我们称之为深度强化学习 (Deep RL)。RL 框架有三种类型:基于策略的、基于价值的和基于模型的。区别在于神经网络的任务是什么。请参阅 深度 RL 简介 MIT 课程 6.S091 的讲座以了解更多信息。深度 RL 允许我们在需要做出决策序列的模拟或现实世界环境中应用神经网络。这包括游戏、机器人、神经架构搜索等等。
教程: 我们的 DeepTraffic 环境提供了一个 教程代码示例,用于在浏览器中快速探索、训练和评估深度 RL 智能体,我们很快将在 GitHub 上发布支持 GPU 训练的 TensorFlow 教程。
MIT DeepTraffic:深度强化学习竞赛

超越基础

深度学习中的几个重要概念在上面的架构中没有直接体现。例如 变分自动编码器 (VAE),在 LSTM/GRU神经图灵机 上下文中“记忆”的概念,胶囊网络,以及一般来说,注意、迁移学习、元学习的概念,以及 RL 中基于模型的、基于价值的、基于策略的方法和行动者-评论者方法的区别。
最后,许多深度学习系统以复杂的方式组合这些架构,以从多模态数据中联合学习或联合学习解决多个任务。许多这些概念在课程的其他讲座中有所介绍,更多内容即将推出。

个人而言,正如我在评论中所说,能有机会在 MIT 教书让我感到谦卑,并且成为 AI 和 TensorFlow 社区的一部分让我感到兴奋。感谢大家在过去几年中的支持和精彩的讨论。这是一段不可思议的旅程。如果您对我在未来讲座中应该涵盖的主题有任何建议,请告诉我(在 TwitterLinkedIn 上)。

下一篇
MIT Deep Learning Basics: Introduction and Overview with TensorFlow

Lex Fridman 客座撰写

作为 MIT 深度学习 系列讲座和 GitHub 教程 的一部分,我们正在介绍使用神经网络解决计算机视觉、自然语言处理、游戏、自动驾驶、机器人以及更多领域中问题的基础知识。

这篇博文概述了深度学习中的 **7 种架构范式**,并提供了每个范式的 TensorFlow 教程链接。它将…