掘金 人工智能 8小时前
深度学习入门(1)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文是作者开启AI系统学习的开篇,计划用半年业余时间,从深度学习入手,逐步深入到大模型、AI工程应用和产品实践。首先推荐《深度学习详解》一书,配合李宏毅老师的视频课程,构建深度学习的认知框架,并通过实践作业强化理解。文章简要介绍了神经网络的训练流程,包括数据准备、模型定义、损失函数和优化算法。最后通过两个PyTorch极简Demo,展示了线性层和带偏置项的线性层的实现方式和计算过程,为读者快速上手PyTorch打下基础。

📚**学习计划**:作者计划用半年时间,系统学习AI,内容涵盖深度学习、大模型、AI工程应用以及产品实践,目标是利用AI能力开发出一款产品并推向市场。

🛠️**技术栈**:深度学习的学习将从《深度学习详解》这本书开始,并配合李宏毅老师的视频课程。实践方面,使用Python作为开发语言,PyTorch作为深度学习框架。

⚙️**神经网络训练流程**:神经网络的训练主要分为两个阶段:数据加载和训练。数据包括训练数据、验证数据和测试数据。训练过程涉及定义网络模型、选择损失函数和优化算法。

💡**PyTorch极简Demo**:通过两个PyTorch Demo展示了线性层的实现。Demo1演示了如何将模型和输入张量移动到GPU上进行前向计算,以及线性层中矩阵相乘的实际计算方式。Demo2则展示了如何在线性层中加入偏置项,并手动设置权重和偏置值进行计算。

开启新的篇章,做AI时代的同行者

第一篇是一个简单的热身,假定读者也有一定的线性代数和机器学习基础。

背景

计划用半年的业余时间,系统的学习AI

子项内容时间
深度学习常见的深度算法、优化2个月
大模型常见的大模型使用、部署、调优1个月
PE、agentAI偏工程的应用开发技术1个月
产品实践尝试用AI能力做出一款产品,推向市场2个月

第一本书

先从深度学习开始,通读一本书《深度学习详解》,配合李宏毅老师的视频课程,建立深度学习的认知框架。

实践

以《深度学习详解》的作业为参考,进行实践,逐步强化对深度学习的理解

深度学习前置知识

开发语言 python

框架 pytorch

神经网络训练流程

整个神经网络的训练流程如上图,往大了划分,就两个阶段,一是加载数据,而是训练:

    Load Data (准备数据&加载数据)
    Training(训练)

极简Demo

两行代码讲下torch使用

pytorch环境配置的教程网上有很多,不再赘述了

demo 1,只有一个线性层的model

import torchprint(torch.__version__)print(torch.cuda.is_available())# 将模型移到 GPUmodel = torch.nn.Linear(5, 1).to("cuda:0")# 将输入张量 x 也移到 GPUx = torch.randn(5).to("cuda:0")  # 修改这里,将 x 移到 GPU# 进行前向计算y = model(x)print(y)print(x.shape)model.weight.shape# 输出# 2.6.0+cu124# True# tensor([0.4126], device='cuda:0', grad_fn=<ViewBackward0>)# torch.Size([5])# torch.Size([1, 5])

注意,torch.nn.Linear(5, 1)实际上声明了一个(1,5)的矩阵,而实际计算时会进行转置再右乘,这和我们直观的理解为左乘是不一样的。

XinputWTX_{input} * W^{T}

如果输入是一个样本5个特征,则矩阵相乘的情况是:

[11111][11111]\begin{bmatrix} 1 & 1 & 1 & 1 & 1\end{bmatrix} * \begin{bmatrix} 1\\1\\1\\1\\1\\\end{bmatrix}

输出是1个值:[5]

这样的好处是,方便批处理。如果输入是2样本,即X(2 * 5),则矩阵相乘的情况是:

[1111122222][11111]\begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\2 & 2 & 2 & 2 & 2 \\\end{bmatrix} * \begin{bmatrix} 1\\1\\1\\1\\1\\\end{bmatrix}

输出的结果是[5,10]T[5,10]^T (2行一列)

demo 2 加上bias

nn.Linear实际再后面还有个bias(偏移):

y=XinputWT+biasy = X_{input} * W^{T} + bias

看个demo

import torchx = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])model = torch.nn.Linear(5, 1)# 手动设置权重和偏置值(固定值)model.weight.data = torch.tensor([[0.1, 0.2, 0.3, 0.4, 0.5]])  # 权重 W,形状 [1, 5]model.bias.data = torch.tensor([0.5])  # 偏置项 b,形状 [1]# 前向计算y = model(x)  # 结果 y 的 shape: [1, 1]print(y)

实际的计算是

y=(10.1)+(20.2)+(30.3)+(40.4)+(50.5)+0.5=5.5y=(1⋅0.1)+(2⋅0.2)+(3⋅0.3)+(4⋅0.4)+(5⋅0.5)+0.5=5.5

实际一个线性层的权重参数会比较多,而一个深度学习模型也远不止一个线性层,而是有多个先形成ReLU层,加上其他的池化操作像搭积木一样堆叠而成。

如果某个线性层input是32个参数,output是64个参数,则整个链路如下(注意,实际在torch框架中输入input X是行向量,权重W是转置后再右乘,即下图中W 和X互换位置):

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AI学习 深度学习 PyTorch 神经网络
相关文章