方法 | 核心原理 | 优点 | 缺点 | 典型使用场景 |
---|---|---|---|---|
全参数微调 | 调整预训练模型的所有参数,完全适配下游任务。 | 1. 性能最优,充分挖掘模型潜力 2. 适用性广,不受任务复杂度限制 | 1. 显存和计算资源消耗大(如70B模型需数百GB显存) 2. 训练时间长,易过拟合 | 资源充足的高精度任务(如专业领域生成、复杂推理) |
LoRA | 冻结原模型权重,注入可训练的低秩矩阵(A、B)模拟参数增量,仅更新0.01%-1%参数 | 1. 显存需求低(7B模型仅需14GB) 2. 无推理延迟,权重可合并 3. 支持多任务模块化切换 | 1. 低秩近似可能损失性能(复杂任务) 2. 需手动调整秩(r)和缩放系数(α) | 资源受限的多任务适配(如对话生成、分类任务) |
QLoRA | 在LoRA基础上引入4-bit量化,反量化计算梯度,进一步降低显存 | 1. 显存较LoRA再降33%(如21GB→14GB) 2. 保留LoRA灵活性的同时突破显存限制 | 1. 训练时间增加约39% 2. 量化可能引入精度损失(极端低bit时) | 超大规模模型微调(如千亿参数)或消费级GPU(如单卡12GB) |
分类 "Ai" 下的文章
一、Diffusion模型:生成式AI的新星
Diffusion模型(扩散模型)是近年来兴起的一类生成模型,其灵感来源于物理学中的扩散现象,如同墨水滴入水中逐渐扩散的过程。Diffusion模型通过模拟数据的逐步噪声添加和去除过程来学习数据分布,已成为图像生成领域的新标杆。
核心原理与工作流程:
Diffusion模型包含两个关键过程:前向扩散过程和反向去噪过程。前向过程逐步向数据添加高斯噪声,将复杂的数据分布逐渐转化为简单的高斯分布;反向过程则学习如何从噪声中逐步重建原始数据。具体而言,给定原始数据x₀,前向过程在T步内逐步生成噪声增加的x₁到x_T,最终x_T成为纯噪声;反向过程则训练一个去噪网络,学习从x_t预测x_{t-1},从而能够从随机噪声生成新样本。
1. SAM2 核心功能
SAM2 是 Meta 推出的新一代图像与视频分割基础模型,基于第一代 SAM 改进,具备以下核心功能:
- 统一架构:同时支持图像和视频分割,通过流式处理框架实现实时分割(44 FPS),尤其擅长处理动态场景和长视频。
- 零样本泛化:无需特定训练即可分割未见过的物体或视觉域(如医学影像中的罕见病变)。
- 交互式分割:支持点、框、掩码等多种提示方式,允许用户通过点击或框选细化分割结果。
- 记忆机制:通过流式记忆模块跟踪视频中的对象,解决遮挡、光照变化等问题,确保跨帧分割一致性。
- 多掩码预测:在复杂场景(如重叠物体)中生成多个候选掩码,并通过置信度选择最优结果。
问题:调用合约方法时报错Error: Returned error: VM Exception while processing transaction
解决:参数传递错误导致require条件修饰符不满足,web3.js是1.7
方法:
部署合约时传的参数alice是小写开头的,且为byte32
console.time('deploy time');
const myContract = await new web3.eth.Contract(JSON.parse(interface));
myContract.deploy({
data: bytecode,
arguments: [[web3.utils.asciiToHex('alice'), web3.utils.asciiToHex('bob')]]
})
.send({
from: accounts[0],
gas: 1500000,
gasPrice: '30000000000000'
})
.then(function(newContractInstance){
console.log('合约部署成功:', newContractInstance.options.address) // instance with the new contract address
});
问题:以太坊合约部署失败,报错:TypeError: param.map is not a function 或者 Error: Invalid number of parameters for "undefined". Got 2 expected 1!
解决:官方文档写的比较特别,所以被误导了。web3使用的是1.7.0
方法:
官方文档:
const myContract = await new web3.eth.Contract(JSON.parse(interface));
myContract.deploy({
data: '0x12345...',
arguments: [123, 'My String']
})
.send({
from: '0x1234567890123456789012345678901234567891',
gas: 1500000,
gasPrice: '30000000000000'
}, function(error, transactionHash){ ... })
.on('error', function(error){ ... })
.on('transactionHash', function(transactionHash){ ... })
.on('receipt', function(receipt){
console.log(receipt.contractAddress) // contains the new contract address
})
.on('confirmation', function(confirmationNumber, receipt){ ... })
.then(function(newContractInstance){
console.log(newContractInstance.options.address) // instance with the new contract address
});