什么是神经网络?
神经网络是一层层简单单元,每个单元算一次加权和。堆得够多,它们就能逼近几乎任何函数。下面讲这是怎么做到的。
先动手,再深入阅读
跟着一个神经元算一遍 · 6 分钟数据成了一串数字组成的向量之后,你需要一个东西把这个向量变成预测。神经网络就是这样一台机器——而且它恰好就是每一个现代 LLM 底下的那台。撇开那个大脑的比喻不谈,它远比名字听起来简单:一层层小单元,每个只做小学算术。
神经元:一次加权和
基本单元叫神经元,接收几个输入数字,产出一个输出数字。它分两步做这件事。
第一步,把每个输入乘上一个权重再加起来,另外加上一个叫偏置的数。如果输入是 x1, x2, x3:
sum = w1*x1 + w2*x2 + w3*x3 + b这就是加权和。权重说明每个输入有多重要;偏置把结果整体推高或压低。这些数字——权重和偏置——就是网络学到的东西,权重与偏置讲得更细。
第二步,把这个和送进一个激活函数——一个简单的非线性压缩步骤。先记住这一步,下一节会讲它为什么不是可选项。
一个算加权和的神经元其实就是个线性模型。它能在数据里画出一条直的边界。有用,但有限。
为什么一层不够
一条直线分不开自己绕着自己的数据。经典例子是 XOR:当两个输入里恰好有一个是开的,就把这个点标为正。没有任何一条直线能把正例和负例分开——它们坐在对角上。一个神经元做不到,任何纯线性的神经元堆叠也做不到,因为一串线性步骤叠起来还是会塌回单个线性步骤。
激活函数的价值正体现于此。在层与层之间插进一个非线性函数,塌陷就停了:两层现在能把边界弯起来,圈出直线永远圈不出的区域。没有非线性,一百层的网络和一个神经元一样强。这就是激活函数存在的全部理由。
堆成层
层是一组神经元,它们读同一批输入,各自产出一个输出。把输入向量放进去,这一层吐出一个新向量——每个神经元一个数字。
网络把层按顺序堆起来:
- 输入层就是你的特征向量。
- 隐藏层在中间。每一层读上一层的输出,产出自己的输出。有用的变换发生在这里。
- 输出层产出最终答案——回归是一个数,分类是每个类别一个分数。
「深度学习」一点都不玄乎,就是有好几个隐藏层的神经网络。深度让靠前的层检测简单模式、靠后的层把它们组合成复杂的——边缘组成形状,形状组成物体;字母组成词,词组成意义。把数据从这些层里正向跑一遍,就是前向传播。
为什么这能成立:通用逼近
这一切背后有一个了不起的数学事实。隐藏单元足够多的网络,能以任意精度逼近几乎任何连续函数。给它对的权重,它就能模仿你关心的几乎任何从输入到输出的映射。
两条提醒让这件事不至于变成魔法。它说的是这样的权重存在,不是说它们容易找到——找它们是梯度下降和反向传播的活儿,而且可能失败。另外对浅层网络来说,「足够多的单元」可能意味着一个不切实际的数量,这也是实践中深度(而不只是宽度)重要的部分原因。
尽管如此,这是整个事业的许可证:一个简单、重复的单元,堆起来、调一调,就能表示极其复杂的关系。
从这里到 transformer
再大的东西也都是这个主题的变奏。现代语言模型背后的 transformer,骨子里就是一层层这样的加权和单元,外加一个聪明的机制——自注意力——来决定每个位置该读哪些输入。神经元没有消失,只是变成了几十亿个,被安排成让信息在序列的位置之间流动。如果你理解了一层「加权和加非线性」的单元,你就理解了其他一切所由构成的那个原子。
要点回顾
- 神经元先算输入的加权和再加偏置,然后施加一个非线性激活。
- 单层是线性的、能力有限;层与层之间的非线性激活才让网络能弯折决策边界。
- 网络把输入层、隐藏层、输出层堆起来;「深度」只是指有好几个隐藏层,深度把简单模式搭成复杂模式。
- 通用逼近保证了对的权重存在——但找到它们是另一个难题。
- 同一个加权和单元,一路放大就成了 transformer 和每一个现代 LLM。
下一篇: 权重与偏置 —— 网络真正学到的那些数字。