在人工智能技术不断颠覆我们生活的今天,从基础算法到前沿模型,背后的数学原理与工程智慧如同精密齿轮,推动着整个领域不断向前。本系列文章将以通俗易懂的方式,带您揭开从神经网络基础理论到最前沿大模型技术的神秘面纱,尽量让复杂的算法原理变得简单、易于理解。
1、万能近似定理
只需具备单层隐含层和有限个神经单元,就能以任意精度拟合任意复杂度的函数。这是个已经被证明的定理。下面我们试着解释一下为什么神经网络(理论上)可以拟合任何函数?
琪琪是个对毛绒娃娃情有独钟的小女孩。一天,她在游乐园邂逅了一台模样奇特的机器,机器上写着:“神奇娃娃机:投入硬币,它会给你应得的娃娃” 。这台机器构造简单,只有一个投币口和一个娃娃出口,不见任何按钮。
琪琪好奇地投入硬币并仔细观察输出结果,她发现了一个规律:当投入 1 枚硬币时,出来 2 个娃娃;投入 2 枚硬币,出来 4 个娃娃;投入 3 枚硬币,出来 6 个娃娃;投入 4 枚硬币,出来 8 个娃娃 。输出和投入呈现出完美的线性关系,用公式表示就是 y = 2x 。琪琪兴奋地在图上画出这些点,果然,所有点都精准地落在一条直线上。
然而,事情并没有一直这么简单。琪琪继续尝试投入更多硬币,当投到 7 枚硬币时,输出的娃娃数不再是 2x 的结果,而是 16 个,偏离了原本的直线。她察觉到机器似乎改变了规则,于是重新拟合 x=7、8 的数据点,发现新的规律是 y = 4x - 12 。再尝试投入 9 枚和 10 枚硬币,得到的娃娃数分别是 24 和 28,也都符合这个新公式。
可当投入 11 枚硬币时,输出的娃娃数变成了 26 个,开始递减,机器的变化还在继续。琪琪再次努力拟合这组新数据,得出公式 y = -2x + 48 。她惊叹道:“原来这台机器不是遵循一条直线规律,而是由三段不同的线拼接起来的!” 她将整段输入输出情况画在图上,清晰地标注出:第 1 段,y = 2x (x = 16);第 2 段,y = 4x - 12 (x = 710);第 3 段,y = -2x + 48 (x = 11~13) 。如图:
面对这复杂的分段规律,琪琪不禁思考:“这些分段的线性规律,能不能用一个统一的方式建模出来呢?” 她想起学过的 “神经网络”,其中有一种结构叫多层感知机(MLP) 。多层感知机的工作方式是,每一层先进行线性变换 Wx + b,接着接上一个非线性函数比如 ReLU(z) = max(0, z),ReLU函数在输入大于0时返回输入值,小于等于0时返回0。然后多层组合起来,就能表达出复杂的非线性函数。琪琪决定尝试用多层感知机来学习机器的输入输出关系。一个简单的三段函数,可以通过如下的神经网络结构实现:输入 x 经过第一层线性变换,再经过 ReLU 激活函数,最后通过第二层线性组合,得到输出 y 。每一个线性变换能够学习一段直线,ReLU 则控制在哪一段激活。这些部分巧妙组合起来,就能近似拟合多段线性函数。如图:
“我原以为娃娃机只是一个简单的线性机器,没想到它内部藏着一个由多段规则拼接而成的复杂系统。而神经网络就像一套万能的积木,无论多复杂的形状,只要给我足够多的积木块(神经元),我就能把它拼出来。我也可以用这个方法,自己造一个和它一模一样的模拟器了!”
从一个简单的线性关系,到一个分段函数,再到一个能够统一建模的神经网络,琪琪的探索之旅,生动地展示了从简单到复杂的认知过程,也让我们直观地理解了神经网络为何如此强大——它能通过组合简单的非线性片段,去逼近世界上任何奇妙而复杂的映射关系。
2、线性回归和最小二乘法
前面的琪琪遇到线性关系是理想情况,现实中的映射关系在局部都不会是理想的线性关系,那我们如何写出局部近似线性关系线性方程了,这里我们介绍的一种最简单的算法,通过最小化平方损失函数(在几何上体现的就是欧式几何中的举例最小),也就是最小二乘法的标准方法来实现线性回归,在近似线性的数据中找到最佳拟合线性方程。效果如下图:
这里计算的核心是平方损失函数,它量化了预测值与真实值之间的差异,损失函数如下: L(w) = Σ(y_i - ŷ_i)² = Σ(y_i - (w·x_i + b))² 其中y_i 是真实值,ŷ_i 是预测值,w 是权重向量,b 是偏置项。最小二乘法的解析解和梯度下降法两种方法。解析解(闭式解)通过对损失函数求导并令导数为零得到,w = (n·Σxy - Σx·Σy) / (n·Σx² - (Σx)²),b = (Σy - w·Σx) / n 解析法是精确解,一步计算,但对于大数据集计算成本高。梯度下降法,迭代更新参数w = w - α·∂L/∂w,b = b - α·∂L/∂b ,其中∂L/∂w = -2Σx(y - ŷ),∂L/∂b = -2Σ(y - ŷ),这个方法适用于大数据集,需要选择学习率α。
代码示例如下:
// 初始化数据
let data = {
x: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
y: [1.2, 1.9, 3.2, 3.8, 5.1, 5.8, 7.4, 7.9, 9.0, 10.2]
};
// 使用解析解拟合线性回归
function fitWithAnalyticSolution() {
const n = data.x.length;
let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;
for (let i = 0; i < n; i++) {
sumX += data.x[i];
sumY += data.y[i];
sumXY += data.x[i] * data.y[i];
sumX2 += data.x[i] * data.x[i];
}
const w = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);
const b = (sumY - w * sumX) / n;
displayResults('解析解', w, b);
}
// 使用梯度下降拟合线性回归
function fitWithGradientDescent() {
// 初始化参数
let w = 0;
let b = 0;
// 超参数
const learningRate = 0.01;
const epochs = 100;
const n = data.x.length;
let lossHistory = [];
// 梯度下降迭代
for (let epoch = 0; epoch < epochs; epoch++) {
let dw = 0;
let db = 0;
let loss = 0;
// 计算梯度和损失
for (let i = 0; i < n; i++) {
const yPred = w * data.x[i] + b;
const error = yPred - data.y[i];
dw += data.x[i] * error;
db += error;
loss += error * error;
}
// 更新参数
w = w - learningRate * (2 * dw) / n;
b = b - learningRate * (2 * db) / n;
// 记录损失
lossHistory.push(loss / n);
}
displayResults('梯度下降', w, b);
}
平方损失函数具有凸函数特性,能保证全局最小值的存在,其可微性便于梯度下降等优化算法的应用,平方项设计还会放大较大误差的惩罚力度,且隐含了误差服从正态分布的高斯噪声假设,计算过程也兼具简便性。
线性回归适用于输入输出关系近似线性、特征与目标变量存在线性相关性的场景,常用于构建简单可解释的模型或作为复杂模型的基准,也适用于特征工程后的数据建模。当数据呈现明显非线性模式(如正弦波等)时,线性回归会因高偏差失效,此时需采用多项式回归、决策树或神经网络等非线性模型。
3、广义线性回归-逻辑回归
逻辑回归 (logistic regression ),是一种广义线性回归(generalized linear regression model),逻辑回归与线性回归虽同属回归模型框架,但在应用场景与数学原理上存在本质区别。线性回归用于连续值预测(如房价、销量),输出为无界连续值,通过最小化平方损失拟合直线,决策边界为明确的线性阈值;而逻辑回归针对二分类问题(如考试通过预测、疾病诊断),借助 sigmoid 函数将线性预测转化为 [0,1] 区间的概率值,内置 0.5 概率阈值作为决策边界,通过最大化对数似然优化参数,对异常值的鲁棒性更强。从损失函数看,线性回归采用均方误差(MSE)衡量预测距离,逻辑回归则用对数损失(Log Loss)强化概率预测的准确性。
逻辑回归作为广义线性模型的典型代表,通过伯努利分布假设(响应变量为二分类)、线性预测器(η = w・x + b)及 Logit 连接函数(ln (p/(1-p)) = η),将线性模型扩展至分类领域。其核心优势在于输出具有概率解释性,决策边界符合分类任务特性,统计学基础(最大似然估计)更适配离散型目标变量。简言之,连续值预测首选线性回归,而分类问题(尤其是二分类)则更适合逻辑回归,后者通过概率建模与非线性变换,实现了线性模型在分类场景中的有效延伸。
4、总结
本文从琪琪与神奇娃娃机的故事出发,阐释了神经网络的万能近似定理,展示了神经网络如何通过组合简单非线性片段逼近复杂映射关系。随后引入线性回归与最小二乘法,介绍了通过最小化平方损失函数在近似线性数据中寻找最佳拟合方程的方法,包括解析解和梯度下降法两种实现方式,并说明了平方损失函数的特性与线性回归的适用场景。最后对比逻辑回归与线性回归,揭示二者在应用场景、数学原理、损失函数等方面的本质差异,强调逻辑回归在分类任务中的独特优势。
下一篇文章,我们将深入神经网络的代码世界,带您从零开始完成一个完整的神经网络实现,手把手教分解一个完整神经网络,敬请期待!