0 前言
如果你也疑惑:大模型中Attention模块后的模块到底叫全连接网络FCN,多层感知机MLP,还是前馈网络FNN,怎么不同大模型工程文件里对这层的命名都不统一?这个层和线性层有什么区别?这个模块有什么作用?激活函数又出现在大模型中哪里呢?混合专家MoE是怎么实现的?那么这篇文章就是为你而写的。在开始前,先声明,本文的主角是全连接神经网络,在此罗列一下全连接神经网络相关的历史事件:
- 1958年,人类首个可学习的人工神经网络Perception感知机诞生,单组神经元+阶跃激活函数。
- 1960年,维德罗Widrow首次使用Delta学习规则(最小均方误差LMS,最小二乘法)训练感知机,又称感知机学习规则。
- 1969年,Perception因无法解决非线性问题遇冷。
- 1974年,伟博斯Werbos提出误差逆传播算法(Error BackPropagation),以自动微分的反向模型(reverse mode of automatic differentiation)为名提出,尝试改进感知机参数需要人工设定的不足,BP算法前身,但仅仅停留在理论阶段。
- 1981年,伟博斯Werbos提出多层感知机MLP(Multi-Layer Perceptron),突破感知机局限,可解非线性问题,层数一般8层内。请注意,多层感知机的命名由来已久,甚至可追随至19世纪之前。但一般认为1981年伟博斯在神经网络反向传播(BP)算法中具体提出多层感知机模型为正式起点。
- 1986年,Rumelhart,Hinton和Williams联合在Nature杂志重新提出BP(Backpropagation)算法,自动求解MLP最优参数组合。神经网络研究人员(鲁梅尔哈特,辛顿,威廉姆斯-赫,尼尔森)相继提出了使用BP算法训练的多参数线性规划(MLP)的理念,成为后来深度学习的基石。
本文将按照如下结构展开:首先介绍全连接网络FCN并厘清概念,然后围绕FCN的早期形态Perception讲解线性结构局限,再后围绕MLP讲解BP原理和梯度问题,最后提一下大模型中MLP的作用与变体(MoE核心)。
1 全连接网络FCN:神经网络的元老与基础设施
1.1 概念厘清:Transformer Blocks中的全连接模块
本人在AI简史系列文章深度学习时代的前言部分罗列了一个神经网络分类结构,不仅能回答第一组问题,还能回答几乎所有关于网络结构定位的问题。为了行文逻辑方便,再次简单重复一下:在所有非复合的神经网络模型中,根据在一次生成过程中数据流是否有环路而分为
- 前馈网络 (Feedforward Neural Network, FFN)
- 全连接神经网络 (Fully Connected Neural Network, FCNN)
- 线性神经网络 (Linear):输入层+输出层(2层1组神经元),无激活函数或线性激活
- 感知机 (Perception):输入层+输出层(2层1组神经元),有激活函数
- 多层感知机 (Multi-Layer Perceptron, MLP):输入层+隐藏层+输出层(至少两组神经元),输入层无激活,隐层有激活,输出层是否激活看任务
- 卷积神经网络 (Convolutional Neural Network, CNN)
- 全连接神经网络 (Fully Connected Neural Network, FCNN)
- 反馈网络 (Feedback Neural Network):如RNN等
之所以强调非复合结构,是要排除Transformer整体架构这种Iteration的情况,Transformer整体架构本质上还是前馈的,因为在生成一个token的过程中数据不回流;至于要生成几个token,就是复合架构层面的控制逻辑决定的了。言归正传,所以大模型Transformer Block中那个层叫前述三个名字都不错,毕竟只是上下层概念。但如果要选择一个相对精确的,应该叫它多层感知机MLP层。一般来说,大部分大模型的这个模块都是:一个单隐层MLP(输入、隐藏层、输出,2组神经元+1个激活,如下图)。但发展到现在,也出现了一些变体,而这些变体都与一个神奇的结构——GLU门控线性单元——有关,具体见后文。
1.2 全连接神经网络的地位:百搭元老
全连接神经网络的规整、全组合的架构是人类对人工神经网络(ANN)最初的设想,与线性方程组、线性代数、矩阵论等数学思想高度相关。人类历史上第一个可学习的人工神经网络Perception感知机就是一个线性神经网络层+一个阶跃激活函数;第一次寒冬和后续深度神经网络的最初动机也是出于Perception单层的局限,BP反向传播算法也是在这一过程中最初于多层感知机MLP中进行实现的。全连接神经网络的架构简单实用又极富暴力美感,可以说是连接主义的白月光。
此外,在前馈网络>全连接神经网络这个分类层级下,还有一个结构是大模型等许多神经网络的基础,线性神经网络。线性结构是和卷积结构并列的人工神经网络两大功能结构,可以理解为深度学习大厦的砖块,大部分功能网络的基础权重矩阵都是线性神经网络,让我们看看三大神经网络架构中的全连接:
- Transformer:
- 头部词嵌入Embedding层:一个词表维度*嵌入维度的线性神经网络层
- Transformer Blocks堆叠:
- Attention中:QKV(O)投影矩阵
- MLP中:核心就是两三个线性层加激活函数
- 尾部分类器:lm_head(一个shape与embedding相反的线性神经网络层,嵌入维度*词表维度)
- RNN:
- 如LSTM本质就是对多个权重矩阵(线性层)和激活层的巧妙组合
- CNN:
- 虽然CNN的卷积、池化都不是线性层,但也逃脱不了许多情况下用线性层作为尾部分类器。
2 线性网络结构与局限:M-P模型到Perception感知机
在之前的人工智能简史系列中已经提过,作为人类首个可学习的人工神经网络,Perception感知机在1958年的神经科学论文THE PERCEPTRON: A PROBABILISTIC MODEL FOR INFORMATION STORAGE AND ORGANIZATION IN THE BRAIN感知器:大脑信息存储和组织的概率模型 中被提出,其结构受到来自1940s的M-P神经元模型和赫布学习规则的启发,Perception的作者罗森布拉特Rosenblatt本身就是心理学&神经生物学家。这篇经典论文的解读可以看追根溯源|Perceptron 智能感知机 (1957) - irinikanero的文章 - 知乎。
2.1 单层感知机Perception与理想阶跃函数
如图所示为感知机Perception结构,核心是阈值逻辑单元M-P对生物神经元抽象(连接权重[weights],阈值[bias],激活[activate])。请注意,虽然叫神经网络,但可学习的部分不是神经元,而是神经元的连接(正负和大小)。从左往右有如下几个部分:
- 输入层神经元:n个前层神经元的输出 x 1 . . . x n x_1...x_n x1...xn或初始信号
- 神经元连接:输入-输出之间一组可学习权重( w 1 . . . w n w_1...w_n w1...wn)
- 权值大小:生物神经元的连接突触性质和强度不同,其大小代表连接强度
- 权值正负:区分兴奋和抑制
- 输出层
- 累加:膜电位水平积累,由加权和决定
- 偏置:累加阈值,神经元激活释放脉冲与否取决于某一阈值电平
- 激活:脉冲激活,神经元向后释放的脉冲强度是常量,和膜电位积累的水平只有二元关系,所以需要用激活函数f(·)来将分散的加权和映射到一个相对固定的范围内。
总而言之,最早的Perception感知机是一个单学习层结构,输入输出均为0-1布尔(累加后由阶跃实现0-1),用于二分类任务。需要注意的是,这里的阶跃激活函数非常特殊:
- 阶跃函数是神经生物学理想的符合神经元特性(常数输出)的激活函数,但并不是神经网络计算系统(尤其反向传播)中的理想激活,因为其不可导(不连续一定不可导)
- 阶跃函数将输入投射到0或单位1上,是非线性的函数(会在阈值处突然从一个输出变为另一个输出)。但Perception整体还是线性结构。也就是说,要想神经网络可以学习非线性的,激活函数必须在隐藏层中使用,而感知机没有隐藏层,所以根本不可能学习非线性的因素。
2.2 学习原理:感知机学习规则
1960年提出用于训练Perception自动学习的算法,核心是损失(误差)delta的计算方法和权重更新规则(误差修正规则)。即,学习信号(要修正的数值大小和方向)等于神经元期望输出(教师信号,标签)与实际输出之差,代码实现如下:
def _update_weights(self, input_vec, output, label, rate):
'''
参数:
输入数据input_vec,前向传播结果output,应得的正确结果label,学习率rate
流程:
(1)根据output和label求差值,
(2)若为正则说明当前结果过大,要减小权重w和偏置。
'''
delta = output - label
self.weights = map(
lambda (x, w): w - rate * delta * x,
input_vec, self.weights)
self.bias -= rate * delta
可以看到,感知机规则/delta规则和梯度下降的思路是一致的,都是通过计算误差并使用该误差来调整权重。
2.3 局限所在
前面提到,Perception因无法求解非线性问题(异或XOR)而遇冷。其核心原因是Perception是单层的线性层,只能学习一个线性的直线或者超平面决策边界。什么意思?Perception的公式核心是 Σ i = 1 n w i x i + b = t a r g e t \Sigma_{i=1}^nw_ix_i+b=target Σi=1nwix