神经网络

隐藏层(hidden layer)

/ HID-un LAY-er /

隐藏层,是网络里位于输入与输出之间的任何一层神经元——既不是你喂数据进去的那部分,也不是你读答案出来的那部分。它被叫做「隐藏」,并不是因为它神秘,而仅仅是因为你从不直接看到它的数值;这些数值住在机器内部,做着中间的活儿。如果把网络比作一条流水线,输入层是原材料,输出层是成品,而隐藏层就是中间所有那些「半成品」的工位。

真正的「思考」就发生在隐藏层里。每一层都把前一层找到的模式,组合成更抽象的东西。在一个图像网络里,靠前的隐藏层也许在探测边缘,下一层也许把边缘拼装成眼睛、车轮这样的形状,更靠后的一层也许就认出整张脸或整辆车了。没人告诉这些层要这样分工——它们是在训练中自己发现了这样一种层级。网络的深度,说的就是它有多少个隐藏层;「深度学习」之名,正是源于把许多隐藏层叠在一起。

更多的隐藏层、更多的神经元,给网络更大的容量去表示复杂的模式——但这并非免费。更大的网络需要更多的数据和更多的算力来训练,也更容易过拟合,也就是去死记训练样本里的怪癖,而非学到那条普适的规律。该用多少个隐藏层、把它们造得多宽,是搭建网络时日常要做的平衡之一,没有一条适合所有问题的公式。

一个识别手写数字的网络,有 784 个输入神经元(28×28 图像的每个像素各一个)和 10 个输出神经元(每个数字各一个)。在它们之间,你也许会放两个隐藏层,比方说 128 个和 64 个神经元。你从不直接察看这 192 个隐藏的数值——但正是在隐藏层里,像素悄然变成了笔画,笔画又变成了数字。

隐藏层是那些「中间阶段」,原始输入在这里逐步变成抽象的特征。

隐藏层越多并不会自动越好。超出你的数据和问题所需的那部分,多余的深度主要徒增成本与过拟合的风险——而极深的堆叠还可能因为梯度在回传途中消失而难以训练。

又称
intermediate layer隐藏层隱藏層中间层