识别数字容易描述,写出规则却很难
查看原文 00:04一个手写的 3,即便像素与另一个 3 差别很大,我们仍然能认出来。要写出覆盖这些变化的明确规则,却困难得多。视频构建了一个能学习这项任务的数学对象:一个行为由数值参数控制的分层网络。本讲解释它的结构;参数如何学出来留待下一讲。
视频开头说程序输出一个“0 到 10 之间”的数字。而在后面实际展示的网络中,十个输出明确标为 0 到 9。前者保留原话;下文对输出的解释以画面中的示例为准。观看 00:49。
这个例子用两层隐藏层连接 784 个输入和十个输出
查看原文 02:43在这个例子中,可以先把神经元想成存放激活值的单元:数值越高,看起来就越亮。一张 28×28 的灰度图像提供 784 个输入神经元,每个对应一个像素:黑色为 0,白色为 1。最后一层有十个神经元,分别代表 0 到 9;它们的激活值表示网络认为图像与各数字的符合程度。最大的输出就是它的选择。
两者之间是两层隐藏层,每层 16 个神经元。讲述者选择两层是为了引出后面的解释,选择 16 是因为屏幕放得下;这只是示例,并非适用于所有网络的配方。这里的激活值在 0 到 1 之间,这个范围也属于本例。大脑为相互连接的神经元提供了宽泛的灵感,并不意味着这张图复现了生物机制。
图中的示例包含 784 个输入神经元、各有 16 个神经元的两层隐藏层,以及十个数字输出。
在已经训练好的示例中,像素亮度在第一层隐藏层产生一种激活模式,再影响下一层,最终得到十个输出激活值。一个模式如何决定下一个模式,正是核心问题。观看 02:43。
边缘和环是有用的期待,不是已学到内容的证据
查看原文 05:32分层结构的一个动机是:复杂图案可能由简单图案组合而成。9 有一个上方的环和一条线,8 则有两个环。我们可以期待第二个隐藏层的某个神经元对各种形状的上方环产生响应,再由输出层组合这些部分来区分数字。
但这只是把问题往前推了一步:网络又如何识别环?一个直觉是,小边缘可以组成环或较长的笔画。一个 9 可能先激活几个边缘检测器,再激活上方环和竖线的检测器,最后点亮对应数字的输出。语音也可以想象成类似的抽象层级:声音组成音节,音节组成词,进而组成短语和更抽象的思想。
视频用小边缘组合环与笔画,说明一种可能的分解方式。
这是对隐藏层的一种期待,并不证明这个训练好的网络真的如此工作。 讲述者明确把这个需要实际检验的问题留到讨论训练之后。观看 05:32。
正负权重让神经元能够对某种图案敏感
查看原文 08:21为了让这种期待更具体,考虑一个可能对特定区域的明亮短边缘产生响应的神经元。每条来自输入像素的连接都有一个权重,即与该像素激活值相乘的数字。把所有乘积加起来,就是加权和:w1 × a1 + w2 × a2 + ... + wn × an。其中每个 a 是一个输入激活值,每个 w 是对应的权重。
把大部分权重设为零,只给目标区域正权重:该区域的像素越亮,和就越大。再给周围像素负权重:周围越亮,和就越小。于是中间明亮、四周较暗时,加权和较高。动画用绿色表示正权重、红色表示负权重;决定计算的是数值,而不是“边缘”这样的名称。
加权和通过正负连接组合像素激活值;高亮区域示意希望检测的边缘。
这是人为设计的例子,展示可调整的权重可能表达什么,并不能证明某个训练后的神经元检测到了这条边缘。观看 08:21。
偏置先移动响应位置,Sigmoid 再压缩数值
查看原文 10:14加权和可以是任意实数,而本例希望激活值在 0 到 1 之间。Sigmoid 函数又称逻辑曲线:它把很大的负输入映射到接近 0,把很大的正输入映射到接近 1,中间平滑上升。
偏置是在进入 Sigmoid 之前加上的另一个可调整数字。例如,加上 −10 会移动响应位置,使加权和约为 10 时处于 Sigmoid 曲线的中点:要得到较高激活值,就需要更强的证据。这是平滑过渡,不是硬性的开关。简写为 激活值 = sigmoid(加权和 + 偏置)。权重决定哪些图案会作出贡献,偏置则移动需要多少证据才能显著激活的位置。
加入 −10 的偏置后,Sigmoid 的响应位置移向加权和为 10 的地方。
数千个可调整数字决定示例网络的行为
查看原文 11:36第一层隐藏层的 16 个神经元分别连接全部 784 个输入。仅这一层转换就有 784 × 16 个权重和 16 个偏置,也就是每个接收神经元一个偏置。后续层之间也有各自的权重和偏置,整个选定网络合计接近 13,000 个参数。
这里所说的学习,是让计算机为这些数字找到能解决任务的设置;视频尚未解释具体过程。不过,想象亲手设置它们,有助于理解机器内部的计算。网络行为出乎预期时,查看权重和偏置可以提供实验起点;即使网络有效,研究它们也能检验我们对网络学到什么的假设。
仅第一隐藏层,每个神经元就有 784 个权重和一个偏置。
一个矩阵可以一次表示整层的转换
查看原文 13:26为每个神经元单独写加权和很快就会变得繁琐。把前一层的激活值排成一列,称为向量;把连接权重排成一个矩阵,每一行包含通向下一层某个神经元的权重。矩阵乘以激活值向量,就能一起算出这些加权和。
再把接收神经元的偏置排成另一个向量,加到乘积上,最后对结果的每个分量分别应用 Sigmoid。紧凑写法是 下一层激活值 = sigmoid(Wa + b)。它把同样的逐个计算打包成一次层间转换,也让代码可以使用经过优化的矩阵运算库。
矩阵表达式汇集一层的加权和与偏置,再对每个结果应用 Sigmoid。
整个网络是一个参数需要通过学习确定的函数
查看原文 15:172017 年的对话为 Sigmoid 和 ReLU 提供历史语境
查看原文 17:03结尾处,讲述者与 Lisha Lee 对话,介绍她曾从事深度学习理论方面的博士研究,当时在 Amplify Partners 工作。讲述者说,这家公司为视频提供了部分资金。他们谈到早期网络对 Sigmoid 的使用,以及神经元激活或不激活的宽泛生物学类比。
在这段 2017 年的对话中,他们说 Sigmoid 在某些深层网络中较难训练,而 ReLU 在极深的网络中表现得很好。ReLU 全称是修正线性单元:ReLU(a) = max(0, a)。负输入变成零,正输入原样通过。Lee 将激活与不激活的类比称为一种简化。这段历史讨论不意味着 Sigmoid 如今没有用途,也不意味着所有神经网络的激活值都以 1 为上界。观看 17:03。