神经网络为何不进行乘法运算:从感知机到SwiGLU
尽管神经网络在生成文本和图像方面取得了成功,但它们在根本上并不对输入数据进行乘法运算。在感知机中,输入经历线性组合:它们被加权并求和。基本神经元的公式为:$$h = \sigma(\sum w_i x_i + b)$$,其中没有两个变量 $x_1 \cdot x_2$ 的乘积。
对于像计算成本(价格 × 数量)这样的任务,网络通过记忆模式来近似结果,但并不直接计算乘法。添加隐藏层保留了这一原则:在每个阶段,只涉及加权信号的和。
在第一层:
$$h_1^{(1)} = x_1 w_{11}^{(1)} + x_2 w_{12}^{(1)}$$
$$h_2^{(1)} = x_1 w_{21}^{(1)} + x_2 w_{22}^{(1)}$$
在第二层:
$$h_1^{(2)} = h_1^{(1)} w_{11}^{(2)} + h_2^{(1)} w_{12}^{(2)}$$
代入显示:$x_1$ 和 $x_2$ 保持在和中,它们的乘积不会出现。权重在层之间相乘,但输入不会。
变通方法:平方和预计算
工程师添加预乘值($x_1 x_2$)或平方到输入中,以模拟乘法。一个学校公式允许表达乘积:
$$x y = \frac{1}{2} \left( (x+y)^2 - x^2 - y^2 \right)$$
这将乘法简化为加法、减法和平方。一个假设的激活函数 $f(z) = z^2$ 可能有所帮助,但标准的ReLU、Sigmoid和Tanh不提供平方的非线性。
实践表明:这样的变通方法在演示中有效,但在具有许多输入的实际任务中,它们需要提前知道必要的组合。
- 预计算:将 $x_1 x_2$ 作为输入馈送。
- 平方:使用 $(x+y)^2$、$x^2$、$y^2$。
- 局限性:不可扩展,损害了通用逼近器的性质。
Transformer突破:GLU变体的作用
Transformer架构(2017年)引入了注意力机制,但关键一步是在2020年用门控线性单元(GLU)替换激活函数(Noam Shazeer,“GLU变体改进Transformer”)。ReGLU、GEGLU和SwiGLU在收敛性上优于ReLU。
| 激活函数 | 误差 |
|-----------|--------|
| ReLU | 2.45 |
| ReGLU | 2.32 |
| GEGLU | 2.25 |
| SwiGLU | 2.24 |
SwiGLU因速度而更受青睐。公式:
$$\text{SwiGLU}(x) = \text{Swish}(x W + b) \odot (x V + c)$$
这里 $\odot$ 是两个投影的逐元素乘法。这引入了二次依赖,允许建模 $x_1 x_2$ 而无需变通方法。SwiGLU用于现代LLM的FFN块中。
机制:
- 输入 $x$ 被投影到两个路径:$xW + b$ 和 $xV + c$。
- 第一个通过Swish($\text{Swish}(z) = z \sigma(\beta z)$)。
- 逐元素乘法。
对模型的实际影响
SwiGLU改进了训练,但并未使AI成为精确的计算器。生成模型是概率性的:“2×2=4”是一个可能的标记,而不是推导。对于复杂计算,LLM在沙箱中委托给Python代码。
- GLU的优点:更好的收敛性,非线性建模。
- 缺点:网络并不总是自动找到必要的权重。
- 需要大量数据。
- 概率性质持续存在。
未来的集成(Transformer中的WebAssembly)将允许在模型内运行原生代码。
关键要点
- 经典感知机对输入进行加法但不进行乘法运算。
- GLU(SwiGLU)引入了投影的逐元素乘法以实现二次依赖。
- 门控单元在现代Transformer中取代ReLU,将误差降低5–10%。
- 对于精确计算,LLM使用外部工具。
— Editorial Team
暂无评论。