人工智能核心公式详解
本文将用深入浅出的方式,带你理解人工智能领域的核心公式。每个公式都配有历史背景、直观解释和实际应用案例。
一、基础数学公式
1. 统计学基础
1.1 均值与方差
这些统计量就像是对一个班级学生的"整体画像":
- 均值就像是班级的"平均水平"
- 方差则反映了班级的"差异程度"
- 标准差告诉我们这些差异的"具体幅度"
# 均值 (Mean)
μ = (1/n) * Σ(xᵢ)
# 方差 (Variance)
σ² = (1/n) * Σ(xᵢ - μ)²
# 标准差 (Standard Deviation)
σ = √[(1/n) * Σ(xᵢ - μ)²]🎓 历史背景:
- 均值概念可追溯到古希腊,亚里士多德就使用过类似概念
- 方差由高斯(Carl Friedrich Gauss)在19世纪初形式化,用于天文观测误差分析
🌟 生活类比: 想象你在调制一杯完美的奶茶:
- 均值就像是配方中的标准糖度
- 方差就像是每次调制时糖度的波动程度
- 标准差则告诉你具体偏甜或偏淡了多少
📊 实际应用:
import numpy as np
# 某班级的考试成绩
scores = [85, 92, 78, 90, 88, 95, 82]
mean_score = np.mean(scores) # 均值
var_score = np.var(scores) # 方差
std_score = np.std(scores) # 标准差
print(f"班级平均分:{mean_score}")
print(f"成绩波动程度:{var_score}")
print(f"典型偏差:{std_score}")2. 概率论基础
2.1 条件概率
条件概率就像是在已知某个条件下,预测另一个事件发生的可能性。
P(A|B) = P(A∩B) / P(B)🎓 历史背景:
- 由英国数学家托马斯·贝叶斯(Thomas Bayes)在18世纪提出
- 最初用于解决赌博问题,现在是机器学习的基础
🌟 生活类比: 想象你在预测明天是否会下雨:
- P(下雨|多云) = 今天多云且明天下雨的概率 / 今天多云的概率 就像是:在看到今天多云的情况下,推测明天下雨的可能性
📊 实际应用:
# 垃圾邮件过滤示例
total_emails = 1000
spam_emails = 200
spam_with_link = 180
P_spam_given_link = (spam_with_link/spam_emails) * (spam_emails/total_emails)2.2 贝叶斯定理
贝叶斯定理是机器学习中的"大脑",它告诉我们如何根据新的证据更新我们的认知。
P(A|B) = P(B|A) * P(A) / P(B)🎓 历史背景:
- 1763年由理查德·普莱斯(Richard Price)在贝叶斯去世后发表
- 最初用于计算上帝存在的概率,现在广泛应用于机器学习
🌟 生活类比: 想象你是一个医生:
- P(疾病|症状) = P(症状|疾病) * P(疾病) / P(症状) 就像是:
- 先验概率P(疾病):这个病的普遍程度
- 似然P(症状|疾病):得这个病会出现这个症状的概率
- 后验概率P(疾病|症状):看到症状后,判断是这个病的概率
二、机器学习核心公式
1. 线性模型
1.1 线性回归
线性回归就像是在点与点之间画一条最合适的直线。
y = wx + b
损失函数(MSE): L = (1/n) * Σ(yᵢ - ŷᵢ)²🎓 历史背景:
- 由高斯和勒让德在19世纪初同时发现
- 最初用于天文学中预测行星运动
🌟 生活类比: 想象你在预测房价:
- x:房子的面积(输入特征)
- w:每平米的价格(权重)
- b:基础设施价值(偏置)
- y:预测的总价
📊 代码示例:
import numpy as np
from sklearn.linear_model import LinearRegression
# 房屋面积数据
X = np.array([[50], [75], [100], [125]]) # 面积
y = np.array([150, 225, 300, 375]) # 实际价格
model = LinearRegression()
model.fit(X, y)
print(f"每平米价格: {model.coef_[0]}")
print(f"基础价格: {model.intercept_}")1.2 逻辑回归
sigmoid(z) = 1 / (1 + e⁻ᶻ)
交叉熵损失: L = -[y*log(p) + (1-y)*log(1-p)]应用:二分类问题的概率预测
2. 梯度下降
w = w - α * ∂L/∂w其中:
- w: 参数
- α: 学习率
- L: 损失函数
- ∂L/∂w: 损失函数对参数的偏导数
三、深度学习关键公式
1. 激活函数
1.1 ReLU (Rectified Linear Unit)
ReLU就像是神经网络中的"过滤器",决定哪些信息可以通过。
f(x) = max(0, x)🎓 历史背景:
- 2010年由Nair和Hinton提出
- 解决了深度网络中的梯度消失问题
🌟 生活类比: 想象ReLU是一个保安:
- 当值大于0时:直接放行
- 当值小于等于0时:拒绝通过 就像是:
- 正面情绪:保持原样传递
- 负面情绪:直接屏蔽掉
1.2 Softmax
Softmax就像是投票系统,将多个选项转换为概率分布。
softmax(x)ᵢ = exp(xᵢ) / Σexp(xⱼ)🎓 历史背景:
- 1959年由Luce首次在选择理论中提出
- 在深度学习中由Bridle (1990)推广应用
🌟 生活类比: 想象你在选择午餐:
- 输入:各种食物的偏好分数
- Softmax:将分数转换为选择每种食物的概率
- 输出:每个选项的概率值之和为1
📊 实际应用:
import numpy as np
# 神经网络输出的原始分数
scores = np.array([2.0, 1.0, 0.1]) # 三个类别的分数
# Softmax转换
def softmax(x):
exp_x = np.exp(x)
return exp_x / np.sum(exp_x)
probabilities = softmax(scores)
print(f"类别概率: {probabilities}") # 和为1的概率分布2. 反向传播
2.1 链式法则
反向传播就像是在寻找"责任人",确定每个参数对最终错误的贡献。
∂L/∂w = ∂L/∂a * ∂a/∂z * ∂z/∂w🎓 历史背景:
- 1986年由Rumelhart、Hinton和Williams正式提出
- 解决了深度神经网络的训练问题
🌟 生活类比: 想象一个工厂生产线:
- 最终产品有缺陷(损失L)
- 需要往回追溯,找出每个工序(w)的责任
- 每个环节都可能对最终结果有影响
📊 实际应用:
import torch
import torch.nn as nn
# 简单神经网络示例
model = nn.Sequential(
nn.Linear(2, 3),
nn.ReLU(),
nn.Linear(3, 1)
)
# 前向传播
x = torch.randn(1, 2)
y = torch.randn(1, 1)
output = model(x)
loss = nn.MSELoss()(output, y)
# 反向传播
loss.backward()
# 现在每个参数的.grad属性包含了它的梯度3. 优化器公式
3.1 随机梯度下降(SGD)
SGD就像是下山的登山者,每次选择一个方向前进一小步。
w = w - α * g🎓 历史背景:
- 1951年由Robbins和Monro首次提出
- 2010年后在深度学习中广泛应用
🌟 生活类比: 想象你在浓雾中下山:
- 当前位置就是参数w
- 每次只能看到脚下的斜率g
- 步子大小就是学习率α
- 目标是到达山谷底部(最小值)
3.2 Adam优化器
Adam就像是一个"智能登山者",能根据地形自动调整步伐。
mₜ = β₁mₜ₋₁ + (1-β₁)gₜ
vₜ = β₂vₜ₋₁ + (1-β₂)gₜ²🎓 历史背景:
- 2014年由Kingma和Ba提出
- 结合了动量和RMSprop的优点
🌟 生活类比: 想象一个老练的登山者:
- 记住过去的方向(动量)
- 适应地形的崎岖程度(自适应学习率)
- 在平坦处大步前进,在陡峭处小心谨慎
📊 代码示例:
import torch.optim as optim
# 创建优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练循环
for epoch in range(100):
optimizer.zero_grad() # 清除旧的梯度
output = model(x)
loss = criterion(output, y)
loss.backward() # 计算梯度
optimizer.step() # 更新参数四、评估指标公式
1. 分类问题
这些指标就像是模型的"成绩单",从不同角度评价模型的表现。
准确率(Accuracy) = (TP + TN) / (TP + TN + FP + FN)
精确率(Precision) = TP / (TP + FP)
召回率(Recall) = TP / (TP + FN)🎓 历史背景:
- 这些概念源自信息检索领域
- 20世纪60年代开始在模式识别中应用
🌟 生活类比: 想象你是一个医生诊断疾病:
- 准确率:总体判断的准确程度
- 精确率:说有病时的可信度
- 召回率:实际患者被找出的比例
📊 实际应用:
from sklearn.metrics import accuracy_score, precision_score, recall_score
# 假设有真实标签和预测结果
y_true = [1, 0, 1, 1, 0, 1]
y_pred = [1, 0, 1, 0, 0, 1]
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
print(f"准确率: {accuracy}")
print(f"精确率: {precision}")
print(f"召回率: {recall}")2. 回归问题
回归指标就像是测量预测值与真实值之间的"距离"。
MSE = (1/n) * Σ(yᵢ - ŷᵢ)² # 均方误差
MAE = (1/n) * Σ|yᵢ - ŷᵢ| # 平均绝对误差
R² = 1 - (Σ(yᵢ - ŷᵢ)²) / (Σ(yᵢ - ȳ)²) # 决定系数🎓 历史背景:
- MSE由勒让德在1805年提出
- R²在20世纪初被统计学家引入
- 现代机器学习中广泛应用
🌟 生活类比: 想象你在练习射箭:
- MSE:考虑每支箭与靶心的距离平方(惩罚大错误)
- MAE:仅考虑箭与靶心的直线距离
- R²:告诉你相比瞎射,你的准确度提升了多少
📊 实际应用:
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
# 假设这是房价预测
y_true = [250000, 300000, 280000, 325000]
y_pred = [245000, 310000, 275000, 320000]
mse = mean_squared_error(y_true, y_pred)
mae = mean_absolute_error(y_true, y_pred)
r2 = r2_score(y_true, y_pred)
print(f"MSE: {mse}") # 误差平方的平均值
print(f"MAE: {mae}") # 误差的平均值
print(f"R²: {r2}") # 模型解释的变异比例五、高级主题公式
1. 注意力机制
注意力机制就像是大脑的"聚光灯",帮助模型关注重要信息。
Attention(Q,K,V) = softmax(QK^T/√d)V🎓 历史背景:
- 2014年由Bahdanau等人在机器翻译中首次提出
- 2017年Transformer架构将其发扬光大
🌟 生活类比: 想象你在看一幅复杂的画:
- Q (Query):你想找什么(比如"人物")
- K (Key):画中的各个元素特征
- V (Value):元素的详细信息
- 注意力分数:你对每个部分的关注度
📊 实际应用:
import torch
import torch.nn as nn
class SimpleAttention(nn.Module):
def __init__(self, dim):
super().__init__()
self.dim = dim
def forward(self, Q, K, V):
# 计算注意力分数
scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(self.dim))
# 应用softmax
attention = torch.softmax(scores, dim=-1)
# 加权求和
output = torch.matmul(attention, V)
return output2. 信息熵
信息熵衡量的是不确定性的程度。
熵: H(X) = -Σ P(x)log₂P(x)
KL散度: KL(P||Q) = Σ P(x)log(P(x)/Q(x))🎓 历史背景:
- 1948年由香农提出信息熵概念
- KL散度由Kullback和Leibler在1951年提出
🌟 生活类比: 想象你在玩20个问题游戏:
- 熵:表示你需要问多少个问题才能猜对
- 高熵:表示很难猜(比如"想任意一个数字")
- 低熵:表示容易猜(比如"想1到2之间的数字")
📊 实际应用:
import numpy as np
def entropy(p):
"""计算信息熵"""
return -np.sum(p * np.log2(p + 1e-12))
# 两种不同的概率分布
p1 = np.array([0.5, 0.5]) # 最大熵(最不确定)
p2 = np.array([0.9, 0.1]) # 低熵(较确定)
print(f"均匀分布的熵: {entropy(p1)}")
print(f"偏斜分布的熵: {entropy(p2)}")六、实践应用
1. 模型正则化
正则化就像是给模型加上"约束",防止它过度自信。
L1正则化: L = Loss + λ*Σ|w|
L2正则化: L = Loss + λ*Σw²🎓 历史背景:
- L1正则化(Lasso)由Tibshirani在1996年提出
- L2正则化(Ridge)由Hoerl和Kennard在1970年提出
🌟 生活类比: 想象你在教小孩写字:
- L1:只能用有限的墨水(使权重稀疏)
- L2:写得太用力要被惩罚(限制权重大小)
- λ:惩罚的程度
2. 学习率调整
学习率调整就像是调整学习的步伐。
步长衰减: α = α₀/(1 + k*t)
指数衰减: α = α₀*β^t🎓 历史背景:
- 学习率调整策略在20世纪90年代开始系统研究
- 现代深度学习中是重要的超参数调整手段
🌟 生活类比: 想象你在学习弹钢琴:
- 初始阶段:大步练习基本功(大学习率)
- 后期阶段:精细调整技巧(小学习率)
- 衰减速度:根据进步程度调整练习强度
学习建议
循序渐进
- 先理解基础概念
- 再学习复杂公式
- 最后掌握实际应用
动手实践
- 实现每个公式
- 观察参数变化
- 理解实际效果
建立联系
- 不同公式间的关系
- 与实际问题的对应
- 适用场景的区别
持续更新
- 关注领域发展
- 学习新的方法
- 优化已有知识
参考资源
经典教材
- 《深度学习》(Goodfellow等)
- 《机器学习》(周志华)
- 《统计学习方法》(李航)
在线课程
- Coursera机器学习课程
- Stanford CS231n
- Fast.ai课程
实践平台
- Kaggle竞赛
- GitHub开源项目
- PyTorch官方教程