为什么股票交易适合微调
在大模型应用当中最直接的方式就是用当前效果最好的模型, 但如果涉及到一些非常窄的决策领域, 例如股票交易, 或者法律咨询。。。那么微调也是一个比较好的方式, 特别是自己已经有验证过的高概率胜出(或者自认为高概率胜出)的股票逻辑。那我们自己可以构建对应的语料来微调deepseek, 以便他能够按照我们的逻辑来进行决策。
股票交易我一直有一个很简单的交易逻辑, 测算了一下胜率大概是75%左右。我自己也微调了一个deepseek小模型, 外部数据使用seekingalpha, 目前还在实验当中
针对股票交易的微调, 语料我就不公开了(一方面是自己还在优化,另外一方面是语料也不一定对, 别误导了大家, 简单来说就是监测到一只股票下降的值比较大,但是当行有判定。该公司的基本面没有变化,则判定买入), 微调的方式就按照下文的方式进行微调就可以,
注意:下列方式是针对法律咨询的应用, 但所有的细节都一样, 除了语料
DeepSeek发布其开源推理模型DeepSeek-R1颠覆了AI领域也使得整个中国ai领域甚至中国的资产都进行了重新的估值。deepseek以较低的成本提供与OpenAI的o1相媲美的性能。另外,DeepSeek已将其推理能力提炼成了几个较小的模型。
Deepseek-R1介绍
DeepSeek-R1 是由 DeepSeek(你也可以说他是幻方量化)开发的推理模型。基于 DeepSeek-V3-Base(总参数为671B,每次推理时活跃的参数为37B),DeepSeek-R1 使用强化学习(RL)在提供最终答案之前生成一系列思维链(CoT)。为了使这些能力更易于访问,DeepSeek 将其 R1 输出提炼成了几个较小的模型:
-
基于 Qwen 的提炼模型: 1.5B、7B、14B 和 32B
-
基于 Llama 的提炼模型: 8B 和 70B
Note: 对于14B模型,正确的变体是 DeepSeek-R1-Distill-Qwen-14B。 ✨
本文演示了如何微调其中一个模型(使用我们自己的自定义思维链数据集),然后保存和部署微调模型。
为什么 DeepSeek-R1 厉害
DeepSeek-R1 之所以厉害,主要是因为以下几个原因:
•开源可用性: 完全开源,允许无限制使用、修改和分发。
•成本效益的训练: 500 万美元进行训练 , 远低于大规模语言模型通常相关的成本。
•强化学习和 CoT 推理: 采用先进的强化学习技术来开发思维链推理。
•高效蒸馏: 蒸馏模型在保持强大推理能力的同时,资源利用效率高。
•活跃的社区和生态系统: 不断增长的工具生态系统、经过调优的模型和社区驱动的资源。现在几乎所有的大厂都宣布接入。
DeepSeek-R1 与 OpenAI 的 O3-Mini-High
推理模型差异
虽然 DeepSeek-R1 和 OpenAI 的 O3-Mini-High 推理模型都是为了高级问题解决而设计的,但它们有显著的区别:
开源 vs. 闭源
•DeepSeek-R1: 完全开源。
•OpenAI O3-Mini-High: 专有,受使用限制。
成本和可访问性
•DeepSeek-R1: 训练和操作成本更低。
•OpenAI O3-Mini-High: API 费用较高,运营成本更高。一般说来openai的模型都是行业里面最贵的。
性能和效率
•DeepSeek-R1: 使用 RLHF 和 CoT 推理以实现资源高效利用。
•OpenAI O3-Mini-High: 闭源性限制了优化
社区和生态支持
•DeepSeek-R1: 在 Hugging Face 上有着不断壮大的社区和经过精细调整的模型。
•OpenAI O3-Mini-High: 通过 OpenAI 的生态系统得到了强大的支持,但受专有限制。一般说来更多的是大家在单项的对问他,没办法对他进行特性的优化。而且很多时候其他模型好的话,很容易就被切换。比如以前我们就将open I的接口切换到了anthropic的接口。
这些差异使得 DeepSeek-R1 成为了一个吸引人的选择,可以实现高效的推理性能而不受专有限制。
搭建微调环境
环境设置和身份验证
安装依赖
使用喜欢的带有 GPU 访问权限的环境, 比如我直接使用L20。虽然该gpu更适合进行推理,但是用来进行微调嘛,随便一块gpu都是可以的。运行:
!pip install unsloth` `!pip install --force-reinstall--no-cache-dir--no-deps git+https://github.com/unslothai/unsloth.git
Explanation: 这将安装 Unsloth - 一个可以加快微调速度的框架(速度提高了 2 倍,内存使用减少了 70%)。
unsloth特别适合用来在单卡上进行微调。
登录 Hugging Face 和 Weights & Biases
没有账号需要单独注册一个,这是必须的。
安全地检索您的 API token:
from huggingface_hub import login``hf_token = "your_huggingface_token"``login(hf_token)``
然后,初始化 Weights & Biases (wandb):
import wandb``wb_token = "your_wandb_token"``wandb.login(key=wb_token)``run = wandb.init(` `project='Fine-tune-DeepSeek-R1-Distill-Qwen-14B on Legal COT Dataset',` `job_type="training",` `anonymous="allow"``)
Explanation: 这些步骤确保了模型的安全下载和实验跟踪。
这里提示一下
-
我们可以在这里对很多的模型进行微调,只要改一下模型的名字就可以。
-
如果hugging face连接不上,那你需要手动这样模型下载上传到服务器。
加载模型和分词器
使用 Unsloth 进行 4 位量化加载深度 14B 模型 - DeepSeek-R1-Distill-Qwen-14B
`from unsloth import FastLanguageModel``max_seq_length = 2048` `dtype = None` `load_in_4bit = True``model, tokenizer = FastLanguageModel.from_pretrained(` `model_name = "unsloth/DeepSeek-R1-Distill-Qwen-14B",` `max_seq_length = max_seq_length,` `dtype = dtype,` `load_in_4bit = load_in_4bit,` `token = hf_token,` `)`
Explanation: 针对最多 2048 个标记的序列配置模型,使用 4 位量化以提高内存效率。这些参数都是可以调的。
预微调推理
使用法律推理提示测试模型的基准性能, 例如此处微调一个法律相关的模型。
定义提示并运行推理
prompt_style = """以下是描述任务的指令,配以提供更多上下文的输入。` `编写一个适当完成请求的响应。` `在回答之前,仔细考虑问题,并创建一条条逻辑和准确的响应链。` `Output:``### 指示:``您是一位法律专家,具有法律推理、案例分析和法律解释的高级知识。``请回答以下法律问题。``### 问题:``{}``### 回复:``<think>{}"""``question = "两个当事人签订了合同,但一方声称他们是在受到胁迫的情况下签署的。哪些法律原则适用于确定合同的有效性?"``FastLanguageModel.for_inference(model)``inputs = tokenizer([prompt_style.format(question, "")], return_tensors="pt").to("cuda")``outputs = model.generate(` `input_ids=inputs.input_ids,` `attention_mask=inputs.attention_mask,` `max_new_tokens=1200,` `use_cache=True,``)``response = tokenizer.batch_decode(outputs)``print(response[0].split("### Response:")[1])``## 准备训练数据 🗃 ️🛠 ️🧾``加载并格式化数据集(这里我们使用法律思维链数据集)。⚖️📚🔍`` ```ini ``train_prompt_style = """以下是描述一个任务的指令,配以提供更多背景的输入。``写出一个适当完成请求的回应。``在回答之前,仔细考虑问题,并创建一个逻辑和准确的响应的逐步思路链。` `Output:``### 指示:``您是一位法律专家,具有法律推理、案例分析和法律解释的高级知识。``请回答以下法律问题。``### 问题:``{}``### 响应:``<think>``{}``</think>``{}"""``EOS_TOKEN = tokenizer.eos_token
def formatting_prompts_func(examples):` `inputs = examples["Question"]` `cots = examples["Complex_CoT"]` `outputs = examples["Response"]` `texts = []` `for input_text, cot, output_text in zip(inputs, cots, outputs):` `text = train_prompt_style.format(input_text, cot, output_text) + EOS_TOKEN` `texts.append(text)` `return {"text": texts}
加载和映射数据集
from datasets import load_dataset``dataset = load_dataset("kienhoang123/QR-legal", "en", split="train[0:500]", trust_remote_code=True)``dataset = dataset.map(formatting_prompts_func, batched=True)``print(dataset["text"][0])``####Note: This is a pseudo dataset. Please create or use an appropriate dataset for your own use case.
使用 LoRA 进行精细调整
使用 LoRA(低秩适应)来高效地对模型进行微调,只调整关键层
model = FastLanguageModel.get_peft_model(` `model,` `r=16,` `target_modules=[` `"q_proj",` `"k_proj",` `"v_proj",` `"o_proj",` `"gate_proj",` `"up_proj",` `"down_proj",` `],` `lora_alpha=16,` `lora_dropout=0,` `bias="none",` `use_gradient_checkpointing="unsloth",` `random_state=3407,` `use_rslora=False,` `loftq_config=None,``)
配置和运行训练过程
从 TRL 初始化 SFTTrainer 并使用适当的训练参数
from trl import SFTTrainer``from transformers import TrainingArguments``from unsloth import is_bfloat16_supported``trainer = SFTTrainer(` `model=model,` `tokenizer=tokenizer,` `train_dataset=dataset,` `dataset_text_field="text",` `max_seq_length=max_seq_length,` `dataset_num_proc=2,` `args=TrainingArguments(` `per_device_train_batch_size=2,` `gradient_accumulation_steps=4,` `warmup_steps=5,` `max_steps=60,` `learning_rate=2e-4,` `fp16=not is_bfloat16_supported(),` `bf16=is_bfloat16_supported(),` `logging_steps=10,` `optim="adamw_8bit",` `weight_decay=0.01,` `lr_scheduler_type="linear",` `seed=3407,` `output_dir="outputs",` `),``)
开始训练
trainer_stats = trainer.train()
微调后推理
使用相同的提示结构测试您的微调模型
question = “两个当事人签订了合同,但一方声称他们是在胁迫下签署的。哪些法律原则适用于确定合同的有效性?”
FastLanguageModel.for_inference(model)``inputs = tokenizer([prompt_style.format(question, "")], return_tensors="pt").to("cuda")``outputs = model.generate(` `input_ids=inputs.input_ids,` `attention_mask=inputs.attention_mask,` `max_new_tokens=1200,` `use_cache=True,``)``response = tokenizer.batch_decode(outputs)``print(response[0].split("### Response:")[1])
结论
DeepSeek-R1不仅效果好,而且成本比较低,同时还开源。一般情况下我们并不需要进行微调。但是如果我们完成的任务相对具体领域又比较窄,那这个时候我们用几千个或者几万条料去进行微调,以便更加精准地完成我们领域的任务,那这样就比较适合了。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。