【动手学大语言模型】神经网络启蒙:PyTorch 入门实战

📅 2026/6/26 3:19:14
【动手学大语言模型】神经网络启蒙:PyTorch 入门实战
我设计了一系列的实战任务串联大模型的技术演进脉络并运用大量视觉语言使用数百张插图帮助读者对LLM学习过程中的主要概念和流程建立直观认识降低理解的难度。亲手制作的数百幅全彩插图给你提供极致视觉化呈现让所有的技术难点都可视化、易理解。本文是其中一个章节的节选完整版包含更多实战项目和深度内容。整本书已免费开源欢迎阅读完整版阅读全文神经网络启蒙PyTorch 入门实战本章我们将正式迈入神经网络的大门从零开始构建并训练你的第一个神经网络模型。通过本次任务你将会了解神经网络模型的基本结构、训练流程并掌握如何使用深度学习框架 PyTorch 快速搭建并进行训练一个多参数回归模型。任务背景你是一名程序员。自从上次与小美合作成功教会机器人制作柠檬水后你的无人柠檬水摊位生意渐火。看着账户里稳定增长的收入一个更大胆的想法浮现出来如果只卖经典原味柠檬水市场天花板显而易见但如果能让机器人学会开发多种口味的特调柠檬水必将大大提升产品的吸引力和营收潜力。你尝试在基础柠檬水中加入薄荷叶、百香果、黄瓜片或少许玫瑰盐以创造不同的风味。薄荷带来清凉感黄瓜增加清新的后韵而一点点玫瑰盐则能神奇地提升整体的层次感——但这些配料之间会相互影响如何平衡它们才是真正的艺术。你不断尝试各种配比组合邀请顾客品尝并记录评分逐步优化配方。然而这种试错过程漫长且成本高昂。于是你想如果能训练一个模型自动根据配料配比预测顾客评分问题便可迎刃而解。最少必要知识神经网络概论PyTorch 基础任务鸟瞰本次的任务是训练一个模型根据薄荷叶、百香果、黄瓜片和玫瑰盐的配比预测顾客对柠檬水的评分。预测一杯柠檬水的口感评分看似简单实则受到多种参数的复杂影响。薄荷叶的多少、黄瓜片的厚薄、玫瑰盐的用量……这些细微变量都在悄然塑造着最终的口感体验。面对如此纷繁的因素我们难以通过手动方式去管理每一个参数因为很难精确描述它们与口感评分之间的复杂关系。此时不妨观察人类如何对柠檬水进行评分并尝试从生物神经元的机制中汲取灵感。神经网络在大脑中神经元是信息处理的基本单元。一个神经元会接收外界的刺激信号神经突触根据输入信号的重要性进行加权处理当加权后的信号总和超过某个阈值时神经元被激活产生输出信号。神经元工作过程可分为两步加权求和对多个输入信号进行加权融合点火激活若加权和超过阈值则触发输出。当我们品尝柠檬水并给出评分时大脑中的神经元正在进行类似处理。味觉、嗅觉等感官接收到的特征信息薄荷的清香、黄瓜的清爽、玫瑰盐的风味等被传递至相关神经元经过加权整合最终形成对口感的综合评判即评分。我们可以将上述过程抽象为人工神经元模型。单个神经元的计算可表示为**输出 激活函数(Σ(权重 × 输入) 偏置)**。计算的过程如下图所示其中输入信号权重偏置可视为阈值加权求和σ激活函数输出信号更进一步我们可以将神经元结构表示为数学公式 σ模型结构由大量神经元相互连接形成的系统称为神经网络Neural Network。本次任务我们使用神经网络构建一个用于预测柠檬水评分的模型学习三种配料与评分之间的关系。其模型结构如下本次的任务也是一个简单的多参数回归模型所以我们只它使用一个神经网络层构建模型即可这个神经网络层有3个输入和1个输出。开发神经网络模型和机器学习模型一样通常也遵循以下四个步骤数据准备、模型定义、模型训练与模型评估。下文将依此流程组织内容。在开始之前我们先配置环境避免因为环境不同而导致程序不能复现。环境配置安装依赖!pip install --upgrade dsxllm -i https://pypi.org/simple环境版本from dsxllm.util import show_version show_version()本书愿景 -------------------------------------------------------------- | Info | 《动手学大语言模型》 | -------------------------------------------------------------- | 作者 | 吾辈亦有感 | | 哔站 | https://space.bilibili.com/3546632320715420 | | 定位 | 基于从零构建的理念用实战帮助程序员快速入门大模型。 | | 愿景 | 若让你的AI学习之路走的更容易一点我将倍感荣幸祝好 | -------------------------------------------------------------- 环境信息 --------------------------------------------------- | Python 版本 | PyTorch 版本 | PyTorch Lightning 版本 | --------------------------------------------------- | 3.12.12 | 2.10.0 | 2.6.1 | ---------------------------------------------------数据准备数据集下载如果你想要亲自动手复现运行结果可以点击此链接下载相关数据集。点击下载数据集观察数据加载并预览数据集前5行了解数据结构。# 读取数据 import pandas as pd # 读取训练集数据 train_data_frame pd.read_csv(./dataset/craft_lemonade_train.csv) train_data_frame[:5]薄荷叶黄瓜片玫瑰盐顾客评分091068.60110978.9025374.8033464.1044925.25从输出结果可以看到数据包含四个字段薄荷叶、黄瓜片、玫瑰盐输入特征和 顾客评分目标值。我们需要将每一条训练数据转化成输入特征, 目标值数据对的形式。定义数据加载方法根据文件路径加载csv数据分离出输入特征与对应的目标值标签。def load_data(file_path): # 读取 csv 数据 data_frame pd.read_csv(file_path) # 将DataFrame数据转换为列表格式 features data_frame[[薄荷叶, 黄瓜片, 玫瑰盐]].values.tolist() target_scores data_frame[[顾客评分]].values.tolist() return features, target_scores加载训练集和评估集加载训练数据和评估数据并打印训练集和评估集的样本数量确认数据加载成功。train_features, train_targets load_data(./dataset/craft_lemonade_train.csv) val_features, val_targets load_data(./dataset/craft_lemonade_val.csv) print(f训练数据集样本数量{len(train_features)}) print(f评估数据集样本数量{len(val_features)})训练数据集样本数量800 评估数据集样本数量200模型定义PyTorch 核心概念要构建并训练一个神经网络模型离不开强大的深度学习框架。PyTorch 以其灵活性、Python 友好的设计而广受欢迎它提供了直观的接口来构建和调试复杂神经网络是目前入门人工智能的主流选择之一。为了顺利搭建柠檬水评分预测模型我们需要了解以下 PyTorch 的核心概念概念说明张量TensorPyTorch 中数据的基本单元配料配比、评分等参数都需转换为张量。网络层Layer模型处理数据的基本模块需明确其输入输出维度。模型Model多个网络层的有序堆叠形成完整的神经网络模型。Pytorch详细教程可参考https://www.runoob.com/pytorch/pytorch-basic.html柠檬水评分预测模型的模型结构本次任务我们使用 PyTorch 训练一个预测 3 种配料与顾客评分之间关系的神经网络模型。回顾一下模型结构柠檬水评分预测模型的代码实现定义一个继承自nn.Module的柠檬水评分模型类LemonadeRatingModel这是 PyTorch 中定义神经网络模型的标准方式。import torch import torch.nn as nn # 定义柠檬水评分预测模型,继承自 nn.Module这是PyTorch中定义神经网络的标准方式 class LemonadeRatingModel(nn.Module): def __init__(self): super(LemonadeRatingModel, self).__init__() # 创建一个线性层接受3个输入特征薄荷叶、黄瓜片、玫瑰盐并输出1个值顾客评分 self.rating_predictor_layer nn.Linear(in_features3, out_features1, biasFalse) def forward(self, input_features): # 前向计算定义数据在网络中的流动方式预测顾客评分forward 方法会被自动调用 predicted_rating self.rating_predictor_layer(input_features) return predicted_rating自定义模型时 需要重写模型的__init__和forward方法分别完成模型的初始化和前向计算。__init__()定义模型的参数和层结构创建一个拥有 3 个输入特征1 个输出特征的线性层Linear。forward()定义数据在网络中的流动方式通过前向计算根据输入特征预测顾客评分。线性层在 PyTorch 中线性层Linear Layer是最基础、最常用的神经网络层之一由于它的每一个神经元都接收来自上一层所有神经元的输入信号并与每个输入都有一个独立的权重进行连接所以也称它为“全连接层”。在PyTorch中线性层由torch.nn.Linear类实现。它的主要参数有in_features输入特征的数量即输入的维度out_features输出特征的数量即输出的维度