AI_Singer

AI_Singer

Winter Lv4

AI_SINGER

Overall

罗列相关链接,总结一些FAQ

  • 训练的时候改一下保存模型的step间隔 400 或者600 也许可以
  • 拼接音轨
  • 后期处理 bandlab 也许不错 melodyne 修音软件 似乎更好一点。可以学学

PEFT 参数高效微调

背景

  • 深度学习的研究中出现了许多大型预训练模型,例如GPT-3、BERT等,这些模型可以在多种自然语言处理任务中取得优异的性能表现。然而,这些大型预训练模型的训练成本非常高昂,需要庞大的计算资源和大量的数据,一般人难以承受。这也导致了一些研究人员难以重复和验证先前的研究成果。为了解决这个问题,研究人员开始研究Parameter-Efficient Fine-Tuning (PEFT)技术。PEFT技术旨在通过最小化微调参数的数量和计算复杂度,来提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本。这样一来,即使计算资源受限,也可以利用预训练模型的知识来迅速适应新任务,实现高效的迁移学习。因此,PEFT技术可以在提高模型效果的同时,大大缩短模型训练时间和计算成本,让更多人能够参与到深度学习研究中来。

总览

  • 冻结预训练模型的某些层并仅微调特定于下游任务的最后几层

常见的几种方法的基本思想与原理简介

  • BitFit

    优点:代码简单,原理简单。 缺点:优化效果不清楚,具体效果随着不同模型的参数规模变化较大,不具有太多的实际用处。

  • prefix tuning

    Prefix Tuning方法由斯坦福的研究人员提出,与Full-finetuning更新所有参数的方式不同,该方法是在输入token之前构造一段任务相关的virtual tokens作为Prefix,然后训练的时候只更新Prefix部分的参数,而Transformer中的其他部分参数固定。同时,为了防止直接更新Prefix的参数导致训练不稳定的情况,他们在Prefix层前面加了MLP结构(相当于将Prefix分解为更小维度的Input与MLP的组合后输出的结果),训练完成后,只保留Prefix的参数。

  • prompt tuning

    该方法可以看作是Prefix Tuning的简化版本,只在输入层加入prompt tokens,并不需要加入MLP进行调整来解决难训练的问题。同时还有一个区别就是,prompt tuning只在输入层加入,而prefix 是在transformer计算的每一层都加入。同时,prompt tuning 又分为soft , hard prompt 两种,区别就是hard 通常初始化的prompt是明确指定了与下游任务有关的。soft可以理解为泛化的。同时prompt tuning 在参数规模增大时表现出的效果更加突出。

    • p tuning

      用MLP+LSTM的方式来对prompt embedding进行一层处理

  • Adapter tuning

    如下图所示的Adapter结构,将其嵌入Transformer的结构里面,在训练时,固定住原来预训练模型的参数不变,只对新增的Adapter结构进行微调。

    存在一个问题,因为额外引入的一个adapter层,可能导致最终推理时长增加。

  • lora

    核心思想就是将权重更新的Δw分解为两个低秩小矩阵。 在训练时,我们同时走两条通路,一条Δw,另一条就是ab矩阵,最后优化时我们只更新ab矩阵,最后合并回去。具有推理时没有额外计算开销的优点。prompt系列会额外引入参数。

  • IA

    原理简言之,就是加入四个可学习向量处理原本transformer中的k,v,q,ffn 。 优化时只改变这几个可学习向量。最终也没有额外计算开销。

效果总览

工具使用

目前使用最为广泛的peft的现成库是hugging face的peft,高度集成,调用方便,具体使用的时候查看相关的文档。

更多思考

上述所有的方法,具体应用时存在的问题,以及超参数的选择都存在很大的调整空间,这里提供几个参考资料供想要深入探索的群友参考

更多的方法与更加具体的原理

一些方法的具体代码演示

peft的代码实现

peft的起源

谢谢大家 :)

PS : 上次没有解答的关于lora 为什么分解成两个矩阵可以优化

https://arxiv.org/pdf/2106.09685

总结一下就是:是将Δw矩阵分解,但是是一个向低维空间投射,也就是说降秩。也就是说lora有一个假设的前提就是我们微调一个矩阵降秩后的矩阵也可以达到接近的效果。

  • Post title:AI_Singer
  • Post author:Winter
  • Create time:2024-04-12 17:16:48
  • Post link:https://spikeihg.github.io/2024/04/12/AI-Singer/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
if (hexo-config('comment.enable') == true && hexo-config('comment.use') != "") { if (hexo-config('comment.use') == "waline") { @require "./waline.styl" } else if (hexo-config('comment.use') == "gitalk") { @require "./gitalk.styl" } else if (hexo-config('comment.use') == "twikoo") { @require "./twikoo.styl" } } .comments-container { display inline-block margin-top $spacing-unit width 100% #comment-anchor { width 100% height 10px } .comment-area-title { width 100% margin 10px 0 font-size 1.38rem color var(--default-text-color) font-family "Noto Sans", "Noto Sans SC",sans-serif font-weight bold i { color var(--default-text-color) } +redefine-tablet() { margin 5px 0 font-size 1.2rem } } }