深度学习与AI
深度学习与AI #
深度学习基础知识、大模型应用、AI工具使用指南
📋 目录 #
基础概念 #
什么是深度学习 #
特点:
- 数据驱动
- 自动特征提取
- 多层非线性变换
深度学习框架 #
PyTorch #
最流行的深度学习框架 ⭐⭐⭐⭐⭐
import torch
import torch.nn as nn
import torch.optim as optim
# 定义神经网络
class SimpleNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# 初始化模型
model = SimpleNN(input_size=784, hidden_size=128, output_size=10)
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练循环
for epoch in range(10):
for batch_idx, (data, target) in train_loader:
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
安装:
pip install torch torchvision
pip install torch torchvision torchaudio # GPU版本
TensorFlow/Keras #
import tensorflow as tf
from tensorflow import keras
# 定义模型
model = keras.Sequential([
keras.layers.Dense(128, activation='relu', input_shape=(784,)),
keras.layers.Dropout(0.2),
keras.layers.Dense(64, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
# 编译模型
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
# 训练模型
model.fit(x_train, y_train, epochs=10, batch_size=32)
常见模型 #
CNN (卷积神经网络) #
用于图像识别 ⭐⭐⭐⭐
典型架构:
- LeNet (1998) - 手写数字识别
- AlexNet (2012) - ImageNet冠军
- VGG (2014) - 深度网络
- ResNet (2015) - 残差连接
- EfficientNet (2019) - 高效网络
RNN (循环神经网络) #
用于序列数据 ⭐⭐⭐⭐
应用场景:
- 时间序列预测
- 自然语言处理
- 语音识别
- 机器翻译
变体:
- LSTM (长短期记忆网络)
- GRU (门控循环单元)
Transformer #
现代NLP的核心 ⭐⭐⭐⭐⭐
核心:
- Self-Attention (自注意力机制)
- Multi-Head Attention (多头注意力)
- Position Encoding (位置编码)
典型模型:
- BERT (2018) - 双向编码器
- GPT (2018) - 生成式预训练
- T5 (2020) - 文本到文本
大模型LLM #
GPT系列 #
| 模型 | 参数量 | 发布时间 | 特点 |
|---|---|---|---|
| GPT-1 | 117M | 2018 | 生成式预训练 |
| GPT-2 | 1.5B | 2019 | Zero-shot学习 |
| GPT-3 | 175B | 2020 | Few-shot学习 |
| GPT-4 | 不公开 | 2023 | 多模态 |
BERT系列 #
| 模型 | 参数量 | 发布时间 | 特点 |
|---|---|---|---|
| BERT-Base | 110M | 2018 | 双向编码 |
| BERT-Large | 340M | 2018 | 更深网络 |
| RoBERTa | 355M | 2019 | 优化训练 |
| ERNIE | 1B | 2022 | 百度发展 |
开源大模型 #
| 模型 | 开源者 | 特点 |
|---|---|---|
| LLaMA | Meta | 开源对话模型 |
| ChatGLM | 清华 | 中英双语 |
| Baichuan | 百川科技 | 训练数据量大 |
| Yi | 零一万象 | 性能强 |
| Qwen | 阿里 | 通义千问 |
国内AI工具 #
使用ChatGPT方法 #
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 代理/VPN | 简单易用 | 需要付费,可能有风险 | ⭐⭐⭐ |
| API方式 | 稳定可靠 | 需要技术,付费 | ⭐⭐⭐⭐ |
| 镜像网站 | 无需开发 | 依赖第三方,可能收费 | ⭐⭐⭐⭐ |
| 国产替代 | 速度快 | 功能可能不如GPT-4 | ⭐⭐⭐⭐⭐ |
国内镜像网站推荐 #
| 网站 | 特点 | 推荐 |
|---|---|---|
| BKAI (bkai.us) | 数据源自OpenAI | ⭐⭐⭐⭐⭐ |
| ChatGPT中文版 (chatgptplus.cn) | 国内镜像 | ⭐⭐⭐⭐ |
| Claude | 通过镜像访问 | ⭐⭐⭐⭐ |
国内大厂AI产品 #
| 公司 | 产品 | 特点 | 官网 |
|---|---|---|---|
| 字节 | 豆包AI、扣子 | 文案生成、对话 | doubao.com |
| 阿里 | 通义千问 | 文本生成、代码 | tongyi.aliyun.com |
| 百度 | 文心一言 | 通用大模型 | yiyan.baidu.com |
| 腾讯 | 混元助手 | 多模态模型 | hunyuan.tencent.com |
| 科大讯飞 | 讯飞星火 | 语音、医疗增强 | spark.iflytek.com |
API使用指南 #
OpenAI API #
import openai
# 配置API Key
openai.api_key = "your-api-key"
# 调用ChatGPT
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "解释什么是深度学习?"}
],
temperature=0.7,
max_tokens=500
)
print(response.choices[0].message.content)
国内API示例 #
import requests
# 调用通义千问API
url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"
headers = {
"Authorization": "Bearer your-dashscope-api-key",
"Content-Type": "application/json"
}
data = {
"model": "qwen-turbo",
"input": {"prompt": "解释什么是Spring Boot?"}
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
面试相关 #
常见面试题 #
基础概念 #
Q1: 什么是梯度下降?
梯度下降是一种优化算法,用于最小化损失函数
流程:
1. 计算梯度(函数在各参数方向的变化率)
2. 沿梯度反方向调整参数
3. 迭代直到收敛
公式:
θ = θ - α * ∇J(θ)
其中 α 是学习率
Q2: 过拟合与欠拟合?
过拟合: 训练集表现好,测试集表现差
解决: 正则化、Dropout、数据增强
欠拟合: 训练集和测试集表现都差
解决: 增加网络深度、增加训练时间
Q3: CNN和RNN的区别?
CNN:
- 适用于图像、空间数据
- 局部感知、权值共享
- 平移不变性
RNN:
- 适用于序列数据
- 有记忆功能
- 处理变长序列
开发实战 #
Spring Boot + 深度学习
// Spring Boot Controller
@RestController
@RequestMapping("/api/predict")
public class PredictionController {
private final PyTorchModel model;
@PostMapping
public String predict(@RequestBody ImageData imageData) {
// 调用Python服务器进行推理
return model.predict(imageData);
}
}
// Flask Python Server集成PyTorch
from flask import Flask, request
import torch
app = Flask(__name__)
model = torch.load('model.pth')
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
# 推理逻辑
output = model(data)
return jsonify({'result': output.tolist()})
学习路径 #
入门阶段 (1-2周) #
| 内容 | 说明 | 资源 |
|---|---|---|
| 数学基础 | 线性代数、微积分、概率论 | 3Blue1Brown |
| 编程语言 | Python基础 | Python官方教程 |
| 深度学习框架 | PyTorch/TensorFlow | 官方文档 |
| 基础知识 | 神经网络、反向传播 | 吴恩达课程 |
进阶阶段 (1-2月) #
Week 1-2: CNN实践
- 实现简单CNN
- ImageNet分类
Week 3-4: NLP实践
- 文本分类
- 情感分析
Week 5-6: Transformer
- Attention机制
- BERT微调
Week 7-8: 项目实战
- 图像识别项目
- 对话机器人
资源推荐 #
在线课程 #
书籍 #
- 《深度学习》 - Ian Goodfellow
- 《动手学深度学习》
- 《深度学习》(花书)
工具/平台 #
| 工具 | 用途 |
|---|---|
| Kaggle | 数据科学竞赛 |
| Hugging Face | 预训练模型 |
| Google Colab | 免费GPU环境 |
| Weights & Biases | 模型训练平台 |
面试题汇总 #
基础篇 #
- 什么是反向传播?
- 梯度下降的原理?
- 过拟合的解决方法?
模型篇 #
- CNN卷积的作用?
- RNN vs LSTM vs GRU区别?
- Transformer的注意力机制?
实践篇 #
- PyTorch如何保存/加载模型?
- 如何使用预训练模型?
- 如何部署深度学习模型?
面试题答案详解 #
基础篇 #
- 什么是反向传播?
答案:
反向传播(Backpropagation):
- 计算梯度的高效方法
- 从输出层反向传播误差到各层
- 基于链式法则计算各参数的梯度
流程:
- 前向传播:输入通过网络,计算输出
- 计算损失:比较预测和真实值
- 反向传播:从输出层开始,反向计算每个参数的梯度
- 更新参数:梯度下降更新权重
链式法则:
dL/dw = dL/dz * dz/dw
L:损失, z:线性输出, w:权重
- 梯度下降的原理?
答案:
梯度下降(Gradient Descent):
- 优化算法,最小化损失函数
- 沿梯度的反方向更新参数
- 迭代直到收敛
公式:
θ = θ - α * ∇J(θ)
θ:参数, α:学习率, ∇J:损失函数的梯度
变体:
- 批量梯度下降:使用全部样本
- 随机梯度下降(SGD):使用单个样本
- 小批量梯度下降:使用一批样本(最常用)
优化器:
- Adam(自适应学习率,推荐)
- RMSprop
- SGD with momentum
- 过拟合的解决方法?
答案:
过拟合:
- 训练集表现好,测试集表现差
- 模型记住了训练数据的噪声
解决方法:
- 数据增强:增加训练数据
- 正则化:
- L1/L2正则化
- Dropout:随机丢弃部分神经元
- 早停:验证集性能不再提升时停止训练
- 减少模型复杂度:减少层数、神经元
- 集成学习:多个模型平均
- 数据清洗:去除噪声数据
示例(Dropout):
import torch.nn as nn
model = nn.Sequential(
nn.Linear(784, 128),
nn.ReLU(),
nn.Dropout(0.5), # 随机丢弃50%
nn.Linear(128, 10)
)
模型篇 #
- CNN卷积的作用?
答案:
卷积(Convolution):
- CNN的核心操作
- 提取局部特征
- 平移不变性
作用:
- 特征提取:卷积核提取边缘、纹理等
- 参数共享:同一卷积核在图片各处共享,减少参数
- 局部感知:只感受局部区域,模拟视觉皮层
卷积核:
3x3卷积核示例(边缘检测):
[[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]]
- RNN vs LSTM vs GRU区别?
答案:
| 模型 | 特点 | 解决的问题 | 结构复杂度 |
|---|---|---|---|
| RNN | 简单循环网络 | - | 简单 |
| LSTM | 长短期记忆网络 | 梯度消失/爆炸 | 复杂(门控多) |
| GRU | 门控循环单元 | 梯度消失/爆炸 | 中等(门控少) |
RNN问题:
- 梯度消失/爆炸
- 难以处理长距离依赖
LSTM核心:
- 输入门:是否更新记忆
- 遗忘门:是否清除记忆
- 输出门:是否输出记忆
GRU优点:
- 结构比LSTM简单,参数少
- 性能接近LSTM
- Transformer的注意力机制?
答案:
自注意力(Self-Attention):
- 计算序列中每个位置与其他位置的相关性
- 捕获长距离依赖
- 并行计算,高效
核心公式:
Attention(Q, K, V) = softmax(QK^T / √dk)V
Q: Query, K: Key, V: Value
dk: Key维度
多头注意力(Multi-Head Attention):
- 多个注意力头并行
- 捕获不同类型的关系
完整Transformer结构:
- 编码器:自注意力 + 前馈网络
- 解码器:自注意力 + 交叉注意力 + 前馈网络
实践篇 #
- PyTorch如何保存/加载模型?
答案:
保存模型:
# 方法1:保存整个模型(不推荐,不可移植)
torch.save(model, 'model.pth')
# 方法2:保存状态字典(推荐,参数小)
torch.save(model.state_dict(), 'model_state.pth')
# 保存优化器等其他信息
checkpoint = {
'model': model.state_dict(),
'optimizer': optimizer.state_dict(),
'epoch': epoch
}
torch.save(checkpoint, 'checkpoint.pth')
加载模型:
# 方法1:加载整个模型
model = torch.load('model.pth')
# 方法2:加载状态字典
model = ModelClass()
model.load_state_dict(torch.load('model_state.pth'))
model.eval() # 评估模式
# 加载检查点
checkpoint = torch.load('checkpoint.pth')
model.load_state_dict(checkpoint['model'])
optimizer.load_state_dict(checkpoint['optimizer'])
epoch = checkpoint['epoch']
- 如何使用预训练模型?
答案:
使用Hugging Face(推荐):
from transformers import BertForSequenceClassification, BertTokenizer
# 加载预训练模型和分词器
model_name = "bert-base-chinese"
model = BertForSequenceClassification.from_pretrained(model_name)
tokenizer = BertTokenizer.from_pretrained(model_name)
# 使用
inputs = tokenizer("你好", return_tensors="pt")
outputs = model(**inputs)
PyTorch预训练模型:
import torchvision.models as models
# 加载预训练ResNet
model = models.resnet50(pretrained=True)
# 冻结前面层
for param in model.parameters():
param.requires_grad = False
# 替换最后的全连接层
model.fc = nn.Linear(2048, num_classes) # num_classes是你的类别数
- 如何部署深度学习模型?
答案:
常见部署方式:
- Flask/FastAPI(Python):
from fastapi import FastAPI
import torch
app = FastAPI()
model = torch.load('model.pth')
@app.post('/predict')
def predict(data):
result = model(data)
return {'result': result}
- TensorFlow Serving/ TorchServe:
# TorchServe启动
torchserve --start --model-store model_store --models mymodel=model.mar
- ONNX(跨平台):
# PyTorch转ONNX
torch.onnx.export(model, dummy_input, 'model.onnx')
- 容器化部署(Docker):
FROM pytorch/pytorch
COPY app.py /app/
EXPOSE 5000
CMD python app.py
🔗 相关笔记 #
最后更新: 2026-04-29