三句版:
就像你 5 岁一样:
如果您想让计算机告诉您图片中是否有公共汽车,那么如果计算机具有正确的工具,它可能会更轻松。
所以你的公共汽车检测器可能由一个车轮检测器(帮助告诉你它是一辆车)和一个盒子检测器(因为公共汽车的形状像一个大盒子)和一个尺寸检测器(告诉你它太大而不能成为汽车)组成)。这些是隐藏层的三个元素:它们不是原始图像的一部分,它们是您设计用来帮助您识别总线的工具。
如果所有这三个探测器都打开(或者如果它们特别活跃),那么很有可能你面前有一辆公共汽车。
神经网络很有用,因为有很好的工具(如反向传播)可以构建大量检测器并将它们组合在一起。
就像你是一个成年人
前馈神经网络将一系列函数应用于数据。确切的函数将取决于您使用的神经网络:最常见的是,这些函数每个都计算前一层的线性变换,然后是挤压非线性。有时这些函数会做其他事情(比如在您的示例中计算逻辑函数,或者对图像中的相邻像素进行平均)。所以不同层的角色可能取决于正在计算的函数,但我会尽量笼统。
我们称输入向量x, 隐藏层激活h, 和输出激活y. 你有一些功能f映射从x到h和另一个功能g映射从h到y.
所以隐藏层的激活是f(x)网络的输出是g(f(x)).
为什么有两个功能(f和g) 而不是一个?
如果每个函数的复杂程度是有限的,那么g(f(x))可以计算的东西f和g不能单独做。
具有逻辑功能的示例:
例如,如果我们只允许f和g要成为像“AND”、“OR”和“NAND”这样的简单逻辑运算符,那么您不能仅用其中一个来计算“XOR”等其他函数。另一方面,如果我们愿意将这些函数叠加在一起,我们可以计算“XOR”:
第一层功能:
- 确保至少一个元素为“TRUE”(使用 OR)
- 确保它们不都是“真”(使用 NAND)
第二层功能:
网络的输出只是第二个函数的结果。第一层将输入转换为第二层可以使用的东西,以便整个网络可以执行 XOR。
带有图像的示例:
本次演讲的幻灯片 61(也可在此处以单张图像形式提供)显示(一种可视化方式)特定神经网络中的不同隐藏层正在寻找什么。
第一层寻找图像中的短边:这些很容易从原始像素数据中找到,但它们本身对于告诉你是在看一张脸、一辆公共汽车还是一头大象并不是很有用.
下一层组成边缘:如果来自底部隐藏层的边缘以某种方式结合在一起,那么最左边一列中间的一个眼睛检测器可能会打开。很难制作一个如此擅长从原始像素中找到如此具体的东西的单层:用边缘检测器构建眼睛检测器比用原始像素构建眼睛检测器要容易得多。
下一层将眼睛探测器和鼻子探测器组成面部。换句话说,当前一层的眼睛探测器和鼻子探测器以正确的模式打开时,这些就会亮起来。它们非常擅长寻找特定类型的面孔:如果其中一个或多个亮起,那么您的输出层应该报告存在一个面孔。
这很有用,因为人脸检测器很容易用眼睛检测器和鼻子检测器构建,但很难用像素强度构建。
所以每一层都让你离原始像素越来越远,离你的最终目标越来越近(例如人脸检测或公共汽车检测)。
其他各种问题的答案
“为什么输入层中有些层连接到隐藏层而有些没有?”
网络中断开的节点称为“偏置”节点。这里有一个很好的解释。简短的回答是它们就像回归中的截距项。
“图像示例中的“眼睛检测器”图片来自哪里?
我没有仔细检查我链接到的特定图像,但总的来说,这些可视化显示了输入层中最大化相应神经元活动的像素集。因此,如果我们将神经元视为眼睛检测器,这就是神经元认为最像眼睛的图像。人们通常会通过优化(爬山)程序找到这些像素集。
在这篇由世界上最大的神经网络之一的谷歌人员撰写的论文中,他们以这种方式展示了一个“面部检测器”神经元和一个“猫检测器”神经元,以及第二种方式:他们还展示了激活神经网络的实际图像神经元最强(图 3,图 16)。第二种方法很好,因为它显示了网络是多么灵活和非线性——这些高级“检测器”对所有这些图像都很敏感,即使它们在像素级别上看起来并不特别相似。
如果这里有任何不清楚的地方或者您还有其他问题,请告诉我。