深度学习与AI #

深度学习基础知识、大模型应用、AI工具使用指南


📋 目录 #


基础概念 #

什么是深度学习 #

机器学习 ML

传统机器学习

深度学习 DL

决策树

逻辑回归

SVM

K-均值

神经网络 NN

卷积神经网络 CNN

循环神经网络 RNN

Transformer

特点:

  • 数据驱动
  • 自动特征提取
  • 多层非线性变换

深度学习框架 #

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 (循环神经网络) #

用于序列数据 ⭐⭐⭐⭐

记忆

输入序列

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方法 #

国内使用ChatGPT

代理/VPN

API方式

镜像网站

国产替代

方法 优点 缺点 推荐度
代理/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: 项目实战
  - 图像识别项目
  - 对话机器人

资源推荐 #

在线课程 #

  • 吴恩达深度学习专项课程 - Coursera
  • 动手学深度学习 - d2l.ai (李沐)
  • Fast.ai - 实战导向

书籍 #

  • 《深度学习》 - Ian Goodfellow
  • 《动手学深度学习》
  • 《深度学习》(花书)

工具/平台 #

工具 用途
Kaggle 数据科学竞赛
Hugging Face 预训练模型
Google Colab 免费GPU环境
Weights & Biases 模型训练平台

面试题汇总 #

基础篇 #

  1. 什么是反向传播?
  2. 梯度下降的原理?
  3. 过拟合的解决方法?

模型篇 #

  1. CNN卷积的作用?
  2. RNN vs LSTM vs GRU区别?
  3. Transformer的注意力机制?

实践篇 #

  1. PyTorch如何保存/加载模型?
  2. 如何使用预训练模型?
  3. 如何部署深度学习模型?

面试题答案详解 #

基础篇 #

  1. 什么是反向传播?

答案:

反向传播(Backpropagation):

  • 计算梯度的高效方法
  • 从输出层反向传播误差到各层
  • 基于链式法则计算各参数的梯度

流程:

  1. 前向传播:输入通过网络,计算输出
  2. 计算损失:比较预测和真实值
  3. 反向传播:从输出层开始,反向计算每个参数的梯度
  4. 更新参数:梯度下降更新权重

链式法则:

dL/dw = dL/dz * dz/dw
L:损失, z:线性输出, w:权重

  1. 梯度下降的原理?

答案:

梯度下降(Gradient Descent):

  • 优化算法,最小化损失函数
  • 沿梯度的反方向更新参数
  • 迭代直到收敛

公式:

θ = θ - α * ∇J(θ)
θ:参数, α:学习率, ∇J:损失函数的梯度

变体:

  • 批量梯度下降:使用全部样本
  • 随机梯度下降(SGD):使用单个样本
  • 小批量梯度下降:使用一批样本(最常用)

优化器:

  • Adam(自适应学习率,推荐)
  • RMSprop
  • SGD with momentum

  1. 过拟合的解决方法?

答案:

过拟合:

  • 训练集表现好,测试集表现差
  • 模型记住了训练数据的噪声

解决方法:

  1. 数据增强:增加训练数据
  2. 正则化
    • L1/L2正则化
    • Dropout:随机丢弃部分神经元
  3. 早停:验证集性能不再提升时停止训练
  4. 减少模型复杂度:减少层数、神经元
  5. 集成学习:多个模型平均
  6. 数据清洗:去除噪声数据

示例(Dropout):

import torch.nn as nn
model = nn.Sequential(
    nn.Linear(784, 128),
    nn.ReLU(),
    nn.Dropout(0.5), # 随机丢弃50%
    nn.Linear(128, 10)
)

模型篇 #

  1. CNN卷积的作用?

答案:

卷积(Convolution):

  • CNN的核心操作
  • 提取局部特征
  • 平移不变性

作用:

  1. 特征提取:卷积核提取边缘、纹理等
  2. 参数共享:同一卷积核在图片各处共享,减少参数
  3. 局部感知:只感受局部区域,模拟视觉皮层

卷积核:

3x3卷积核示例(边缘检测):
[[-1, -1, -1],
 [-1,  8, -1],
 [-1, -1, -1]]

  1. RNN vs LSTM vs GRU区别?

答案:

模型 特点 解决的问题 结构复杂度
RNN 简单循环网络 - 简单
LSTM 长短期记忆网络 梯度消失/爆炸 复杂(门控多)
GRU 门控循环单元 梯度消失/爆炸 中等(门控少)

RNN问题:

  • 梯度消失/爆炸
  • 难以处理长距离依赖

LSTM核心:

  • 输入门:是否更新记忆
  • 遗忘门:是否清除记忆
  • 输出门:是否输出记忆

GRU优点:

  • 结构比LSTM简单,参数少
  • 性能接近LSTM

  1. Transformer的注意力机制?

答案:

自注意力(Self-Attention):

  • 计算序列中每个位置与其他位置的相关性
  • 捕获长距离依赖
  • 并行计算,高效

核心公式:

Attention(Q, K, V) = softmax(QK^T / √dk)V
Q: Query, K: Key, V: Value
dk: Key维度

多头注意力(Multi-Head Attention):

  • 多个注意力头并行
  • 捕获不同类型的关系

完整Transformer结构:

  • 编码器:自注意力 + 前馈网络
  • 解码器:自注意力 + 交叉注意力 + 前馈网络

实践篇 #

  1. 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']

  1. 如何使用预训练模型?

答案:

使用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是你的类别数

  1. 如何部署深度学习模型?

答案:

常见部署方式:

  1. 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}
  1. TensorFlow Serving/ TorchServe:
# TorchServe启动
torchserve --start --model-store model_store --models mymodel=model.mar
  1. ONNX(跨平台):
# PyTorch转ONNX
torch.onnx.export(model, dummy_input, 'model.onnx')
  1. 容器化部署(Docker):
FROM pytorch/pytorch
COPY app.py /app/
EXPOSE 5000
CMD python app.py

🔗 相关笔记 #


最后更新: 2026-04-29