当前位置: 首页 > news >正文

5.AI入门:从机器学习到生成式AI,普通人也能看懂(五)—— 深度学习入门

系列导读:前面我们学习了传统机器学习,今天进入AI最热门的领域——深度学习。这是近年来AI取得突破性进展的关键技术。


一、什么是深度学习?

1.1 从生物神经元说起

人脑由约860亿个神经元组成,每个神经元通过突触与其他神经元连接,形成复杂的网络。

神经元的工作方式:

输入信号 → 树突 ↓ 细胞体处理(加权求和) ↓ 轴突输出(激活或抑制)

1.2 人工神经网络

模拟生物神经网络的计算模型。

人工神经元(感知机): x₁ → w₁ → ┐ x₂ → w₂ → ├→ Σ → 激活函数 → 输出 x₃ → w₃ → ┘ 输出 = 激活函数(w₁x₁ + w₂x₂ + w₃x₃ + b)

1.3 深度学习的"深度"

深度 = 神经网络的层数

单层感知机:输入层 → 输出层 浅层网络:输入层 → 1个隐藏层 → 输出层 深度网络:输入层 → 多个隐藏层 → 输出层

深度学习 = 使用深层神经网络的机器学习方法。

1.4 与传统机器学习的区别

对比项传统机器学习深度学习
特征工程人工设计自动学习
数据需求相对较少需要大量数据
计算资源CPU即可通常需要GPU
模型复杂度相对简单非常复杂
可解释性较好较差(黑盒)
表达能力有限强大

二、神经网络的基本结构

2.1 层的类型

输入层

接收原始数据。

例如图像分类: 输入层 = 图像像素值 28×28图像 → 784个输入节点
隐藏层

进行特征提取和变换。

第1隐藏层:提取低级特征(边缘、角点) 第2隐藏层:提取中级特征(形状、纹理) 第3隐藏层:提取高级特征(物体部件)
输出层

输出最终结果。

分类任务:输出各类别的概率 回归任务:输出预测值

2.2 前向传播

数据从输入层经过各隐藏层到达输出层的过程。

输入 x ↓ 隐藏层1:h₁ = f(W₁x + b₁) ↓ 隐藏层2:h₂ = f(W₂h₁ + b₂) ↓ 输出层:y = f(W₃h₂ + b₃)

2.3 激活函数

引入非线性,使网络能学习复杂模式。

常用激活函数

Sigmoid:

f(x) = 1 / (1 + e^(-x)) 输出范围:(0, 1)

ReLU(最常用):

f(x) = max(0, x) x > 0时:f(x) = x x ≤ 0时:f(x) = 0

Tanh:

f(x) = (e^x - e^(-x)) / (e^x + e^(-x)) 输出范围:(-1, 1)

Softmax(多分类输出):

将输出转换为概率分布,所有类别概率和为1

三、神经网络的训练

3.1 损失函数

衡量预测值与真实值的差距。

回归任务:均方误差(MSE) L = (1/n) Σ(y_pred - y_true)² 分类任务:交叉熵损失(Cross Entropy) L = -Σ y_true × log(y_pred)

3.2 反向传播

计算损失对各参数的梯度,指导参数更新。

前向传播:计算预测值和损失 ↓ 反向传播:计算梯度 ↓ 参数更新:调整权重和偏置

链式法则:

∂L/∂w = ∂L/∂y × ∂y/∂h × ∂h/∂w

3.3 梯度下降

沿着梯度的反方向更新参数,使损失减小。

w_new = w_old - learning_rate × ∂L/∂w
梯度下降的变种
方法特点
批量梯度下降使用全部数据,稳定但慢
随机梯度下降(SGD)使用单个样本,快但震荡
小批量梯度下降折中方案,最常用
Adam自适应学习率,效果好

3.4 训练流程

1. 初始化网络参数 2. for epoch in range(epochs): 3. for batch in data: 4. 前向传播,计算损失 5. 反向传播,计算梯度 6. 更新参数 7. 评估验证集性能 8. 保存最优模型

四、常见的神经网络架构

4.1 全连接神经网络(DNN/MLP)

每个神经元与上一层所有神经元连接。

输入层 隐藏层1 隐藏层2 输出层 ○ ──────→ ○ ──────→ ○ ──────→ ○ ○ ──────→ ○ ──────→ ○ ──────→ ○ ○ ──────→ ○ ──────→ ○ ──────→ ○

**应用:**表格数据分类/回归

4.2 卷积神经网络(CNN)

专门处理图像数据,通过卷积提取局部特征。

核心组件

卷积层:

用卷积核在图像上滑动,提取特征 原图 卷积核 特征图 ■■□□ ■■ ■■□□ ★ ■■ = ■■■ □□□□

池化层:

降采样,减少参数,增强鲁棒性 特征图 最大池化 输出 ■■□□ ■■□□ → ■ → ■ □□■■ ■ ■ □□■■
经典CNN架构
LeNet(1998):手写数字识别 AlexNet(2012):ImageNet冠军,深度学习爆发 VGG(2014):深层网络 ResNet(2015):残差连接,解决深层网络训练问题

**应用:**图像分类、目标检测、人脸识别

4.3 循环神经网络(RNN)

处理序列数据,具有记忆能力。

时间步t: h_t = f(h_{t-1}, x_t) h₁ → h₂ → h₃ → ... ↑ ↑ ↑ x₁ x₂ x₃
LSTM和GRU

解决RNN的长期依赖问题。

LSTM:引入门控机制,选择性记忆和遗忘 - 遗忘门:决定丢弃哪些信息 - 输入门:决定存储哪些新信息 - 输出门:决定输出哪些信息

**应用:**文本生成、机器翻译、语音识别

4.4 Transformer

当前最流行的架构,ChatGPT等大模型的基础。

核心机制:自注意力
计算序列中每个位置与其他位置的相关性 Attention(Q, K, V) = softmax(QK^T / √d) V Q:查询矩阵 K:键矩阵 V:值矩阵

优势:

  • 并行计算(不像RNN需要顺序处理)
  • 长距离依赖建模能力强
  • 可扩展性好

**应用:**NLP、大语言模型、多模态模型


五、深度学习的关键概念

5.1 批量大小(Batch Size)

一次训练使用的样本数量。

Batch Size = 32:一次用32个样本更新参数 Batch Size = 1:随机梯度下降 Batch Size = 全部数据:批量梯度下降

5.2 学习率(Learning Rate)

控制参数更新的步长。

学习率太大:震荡,无法收敛 学习率太小:收敛太慢,可能陷入局部最优

5.3 Epoch

遍历整个训练数据集的次数。

10000个样本,Batch Size = 100 1个Epoch = 100次迭代(更新)

5.4 正则化

防止过拟合的技术。

方法说明
Dropout随机丢弃部分神经元
L1/L2正则化在损失函数中加入正则项
Batch Normalization批归一化,加速训练
早停(Early Stopping)验证集性能不再提升时停止

5.5 数据增强

通过变换增加训练数据多样性。

图像增强: - 翻转、旋转、缩放 - 裁剪、平移 - 颜色调整、添加噪声

六、深度学习框架

6.1 主流框架

框架开发者特点
PyTorchFacebook动态图,易调试,学术首选
TensorFlowGoogle静态图,部署方便,工业首选
Keras高层API简单易用,适合入门
JAXGoogle高性能,自动微分

6.2 PyTorch示例

importtorchimporttorch.nnasnnimporttorch.optimasoptim# 定义模型classSimpleNN(nn.Module):def__init__(self):super().__init__()self.fc1=nn.Linear(784,128)self.fc2=nn.Linear(128,10)self.relu=nn.ReLU()defforward(self,x):x=self.relu(self.fc1(x))x=self.fc2(x)returnx# 创建模型model=SimpleNN()criterion=nn.CrossEntropyLoss()optimizer=optim.Adam(model.parameters(),lr=0.001)# 训练循环forepochinrange(10):fordata,targetintrain_loader:optimizer.zero_grad()output=model(data)loss=criterion(output,target)loss.backward()optimizer.step()

七、动手实践:神经网络完整示例

7.1 环境准备

pipinstalltorch torchvision numpy matplotlib

7.2 手写数字识别完整代码

""" 深度学习入门:手写数字识别(MNIST) 使用PyTorch实现一个完整的神经网络 """importtorchimporttorch.nnasnnimporttorch.optimasoptimfromtorchvisionimportdatasets,transformsfromtorch.utils.dataimportDataLoaderimportmatplotlib.pyplotasplt# 1. 数据准备transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,),(0.3081,))])# 下载MNIST数据集train_dataset=datasets.MNIST('./data',train=True,download=True,transform=transform)test_dataset=datasets.MNIST('./data',train=False,transform=transform)train_loader=DataLoader(train_dataset,batch_size=64,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=1000)print(f"训练集大小:{len(train_dataset)}")print(f"测试集大小:{len(test_dataset)}")# 2. 定义神经网络classNeuralNetwork(nn.Module):def__init__(self):super().__init__()# 输入层 → 隐藏层1 (784 → 256)self.fc1=nn.Linear(784,256)# 隐藏层1 → 隐藏层2 (256 → 128)self.fc2=nn.Linear(256,128)# 隐藏层2 → 输出层 (128 → 10)self.fc3=nn.Linear(128,10)# 激活函数self.relu=nn.ReLU()# Dropout防止过拟合self.dropout=nn.Dropout(0.2)defforward(self,x):# 展平图像 (batch, 1, 28, 28) → (batch, 784)x=x.view(-1,784)# 前向传播x=self.dropout(self.relu(self.fc1(x)))x=self.dropout(self.relu(self.fc2(x)))x=self.fc3(x)returnx# 3. 创建模型device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")model=NeuralNetwork().to(device)print(f"\n使用设备:{device}")print(f"模型结构:\n{model}")# 4. 定义损失函数和优化器criterion=nn.CrossEntropyLoss()optimizer=optim.Adam(model.parameters(),lr=0.001)# 5. 训练函数deftrain(model,loader,criterion,optimizer,epoch):model.train()total_loss=0correct=0fordata,targetinloader:data,target=data.to(device),target.to(device)optimizer.zero_grad()output=model(data)loss=criterion(output,target)loss.backward()optimizer.step()total_loss+=loss.item()pred=output.argmax(dim=1)correct+=pred.eq(target).sum().item()accuracy=100.*correct/len(loader.dataset)returntotal_loss/len(loader),accuracy# 6. 测试函数deftest(model,loader,criterion):model.eval()total_loss=0correct=0withtorch.no_grad():fordata,targetinloader:data,target=data.to(device),target.to(device)output=model(data)total_loss+=criterion(output,target).item()pred=output.argmax(dim=1)correct+=pred.eq(target).sum().item()accuracy=100.*correct/len(loader.dataset)returntotal_loss/len(loader),accuracy# 7. 训练模型print("\n开始训练...")train_losses,test_losses=[],[]train_accs,test_accs=[],[]forepochinrange(1,6):train_loss,train_acc=train(model,train_loader,criterion,optimizer,epoch)test_loss,test_acc=test(model,test_loader,criterion)train_losses.append(train_loss)test_losses.append(test_loss)train_accs.append(train_acc)test_accs.append(test_acc)print(f"Epoch{epoch}: "f"Train Loss={train_loss:.4f}, Acc={train_acc:.2f}% | "f"Test Loss={test_loss:.4f}, Acc={test_acc:.2f}%")# 8. 可视化训练过程fig,(ax1,ax2)=plt.subplots(1,2,figsize=(12,4))ax1.plot(train_losses,label='Train Loss')ax1.plot(test_losses,label='Test Loss')ax1.set_xlabel('Epoch')ax1.set_ylabel('Loss')ax1.set_title('训练和测试损失')ax1.legend()ax1.grid(True,alpha=0.3)ax2.plot(train_accs,label='Train Acc')ax2.plot(test_accs,label='Test Acc')ax2.set_xlabel('Epoch')ax2.set_ylabel('Accuracy (%)')ax2.set_title('训练和测试准确率')ax2.legend()ax2.grid(True,alpha=0.3)plt.tight_layout()plt.savefig('training_history.png',dpi=150)plt.show()print(f"\n最终测试准确率:{test_accs[-1]:.2f}%")

输出示例:

训练集大小: 60000 测试集大小: 10000 使用设备: cuda 模型结构: NeuralNetwork( (fc1): Linear(in_features=784, out_features=256, bias=True) (fc2): Linear(in_features=256, out_features=128, bias=True) (fc3): Linear(in_features=128, out_features=10, bias=True) (relu): ReLU() (dropout): Dropout(p=0.2, inplace=False) ) 开始训练... Epoch 1: Train Loss=0.2834, Acc=91.58% | Test Loss=0.1523, Acc=95.42% Epoch 2: Train Loss=0.1423, Acc=95.75% | Test Loss=0.1124, Acc=96.68% Epoch 3: Train Loss=0.1089, Acc=96.78% | Test Loss=0.0956, Acc=97.12% Epoch 4: Train Loss=0.0892, Acc=97.35% | Test Loss=0.0878, Acc=97.34% Epoch 5: Train Loss=0.0756, Acc=97.75% | Test Loss=0.0823, Acc=97.52% 最终测试准确率: 97.52%

7.3 预测单张图片

""" 预测单张手写数字图片 """importtorchfromtorchvisionimporttransformsfromPILimportImagedefpredict_digit(model,image_path):"""预测单张图片"""model.eval()# 图像预处理transform=transforms.Compose([transforms.Grayscale(),transforms.Resize((28,28)),transforms.ToTensor(),transforms.Normalize((0.1307,),(0.3081,))])# 加载并处理图片image=Image.open(image_path)image=transform(image).unsqueeze(0).to(device)# 预测withtorch.no_grad():output=model(image)pred=output.argmax(dim=1).item()prob=torch.softmax(output,dim=1)[0][pred].item()returnpred,prob# 使用示例# digit, confidence = predict_digit(model, 'my_digit.png')# print(f"预测结果: {digit}, 置信度: {confidence:.2%}")

八、深度学习的应用

领域应用架构
计算机视觉图像分类、目标检测CNN
自然语言处理文本分类、机器翻译Transformer
语音识别语音转文字RNN/Transformer
推荐系统个性化推荐DNN
游戏AIAlphaGo、游戏对战强化学习+DNN
自动驾驶环境感知、决策CNN+RNN
医疗影像病灶检测、辅助诊断CNN

八、深度学习的挑战

8.1 需要大量数据

深度学习是数据饥渴型技术。

解决方案:

  • 迁移学习:用预训练模型微调
  • 数据增强:增加数据多样性
  • 半监督学习:利用无标签数据

8.2 计算资源需求高

训练大模型需要大量GPU。

解决方案:

  • 使用云平台(AWS、阿里云等)
  • 使用预训练模型
  • 模型压缩和优化

8.3 可解释性差

深度学习是"黑盒",难以解释决策原因。

解决方案:

  • 可解释AI研究
  • 注意力可视化
  • 特征图可视化

8.4 容易过拟合

模型复杂度高,容易记住训练数据。

解决方案:

  • 正则化(Dropout、L1/L2)
  • 数据增强
  • 早停

九、小结

  • 深度学习 = 使用深层神经网络的机器学习方法
  • 核心:模拟人脑神经元的工作方式
  • 训练:前向传播→计算损失→反向传播→参数更新
  • 常见架构:DNN、CNN、RNN、Transformer
  • 优势:自动特征学习,表达能力强
  • 挑战:数据需求大、计算资源高、可解释性差

十、思考题

  1. 深度学习与传统机器学习的主要区别是什么?

  2. CNN、RNN、Transformer各适合处理什么类型的数据?为什么?

  3. 什么是过拟合?深度学习中如何防止过拟合?


下一篇预告:我们将深入探讨自然语言处理——让机器理解人类语言的技术,这是ChatGPT等应用的基础。


标签深度学习神经网络CNNRNNTransformerAI入门

版权声明:本文为原创内容,转载请注明出处。

http://www.jsqmd.com/news/716399/

相关文章:

  • 【Unity拼图游戏模板】不卷3A大作,这类小游戏反而更容易变现
  • Yokogawa F3PU10-0N电源模块
  • 五月は花緑青の窓辺から
  • 百考通AI:让毕业答辩PPT,从“手忙脚乱”到“从容闪耀”
  • 汽车大梁生产线全液压铆接机液压系统设计
  • 手把手教你配置rsyslogd:从日志等级到远程转发全攻略(附常见错误排查)
  • 为什么92%的AI微服务在Docker中未启用userns-remap?3分钟修复内核提权漏洞并实测性能损耗<1.7%
  • Phi-3.5-mini-instruct代码生成实战:从注释到可运行Python函数
  • 【单点修改,区间查询】洛谷 P3374 【模板】树状数组 1
  • 2918. 数组的最小相等和
  • 海康ISAPI接口实战:用Java代码批量删除门禁用户(附完整工具类)
  • 汽车变速箱加工工艺及夹具设计(毕业设计)论文+CAD图纸+工艺卡+文献翻译……
  • leetcode热题 - 4
  • 3步掌握缠论:通达信智能分析插件ChanlunX完全指南
  • Phi-3-mini-4k-instruct-gguf新手入门:从零到一,用vllm部署你的第一个文本生成模型
  • CIMPro孪大师:国产数字孪生引擎核心功能解析
  • AI工程师的晋升金字塔:你在第几层?
  • Yokogawa F3SP21-0N中央控制器
  • 热泵干燥装置电控系统设计(论文+程序)
  • ICLR 2026|DataMind:构建通用数据分析智能体
  • AI沙箱逃逸风险预警:2024最新CVE-2024-24789复现实验与Docker 24.1.0紧急加固方案
  • egergergeeert效果实测:4步vs8步在512×512下细节提升与耗时对比分析
  • KouShare-dl:蔻享学术视频下载的终极指南,轻松获取学术资源
  • Superior Electric 3180-EPI电机驱动模块
  • 2024北京市赛补题
  • 汽车连杆加工工艺及夹具课程设计
  • 自托管AI助手Web界面:基于Next.js与WebSocket的OpenClaw私有化部署指南
  • 实时直播翻译神器:用Stream-Translator打破语言壁垒
  • 抖音批量下载工具实战指南:3步实现高效无水印内容获取
  • Qwen3-4B-Thinking开源可部署优势:模型权重完全可控可审计