D.20.10.01-人工智能与AI实践
人工智能(AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。随着大语言模型的崛起,AI正从感知智能向认知智能迈进,其核心目标是让机器能够胜任一些通常需要人类智能才能完成的复杂工作,并具备推理、创造和决策能力。
人工智能与大模型:从核心概念到高级应用
核心思想: 人工智能(AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。随着大语言模型的崛起,AI正从感知智能向认知智能迈进,其核心目标是让机器能够胜任一些通常需要人类智能才能完成的复杂工作,并具备推理、创造和决策能力。
1. AI、机器学习与深度学习的关系
这三个术语经常被混用,但它们之间是清晰的层级关系。
- 人工智能 (AI): 是最广泛的概念,是让机器像人一样思考和行动的科学。
- 机器学习 (Machine Learning, ML): 是实现AI的一种方法。它不是通过编写显式的规则来解决问题,而是让机器从数据中自动学习出模式和规律。
- 深度学习 (Deep Learning, DL): 是机器学习的一个分支,它使用深度神经网络(具有多层结构的神经网络)来进行学习。深度学习在图像识别、自然语言处理等领域取得了突破性进展。
- 大语言模型 (LLMs): 深度学习的最新发展,通过海量文本数据训练,具备强大的语言理解和生成能力。
- 多模态模型: 能够同时处理文本、图像、音频等多种数据类型的AI模型。
2. 机器学习的核心类型
2.1. 监督学习 (Supervised Learning)
核心思想: 给机器提供带有"正确答案"的标记数据 (Labeled Data),让它学习从输入到输出的映射关系。
- 例子:
- 分类 (Classification): 预测一个离散的标签。例如,给一张图片,判断它是"猫"还是"狗"。
- 回归 (Regression): 预测一个连续的值。例如,根据房屋的面积、位置等特征,预测它的"房价"。
- 常用算法: 线性回归、逻辑回归、支持向量机 (SVM)、决策树、随机森林、XGBoost、LightGBM。
- 最新发展: 深度监督学习、自监督学习、对比学习。
2.2. 无监督学习 (Unsupervised Learning)
核心思想: 只给机器提供未标记数据 (Unlabeled Data),让它自己去发现数据中潜在的结构和模式。
- 例子:
- 聚类 (Clustering): 将相似的数据点分到同一个"簇"中。例如,根据用户的购买行为,将他们分为不同的客户群体。
- 降维 (Dimensionality Reduction): 在保留主要信息的前提下,减少数据的特征数量。例如,主成分分析 (PCA)。
- 异常检测 (Anomaly Detection): 识别数据中的异常点或异常模式。
- 常用算法: K-均值聚类 (K-Means)、DBSCAN、主成分分析 (PCA)、t-SNE、自编码器 (Autoencoders)。
- 最新发展: 深度聚类、生成对抗网络 (GANs)、变分自编码器 (VAEs)。
2.3. 强化学习 (Reinforcement Learning)
核心思想: 让一个智能体 (Agent) 在一个环境 (Environment) 中学习。智能体通过采取行动 (Action) 来与环境交互,并从环境中获得奖励 (Reward) 或惩罚 (Penalty)。它的目标是学习一个策略 (Policy),以最大化长期累积的奖励。
- 例子: 训练一个AI下棋(如AlphaGo)、自动驾驶、机器人控制、推荐系统。
- 核心概念: 状态 (State)、动作 (Action)、奖励 (Reward)、策略 (Policy)、价值函数 (Value Function)。
- 常用算法: Q-Learning、SARSA、深度Q网络 (DQN)、策略梯度 (Policy Gradient)、演员评论家 (Actor-Critic)。
- 最新发展: 多智能体强化学习、元强化学习、离线强化学习。
2.4. 自监督学习 (Self-Supervised Learning)
核心思想: 从无标签数据中自动生成监督信号,让模型学习数据的内在结构和表示。
- 核心方法: 掩码语言建模 (MLM)、下一句预测 (NSP)、对比学习。
- 代表模型: BERT、GPT、CLIP、DALL-E。
- 应用场景: 预训练语言模型、视觉表示学习、多模态学习。
3. 深度学习与神经网络架构
3.1. 神经网络的基本结构
神经网络受到人脑神经元工作方式的启发,由大量的神经元 (Neuron) 相互连接而成,通常分为三层:
- 输入层 (Input Layer): 接收原始数据,如图片的像素值。
- 隐藏层 (Hidden Layers): 进行大部分的计算和特征提取。可以有一层或多层。
- 输出层 (Output Layer): 输出最终结果,如分类的概率。
3.2. 常见神经网络架构
3.2.1. 卷积神经网络 (CNN)
- 核心思想: 通过卷积操作提取局部特征,通过池化操作降低维度。
- 关键组件: 卷积层、池化层、全连接层、批归一化层。
- 经典模型: LeNet-5、AlexNet、VGG、ResNet、Inception、EfficientNet。
- 应用领域: 图像分类、目标检测、图像分割、医学图像分析。
3.2.2. 循环神经网络 (RNN)
- 核心思想: 具有记忆功能,能够处理序列数据中的时间依赖关系。
- 关键问题: 梯度消失/爆炸、长期依赖问题。
- 改进版本: LSTM、GRU、Bi-RNN。
- 应用领域: 自然语言处理、语音识别、时间序列预测。
3.2.3. Transformer架构
- 核心思想: 基于自注意力机制,能够并行处理序列数据并捕捉长距离依赖关系。
- 关键组件: 多头注意力 (Multi-Head Attention)、位置编码 (Positional Encoding)、前馈神经网络 (FFN)。
- 革命性突破: 解决了RNN的序列处理瓶颈,实现了并行计算。
- 代表模型: BERT、GPT、T5、PaLM、LLaMA。
3.2.4. 生成对抗网络 (GANs)
- 核心思想: 通过生成器和判别器的对抗训练,学习生成真实的数据样本。
- 关键组件: 生成器 (Generator)、判别器 (Discriminator)。
- 应用领域: 图像生成、风格迁移、数据增强、视频生成。
3.2.5. 图神经网络 (GNN)
- 核心思想: 专门处理图结构数据,学习节点和边的表示。
- 关键组件: 消息传递 (Message Passing)、节点更新 (Node Update)。
- 应用领域: 社交网络分析、分子结构预测、推荐系统、知识图谱。
4. 大语言模型 (LLMs) 深度解析
4.1. LLMs的核心技术
4.1.1. 预训练与微调范式
- 预训练 (Pre-training): 在海量无标签文本数据上进行自监督学习,学习通用语言知识。
- 微调 (Fine-tuning): 在特定任务数据上进行监督学习,适应下游任务。
- 提示工程 (Prompt Engineering): 通过设计合适的提示词,引导模型生成期望的输出。
- 指令微调 (Instruction Tuning): 让模型学会理解并执行各种指令。
4.1.2. 关键技术突破
- 缩放定律 (Scaling Laws): 模型性能随参数量、数据量和计算量的增加而提升。
- 涌现能力 (Emergent Abilities): 大模型在小模型中不存在的复杂能力。
- 上下文学习 (In-Context Learning): 通过示例在上下文中学习新任务。
- 思维链 (Chain of Thought): 通过逐步推理提高复杂问题的解决能力。
4.2. 主流LLMs模型对比
模型 | 发布时间 | 参数量 | 训练数据 | 主要特点 |
---|---|---|---|---|
GPT-4 | 2023 | ~1.8T | 多模态 | 强大的推理能力,支持图像输入 |
Claude 2 | 2023 | ~100B | 文本 | 长上下文处理,安全性高 |
LLaMA 2 | 2023 | 7B-70B | 文本 | 开源可商用,性能优异 |
Gemini | 2023 | 多规模 | 多模态 | 原生多模态,推理能力强 |
Qwen | 2023 | 1.8B-72B | 多语言 | 中文理解优秀,多语言支持 |
4.3. LLMs的应用场景
4.3.1. 内容创作与生成
- 文案写作: 营销文案、产品描述、社交媒体内容
- 创意写作: 小说、诗歌、剧本、歌词创作
- 代码生成: 程序代码、SQL查询、配置文件
- 多语言翻译: 高质量、上下文感知的翻译服务
4.3.2. 智能问答与对话
- 客服机器人: 24/7智能客服,处理常见问题
- 知识问答: 基于知识库的专业问答系统
- 个人助理: 日程管理、邮件回复、信息整理
- 教育辅导: 个性化学习指导、答疑解惑
4.3.3. 分析与决策支持
- 文本分析: 情感分析、主题提取、实体识别
- 数据洞察: 从非结构化文本中提取关键信息
- 决策辅助: 提供决策建议、风险评估
- 报告生成: 自动生成分析报告、总结摘要
5. RAG技术:检索增强生成
5.1. RAG的核心概念
检索增强生成 (Retrieval-Augmented Generation, RAG) 是一种结合了信息检索和生成式AI的技术范式。它通过从外部知识库中检索相关信息,然后基于检索到的内容生成回答,从而提高生成内容的准确性、时效性和可解释性。
5.1.1. RAG的优势
- 准确性: 基于真实数据源,减少幻觉现象
- 时效性: 可以访问最新信息,不受训练数据时间限制
- 可解释性: 可以追溯信息来源,提高透明度
- 领域适应: 快速适应特定领域,无需重新训练模型
- 成本效益: 相比全量微调,部署和维护成本更低
5.2. RAG系统架构
5.3. RAG本地知识库创建
5.3.1. 数据收集与预处理
1. 数据源类型
- 结构化数据: 数据库、表格、CSV文件
- 半结构化数据: JSON、XML、Markdown文档
- 非结构化数据: PDF、Word文档、网页内容、图片
2. 数据预处理流程
# 数据预处理示例代码
import os
import pdfplumber
from bs4 import BeautifulSoup
import markdown
from langchain.text_splitter import RecursiveCharacterTextSplitter
def load_documents(directory):
"""加载各种格式的文档"""
documents = []
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
if filename.endswith('.pdf'):
text = extract_pdf_text(filepath)
elif filename.endswith('.md'):
text = extract_markdown_text(filepath)
elif filename.endswith('.html'):
text = extract_html_text(filepath)
else:
continue
documents.append({"content": text, "source": filename})
return documents
def chunk_documents(documents, chunk_size=1000, chunk_overlap=200):
"""文档分块处理"""
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=chunk_size,
chunk_overlap=chunk_overlap,
length_function=len
)
chunks = []
for doc in documents:
doc_chunks = text_splitter.split_text(doc["content"])
for i, chunk in enumerate(doc_chunks):
chunks.append({
"content": chunk,
"source": doc["source"],
"chunk_id": i
})
return chunks
5.3.2. 向量化与嵌入模型
1. 嵌入模型选择
- 开源模型: BGE-large、text2vec、sentence-transformers
- 商业API: OpenAI Embeddings、Cohere Embeddings
- 中文优化: bge-large-zh、text2vec-base-chinese
2. 向量化处理
from sentence_transformers import SentenceTransformer
import numpy as np
import faiss
class VectorStore:
def __init__(self, model_name="BAAI/bge-large-zh"):
self.model = SentenceTransformer(model_name)
self.dimension = self.model.get_sentence_embedding_dimension()
self.index = faiss.IndexFlatIP(self.dimension) # 内积相似度
self.documents = []
def add_documents(self, chunks):
"""添加文档到向量库"""
texts = [chunk["content"] for chunk in chunks]
embeddings = self.model.encode(texts, convert_to_tensor=True)
embeddings_np = embeddings.cpu().numpy()
# 归一化向量(用于内积相似度计算)
faiss.normalize_L2(embeddings_np)
self.index.add(embeddings_np)
self.documents.extend(chunks)
def search(self, query, top_k=5):
"""检索相关文档"""
query_embedding = self.model.encode([query], convert_to_tensor=True)
query_embedding_np = query_embedding.cpu().numpy()
faiss.normalize_L2(query_embedding_np)
scores, indices = self.index.search(query_embedding_np, top_k)
results = []
for score, idx in zip(scores[0], indices[0]):
if idx < len(self.documents):
doc = self.documents[idx]
results.append({
"content": doc["content"],
"source": doc["source"],
"score": float(score),
"chunk_id": doc["chunk_id"]
})
return results
5.3.3. 检索策略优化
1. 多路检索
- 关键词检索: BM25、TF-IDF等传统检索方法
- 语义检索: 基于向量嵌入的语义相似度检索
- 混合检索: 结合关键词和语义检索的优势
2. 检索后处理
- 重排序 (Reranking): 使用交叉编码器对检索结果重新排序
- 去重处理: 移除重复或高度相似的内容
- 上下文压缩: 精简检索结果,保留最相关信息
5.4. RAG系统实现
5.4.1. 基础RAG实现
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
class RAGSystem:
def __init__(self, vector_store, llm_model="gpt-3.5-turbo"):
self.vector_store = vector_store
self.llm = OpenAI(model_name=llm_model)
self.qa_chain = self._build_qa_chain()
def _build_qa_chain(self):
"""构建问答链"""
template = """基于以下上下文信息回答问题。如果上下文中没有相关信息,请说明你无法从提供的材料中找到答案。
上下文:
{context}
问题:
{question}
请提供详细、准确的回答:"""
prompt = PromptTemplate(
template=template,
input_variables=["context", "question"]
)
return RetrievalQA.from_chain_type(
llm=self.llm,
chain_type="stuff",
retriever=self.vector_store.as_retriever(),
chain_type_kwargs={"prompt": prompt},
return_source_documents=True
)
def query(self, question):
"""查询RAG系统"""
result = self.qa_chain({"query": question})
return {
"answer": result["result"],
"source_documents": result["source_documents"]
}
5.4.2. 高级RAG技术
1. 多跳推理 (Multi-hop Reasoning)
- 通过多次检索和推理,解决复杂问题
- 每次检索基于前一次的结果进行优化
2. 自我反思 (Self-Reflection)
- 让模型评估自己的回答质量
- 根据评估结果决定是否需要重新检索或修正答案
3. 知识图谱增强
- 结合知识图谱的结构化信息
- 提供更精确的关系推理能力
6. 模型微调技术详解
6.1. 微调的基本概念
模型微调 (Fine-tuning) 是指在预训练模型的基础上,使用特定领域的数据进行进一步训练,使模型适应特定任务或领域的需求。相比从零开始训练,微调能够大幅减少训练时间和数据需求,同时获得更好的性能。
6.1.1. 微调的优势
- 数据效率: 只需要少量领域数据即可获得良好效果
- 计算效率: 相比预训练,微调的计算成本大幅降低
- 性能提升: 在特定任务上通常优于通用模型
- 定制化: 可以根据具体需求调整模型行为
6.2. 微调方法分类
6.2.1. 全参数微调 (Full Fine-tuning)
- 特点: 更新模型的所有参数
- 优点: 效果最好,能够充分适应新任务
- 缺点: 计算成本高,需要大量存储空间
- 适用场景: 拥有充足计算资源,追求最佳性能
6.2.2. 参数高效微调 (PEFT)
1. LoRA (Low-Rank Adaptation)
- 核心思想: 只训练低秩矩阵,保持原模型参数不变
- 优势: 训练参数少,存储需求小,可灵活切换不同适配器
- 实现: 在Transformer的注意力矩阵中添加低秩分解
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
# 加载预训练模型
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
# 配置LoRA
lora_config = LoraConfig(
r=8, # 低秩矩阵的秩
lora_alpha=32, # 缩放因子
target_modules=["q_proj", "v_proj"], # 目标模块
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
# 应用LoRA
peft_model = get_peft_model(model, lora_config)
print(f"可训练参数数量: {peft_model.print_trainable_parameters()}")
2. Prefix Tuning
- 核心思想: 只训练前缀向量,保持模型主体不变
- 优势: 训练稳定,不会破坏原模型知识
- 缺点: 序列长度增加,推理效率降低
3. P-Tuning v2
- 核心思想: 使用可学习的提示向量
- 优势: 适用于各种模型架构,效果稳定
- 应用: 分类、生成、问答等多种任务
6.2.3. 指令微调 (Instruction Tuning)
- 核心思想: 让模型学会理解并执行各种指令
- 数据格式: 指令-输入-输出的三元组
- 优势: 提高模型的泛化能力和指令跟随能力
6.3. 微调实战指南
6.3.1. 数据准备
1. 数据收集
- 内部数据: 企业文档、客服记录、产品说明
- 公开数据: 开源数据集、网络爬取数据
- 合成数据: 使用LLM生成高质量的训练数据
2. 数据格式化
# 指令微调数据格式示例
instruction_data = [
{
"instruction": "解释什么是机器学习?",
"input": "",
"output": "机器学习是人工智能的一个分支,它使计算机系统能够从数据中自动学习和改进,而无需明确编程。通过算法和统计模型,机器学习系统可以识别模式、做出预测和决策。"
},
{
"instruction": "将以下文本翻译成英语",
"input": "人工智能正在改变世界",
"output": "Artificial intelligence is changing the world"
}
]
# 对话数据格式示例
conversation_data = [
{
"messages": [
{"role": "user", "content": "你好,请介绍一下你自己"},
{"role": "assistant", "content": "我是一个AI助手,基于大语言模型技术构建。我可以帮助您回答问题、提供信息、协助创作等多种任务。很高兴为您服务!"}
]
}
]
6.3.2. 微调训练流程
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
TrainingArguments,
Trainer
)
from datasets import Dataset
import torch
class ModelFinetuner:
def __init__(self, model_name, dataset_path):
self.model_name = model_name
self.dataset_path = dataset_path
self.tokenizer = None
self.model = None
self.dataset = None
def load_model_and_tokenizer(self):
"""加载模型和分词器"""
self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
self.model = AutoModelForCausalLM.from_pretrained(
self.model_name,
torch_dtype=torch.float16,
device_map="auto"
)
# 设置pad_token
if self.tokenizer.pad_token is None:
self.tokenizer.pad_token = self.tokenizer.eos_token
def prepare_dataset(self):
"""准备训练数据集"""
# 加载数据
raw_data = self._load_training_data()
# 转换为Dataset对象
self.dataset = Dataset.from_list(raw_data)
# 数据预处理
def preprocess_function(examples):
# 构建输入文本
inputs = []
for instruction, input_text, output in zip(
examples["instruction"],
examples["input"],
examples["output"]
):
if input_text:
prompt = f"指令: {instruction}\n输入: {input_text}\n输出: "
else:
prompt = f"指令: {instruction}\n输出: "
full_text = prompt + output
inputs.append(full_text)
# 分词
tokenized = self.tokenizer(
inputs,
truncation=True,
padding=True,
max_length=512,
return_tensors="pt"
)
return tokenized
self.dataset = self.dataset.map(
preprocess_function,
batched=True,
remove_columns=self.dataset.column_names
)
def train(self, output_dir, num_epochs=3, batch_size=8):
"""执行微调训练"""
training_args = TrainingArguments(
output_dir=output_dir,
num_train_epochs=num_epochs,
per_device_train_batch_size=batch_size,
gradient_accumulation_steps=4,
optim="adamw_torch",
save_steps=500,
logging_steps=100,
learning_rate=2e-5,
weight_decay=0.01,
fp16=True,
bf16=False,
max_grad_norm=1.0,
max_steps=-1,
warmup_ratio=0.03,
group_by_length=True,
lr_scheduler_type="cosine",
evaluation_strategy="no",
save_strategy="epoch",
load_best_model_at_end=False,
push_to_hub=False,
report_to=None,
)
trainer = Trainer(
model=self.model,
args=training_args,
train_dataset=self.dataset,
tokenizer=self.tokenizer,
)
# 开始训练
print("开始微调训练...")
trainer.train()
# 保存模型
trainer.save_model(output_dir)
self.tokenizer.save_pretrained(output_dir)
print(f"模型已保存到: {output_dir}")
def _load_training_data(self):
"""加载训练数据(示例)"""
# 这里应该实现实际的数据加载逻辑
return []
6.3.3. 模型评估与优化
1. 评估指标
- 自动化指标: BLEU、ROUGE、METEOR、BERTScore
- 人工评估: 相关性、准确性、流畅性、安全性
- 任务特定指标: 准确率、F1分数、AUC等
2. 优化策略
- 超参数调优: 学习率、批大小、训练轮数
- 数据增强: 回译、同义词替换、数据扩充
- 正则化技术: Dropout、权重衰减、早停
更多推荐
所有评论(0)