【动手学大语言模型】神经网络启蒙:PyTorch 入门实战
2026/6/26 3:19:04 网站建设 项目流程

我设计了一系列的实战任务串联大模型的技术演进脉络,并运用大量视觉语言,使用数百张插图帮助读者对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.60
110978.90
25374.80
33464.10
44925.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 的核心概念:

概念说明
张量(Tensor)PyTorch 中数据的基本单元,配料配比、评分等参数都需转换为张量。
网络层(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_features=3, out_features=1, bias=False) 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:输出特征的数量(即输出的维度)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询