神经网络与深度学习笔记 Day1:从深度学习基础到 PyTorch 张量实战@ZZHow(ZZHow1024)
参考课程:
【黑马程序员AI大模型《神经网络与深度学习》全套视频课程,涵盖Pytorch深度学习框架、BP神经网络、CNN图像分类算法及RNN文本生成算法】
[https://www.bilibili.com/video/BV1c5yrBcEEX]
01 深度学习知识框架介绍
- 机器学习在处理图像和文本数据方面,能力较弱。
- CNN,卷积神经网络 (Convolutional Neural Network)
- 结构
- 卷积层
- 池化层
- 全连接层
- 案例:图像分类,CIFAR10 数据集
- 进阶:CV,计算机视觉 (Computer Vision)
- 结构
- RNN,循环神经网络 (Recurrent NN)
- 结构
- 词嵌入层
- 循环网络层
- 全连接层
- 案例:歌词 AI 生成器
- 进阶:NLP,自然语言处理 (Natural Language Processing)
- 结构
- ANN,人工神经网络 (Artificial neural network)
- 结构
- 输入层 → 1 层
- 隐藏层 → N 层
- 输出层 → 1 层
- 结构
- 标量,向量,矢量 → 张量:Tensor
- 工具
- PyTorch(当前主流)
- TensorFlow(趋于过时)
02 深度学习简介
图:深度学习发展脉络
- 机器学习是实现人工智能的一种途径。
- 深度学习是机器学习的一个子集,也就是说深度学习是实现机器学习的一种方法。
- 深度学习是机器学习中一种基于对数据进行特征学习的算法。
- 深度学习是基于人工神经网络,深度是指网络中使用多层,每层都通过非线性变换处理数据,并逐渐提取出更复杂、更抽象的特征。
图:深度学习与机器学习对比
- 传统机器学习算法依赖人工设计特征,并进行特征提取;而深度学习方法不需要人工,而是依赖算法自动提取特征。
- 深度学习通过模仿人脑的神经网络来处理和分析复杂的数据,从大量数据中自动提取复杂特征。这也是深度学习被看做黑盒子,可解释性差的原因。
- 深度学习尤其擅长处理高维数据,如图像、语音和文本。
03 深度学习的特点
- 多层非线性变换:深度学习模型由多个层次组成,每一层都应用非线性激活函数对输入数据进行变换。较低的层级通常捕捉到简单的特征(如边缘、颜色等),而更高的层级则可以识别更复杂的模式(如物体或面部识别)。
- 自动特征提取:与传统机器学习算法不同,深度学习能够自动从原始数据中学习到有用的特征,而不需要人工特征工程。这使得深度学习在许多领域中表现出色。
- 大数据和计算能力:深度学习模型通常需要大量的标注数据和强大的计算资源(如 GPU)来进行训练。大数据和高性能计算使得深度学习在图像识别、自然语言处理等领域取得了显著突破。
- 可解释性差:深度学习模型内部的运作机制相对不透明,被称为“黑箱”,这意味着理解模型为什么做出特定决策可能会比较困难。这对某些应用场景来说是一个挑战。
04 深度学习常用模型介绍
- 卷积神经网络 (Convolutional Neural Networks, CNN)
- 结构
- 输入层
- 隐藏层
- 卷积层
- 池化层
- 全连接层
- 输出层
- 应用:图像 → CV
- 主要用于图像处理任务,如图像分类、目标检测、图像分割等。
- 特点是使用卷积层来自动提取图像中的局部特征,并通过池化层减少参数数量,提高计算效率。
- 结构
- 循环神经网络 (Recurrent Neural Networks, RNN)
- 应用:文本 → NLP
- 适用于处理序列数据,例如自然语言处理 (NLP)、语音识别等。
- RNN 具有记忆功能,可以处理输入数据的时间依赖性,但标准 RNN 难以捕捉长期依赖关系。
- 自编码器 (Autoencoders)
- 结构:由编码器 (Encoder) 和解码器 (Decoder) 两部分组成,中间是一个低维的隐层表示(瓶颈层)。
- 编码器把输入压缩成低维特征,解码器再尝试从该特征还原原始输入,训练目标是让输出尽可能接近输入。
- 应用:数据降维与特征压缩、图像去噪、异常检测、数据补全等。
- 常见变体:去噪自编码器 (Denoising AE)、变分自编码器 (VAE),后者可用于图像生成。
- 生成对抗网络 (Generative Adversarial Networks, GAN)
- 包含两个子网络:生成器和判别器。生成器负责创建看起来真实的假样本,而判别器则试图区分真假样本。
- GAN 广泛应用于图像生成、视频合成等领域。
- Transformer
- 主要用于自然语言处理 (NLP) 任务,尤其是机器翻译、文本生成等。
- Transformer 摒弃了传统的递归结构,采用自注意机制 (self-attention),使得它能够并行处理整个句子的信息,在机器翻译、文本摘要等任务中表现出色。
- 深度强化学习 (Deep Reinforcement Learning, DRL)
- 将深度神经网络与强化学习结合,用神经网络拟合策略或价值函数,适用于游戏博弈、机器人控制、自动驾驶决策等场景。
- 图神经网络 (GNN, Graph Neural Network)
- 面向图结构数据(节点与边),通过消息传递聚合邻居信息,常用于社交网络分析、分子性质预测、知识图谱推理等。
05 深度学习应用场景介绍
- 计算机视觉 (Computer Vision)
- 图像分类:将图像分为不同的类别。常用于人脸识别、物体检测等。
- 自动标注社交媒体照片、医疗影像中的病变检测。
- 目标检测 (Object Detection) :在图像或视频中定位并分类多个对象。
- 自动驾驶中的行人检测、监控视频中的入侵检测。
- 面部识别:通过分析面部特征进行身份验证或分类。
- 手机解锁、安防监控系统。
- 图像生成:基于输入生成新的图像,如风格转换、图像超分辨率等。
- 艺术风格迁移、老旧照片修复。
- 图像分类:将图像分为不同的类别。常用于人脸识别、物体检测等。
- 自然语言处理 (Natural Language Processing, NLP)
- 机器翻译:使用深度学习模型将一种语言的文本自动翻译成另一种语言。
- Google 翻译、实时语音翻译。
- 情感分析:分析文本中的情感倾向,如正面、负面或中性。
- 社交媒体监控、产品评论分析。
- 文本生成:生成符合语法和语义的自然语言文本。
- 自动写作助手、新闻生成。
- 语音识别:将语音转化为文字。
- 智能助手(如 Siri、Alexa)、自动字幕生成。
- 聊天机器人(Chatbot):通过深度学习理解用户输入并生成合理的回应。
- 客服机器人、虚拟助手(如 GPT 类模型)。
- 机器翻译:使用深度学习模型将一种语言的文本自动翻译成另一种语言。
- 推荐系统 (Recommendation Systems)
- 电影、音乐推荐:根据用户历史的评分和行为,推荐相关的电影、音乐或电视剧。
- Netflix、 Spotify 的个性化推荐。
- 电商推荐:根据用户的购买历史和浏览习惯推荐商品。
- 亚马逊、淘宝的商品推荐系统。
- 社交媒体推荐:分析用户的社交行为,推荐相关内容或朋友。
- Facebook、 Instagram 的内容推荐。
- 电影、音乐推荐:根据用户历史的评分和行为,推荐相关的电影、音乐或电视剧。
- 多模态大模型
06 深度学习发展史介绍
- 人工智能发展历史
- 符号主义(20 世纪 50-70)
- 专家系统占主导
- 1950:图灵设计国际象棋程序
- 1962:IBM Arthur Samuel 的跳棋程序战胜人类高手(人工智能第一次浪潮)
- 统计主义(20 世纪 80-2000)
- 主要用统计模型解决问题
- 1993:Vapnik 提出 SVM
- 1997:IBM 深蓝战胜卡斯帕罗夫(人工智能第二次浪潮)
- 神经网络(21 世纪初期)
- 神经网络、深度学习流派
- 2012:AlexNet 深度学习的开山之作
- 2016:Google AlphaGO 战胜李世石(人工智能第三次浪潮)
- 大规模预训练模型(2017-至今)
- 大规模预训练模型
- 2017:自然语言处理 NLP 的 Transformer 框架出现
- 2018:Bert 和 GPT 的出现
- 2022:ChatGPT 的出现,进入到大模型 AIGC 发展的阶段
- 符号主义(20 世纪 50-70)
- 深度学习发展历史
- 早期探索(1940s-1980s)
- 20 世纪 40 年代:沃尔特•皮茨 (Walter Pitts) 和沃伦• 麦卡洛克 (Warren McCulloch) 等开始模仿生物神经系统来构建计算模型,如 McCulloch-Pitts神经元。
- 1957:弗兰克•罗森布拉特 (Frank Rosenblatt) 提出感知器概念,能够进行简单的二分类任务。
- 1960 年代末:出现了多层感知器 (MLP),但当时由于计算能力和数据量的限制,这些模型的应用受到很大限制。
- 挑战与瓶颈(1980s-1990s)
- 1986:David Rumelhart等人发表了关于反向传播 (Backpropagation, BP) 算法的研究成果,使得多层神经网络能够通过梯度下降优化参数,解决复杂的非线性问题。
- 由于计算资源的限制以及对复杂数据 (如图像和语音) 的处理能力较弱,深度学习未能广泛应用。
- 复兴与突破(2000s-2010s)
- 2006:杰弗里•辛顿 (Geoffrey Hinton) 和其团队提出了深度置信网络 (DBN),标志着深度学习的复兴。
- 2012:亚历克斯•克里泽夫斯基 (Alex Krizhevsky) 等人设计的卷积神经网络 (CNN),AlexNet 在 ImageNet 图像识别挑战赛中取得巨大成功。
- 爆发期(2016-至今)
- 2016:Google AlphaGO 战胜李世石(人工智能第三次浪潮)。
- 2017:自然语言处理 NLP 的 Transformer 框架出现。
- 2018:Bert 和 GPT 的出现。
- 2022:ChatGPT 的出现,进入到大模型 AIGC 发展的阶段。
- 早期探索(1940s-1980s)
07 PyTorch 框架简介
PyTorch Foundation
- 什么是 PyTorch
- PyTorch 一个基于 Python 语言的深度学习框架,它将数据封装成张量 (Tensor) 来进行处理。
- PyTorch 提供了灵活且高效的工具,用于构建、训练和部署机器学习和深度学习模型。
- PyTorch 广泛应用于学术研究和工业界,特别是在计算机视觉、自然语言处理、强化学习等领域。
- PyTorch 的安装:
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple - PyTorch 特点
- 类似于 NumPy 的张量计算
- 自动微分系统
- 深度学习库
- 动态计算图
- GPU 加速(CUDA 支持)
- 支持多种应用场景
- 跨平台支持
- PyTorch 发展历史
- 2016 年 Facebook 正式发布了 PyTorch 的第一个版本。
- 2018 年 PyTorch 发布了 1.0 版本,标志着其正式进入生产级应用阶段。
08 PyTorch 张量基本创建方式
- 什么是张量
- PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中,张量以“类”的形式封装起来,对张量的一些运算、处理的方法被封装在类中。
- PyTorch 张量与 NumPy 数组类似,但 PyTorch 的张量具有 GPU 加速的能力(通过 CUDA),这使得深度学习模型能够高效地在 GPU 上运行。
- PyTorch 提供了对张量的强大支持,可以进行高效的数值计算、矩阵操作、自动求导等。
- 张量是 PyTorch 中的核心数据抽象,PyTorch 支持各种张量子类型。通常地,一维张量称为向量/矢量 (vector),二维张量称为矩阵 (matrix)。
- 张量基本创建方式
torch.tensor根据指定数据创建张量。torch.Tensor根据形状创建张量, 其也可用来创建指定数据的张量。torch.IntTensor、torch.FloatTensor、torch.DoubleTensor创建指定类型的张量。
- 案例演示:01_tensor_creation_basics.py(张量的基本创建方式)
最小可运行示例:
importtorch# 根据数据创建张量a=torch.tensor([[1,2],[3,4]])print(a)print(a.shape,a.dtype)# 根据形状创建张量(未初始化)b=torch.Tensor(2,3)print(b.shape)# 指定类型创建c=torch.FloatTensor([[1,2],[3,4]])print(c.dtype)输出示例:
tensor([[1, 2], [3, 4]]) torch.Size([2, 2]) torch.int64 torch.Size([2, 3]) torch.float3209 PyTorch 创建线性和随机张量
- 创建线性和随机张量
torch.arange()和torch.linspace()创建线性张量。torch.random.initial_seed()和torch.random.manual_seed()随机种子设置。torch.rand/randn()创建随机浮点类型张量。torch.randint(low, high, size=())创建随机整数类型张量。
- 案例演示:02_linear_random_tensors.py(创建线性和随机张量)
最小可运行示例:
importtorch# 线性张量print(torch.arange(0,10,2))print(torch.linspace(0,10,5))# 随机种子固定,保证结果可复现torch.manual_seed(42)print(torch.rand(2,3))print(torch.randn(2,3))print(torch.randint(0,10,(2,3)))输出示例:
tensor([0, 2, 4, 6, 8]) tensor([ 0.0000, 2.5000, 5.0000, 7.5000, 10.0000]) tensor([[0.8823, 0.9150, 0.3829], [0.9593, 0.3904, 0.6009]]) tensor([[ 0.3367, 0.1288, 0.2345], [ 0.2303, -1.1229, -0.1863]]) tensor([[2, 7, 6], [4, 3, 7]])10 PyTorch 创建全 0、1、指定值张量
- 创建 0、1、指定值张量
torch.ones和torch.ones_like创建全 1 张量torch.zeros和torch.zeros_like创建全 0 张量torch.full和torch.full_like创建全为指定值张量最小可运行示例:
importtorchprint(torch.ones(2,3))print(torch.zeros(2,3))print(torch.full((2,3),7))x=torch.tensor([[1,2],[3,4]])print(torch.ones_like(x))print(torch.zeros_like(x))print(torch.full_like(x,9))输出示例:
tensor([[1., 1., 1.], [1., 1., 1.]]) tensor([[0., 0., 0.], [0., 0., 0.]]) tensor([[7, 7, 7], [7, 7, 7]]) tensor([[1, 1], [1, 1]]) tensor([[0, 0], [0, 0]]) tensor([[9, 9], [9, 9]])11 PyTorch 元素类型转换
- 张量元素类型转换
- data.type(torch.DoubleTensor)
- data.half / double / float / short / int / long()
- 案例演示:04_tensor_type_conversion.py(张量类型转换)
最小可运行示例:
importtorch data=torch.tensor([1,2,3,4])print(data.dtype)# 使用 type() 转换print(data.type(torch.DoubleTensor).dtype)# 使用快捷方法转换print(data.float().dtype)print(data.double().dtype)print(data.half().dtype)print(data.short().dtype)print(data.int().dtype)print(data.long().dtype)输出示例:
torch.int64 torch.float64 torch.float32 torch.float64 torch.float16 torch.int16 torch.int32 torch.int6412 小结
- 深度学习是机器学习的一个子集,核心是基于人工神经网络、通过多层非线性变换自动提取特征,尤其擅长处理图像、语音、文本等高维数据。
- 常见模型各有分工:CNN 处理图像、RNN 处理序列、Transformer 主导 NLP、GAN 与 VAE 负责生成、GNN 面向图结构数据。
- PyTorch 以张量 (Tensor) 为核心数据抽象,兼具 NumPy 式的张量计算、自动微分、动态计算图与 GPU 加速能力,是当前主流的深度学习框架。
- 张量的创建方式可归纳为四类:按数据创建(
torch.tensor)、按形状创建(torch.Tensor)、按常量创建(ones/zeros/full及其_like版本)、按类型创建与转换(FloatTensor、type()、float()等)。 - 固定随机种子(
torch.manual_seed)是保证实验结果可复现的基本习惯。
13 下一步学习计划
- 张量运算与形状变换:掌握
reshape/view/squeeze/unsqueeze/transpose,理解广播机制。 - 张量与 NumPy 互操作:熟悉
numpy()与from_numpy(),注意二者共享内存的细节。 - 自动微分:学习
requires_grad、backward()与计算图,为后续训练打基础。 - GPU 加速:了解
device与.to(device),把张量搬到 CUDA 上运行。 - 动手实践:用 PyTorch 实现线性回归与手写数字识别 (MNIST),完整走一遍「数据加载 → 模型定义 → 训练 → 评估」流程。