机器学习
-
人工智能(Artificial Intelligence)属于计算机科学的分支,是让各类机器载体上模拟并拥有类似生物的智能,让机器可以进行感知、学习、识别、推理等行为的计算机科学技术。
-
机器学习(Machine Learning,ML)是实现人工智能的核心方法,传统的机器学习主要关注如何学习一个预测模型,将数据表示为特征后将特征输入到预测模型,并输出预测结果。现代机器学习则主要由神经网络来完成。
-
神经网络(Neural Network,NN)是机器学习的一个分支,主要关注如何使用神经网络来学习数据的表示,并使用这些表示来完成各种通用类型的任务。
-
深度学习(Deep Learning,DL)是神经网络的一个分支,主要关注如何使用层数较多的且参数较多的神经网络来学习数据。
下面是一个只用加减乘除实现求某数平方根的示例:
# 我们要求解的数
target_number = 17.0
# 初始化权重(我们的猜测值)
weight = 1
# 超参数
learning_rate = 0.01 # 学习率
epochs = 1000 # 训练轮数
# 训练过程
for epoch in range(epochs):
# 前向传播: 计算预测值 (weight * weight 应该等于 target_number)
prediction = weight * weight
# 计算损失: 均方误差 (MSE)
loss = (prediction - target_number) ** 2
# 反向传播: 计算损失(loss)对权重(weight)的梯度
gradient = 2 * (prediction - target_number) * 2 * weight
# 更新权重 (梯度下降)
weight = weight - learning_rate * gradient
# 最终结果
print(f"\n训练后的平方根估计值: {weight}")
print(f"误差: {target_number - prediction}")
上述代码展示了机器学习的核心概念:
- 学习率:控制每次参数更新的步长
- 前向传播:使用当前权重进行预测
- 损失计算:衡量预测值与目标值之间的差距
- 反向传播:计算损失对权重的梯度
- 梯度下降:沿梯度方向更新权重,最小化损失函数
这个简单的例子虽然不是典型的神经网络,但展示了机器学习的基本原理:通过不断调整参数,使模型输出逐渐接近目标值。
不同的接近方法即为不同的算法,要注意,没有一个算法是万能的,需要根据具体问题选择合适的算法。“All models are wrong, but some are useful.”?
如果数据较大,则必须要对数据做各种预处理,数据的质量决定了模型的上限。这也是一个非常耗费时间且需要经验的工作。
现代深度学习往往需要大量的算力,如何高效的利用算力,也是一个方向,例如分布式训练、混合精度训练、模型剪枝、知识蒸馏、高效微调等。
机器学习步骤
数据清洗
数据决定着模型预测的上界,模型则是尽可能达到这个上界。
特征工程
好的特征工程就像是衡量人的体重是否超标时,构造出BMI。这种数据直觉是AI较难替代的。
模型参数调节
至少从抽象层面上了解每个模型的工作原理,才能理解参数的含义。
模型融合
实在没有 办法提升性能,可以试试多模型融合,模型是可以互补的。
PyTorch
在我们这个时代有许多优秀的机器学习框架,其中pytorch明显优于其他框架。
许多著名的深度学习模型和框架都是基于 PyTorch(Torch)二次开发的。例如:YOLOv11、Transformers (Hugging Face)、Stable Diffusion等。还有一些开源项目使用pytorch构建出可用的多模态大模型。上限非常高。
PyTorch 可以利用计算加速设备(例如GPU、NPU),为了达成这一目的,PyTorch 的安装会绑定对应的cuda版本,PyTorch 使用 cuda 的接口来操作底层硬件。
CUDA:NVIDIA 专为自家 GPU 设计的 C++ 并行计算框架,其运行依赖于 NVIDIA 显卡驱动程序。它允许开发者利用 GPU 强大的并行计算能力加速各类计算密集型任务。能把复杂的计算任务(比如矩阵乘法、神经网络运算)翻译成GPU能理解的指令。没有CUDA,GPU只能处理简单的图形渲染,无法参与深度学习的计算。
cuDNN