面经01:北京某科技 机器学习量化
机器学习第一题描述1.What is overfitting? How to prevent overfitting (in both traditional method and deep learning)?解答过拟合是指的是模型在训练数据上表现非常好,但在未见过的测试数据上泛化能力较差。传统机器学习方法中避免过拟合,可以采用以下方法:
交叉验证:将可用数据分成多个子集,在一个子集上训练模型,在其他子集上评估模型。
l1和l2正则化:在损失函数中添加惩罚项,以抑制复杂或大参数值。
特征选择:选择仅对预测任务有重要贡献的最相关特征。剔除无关或冗余特征有助于减少过拟合。
earlystopping:在训练过程中监控模型在验证集上的性能,在性能开始下降时停止训练过程。这可以防止模型过度优化训练数据。
在深度学习中避免过拟合方法:
Dropout:在训练过程中随机丢弃部分神经元,以防止模型过度依赖特定的神经元
数据增强:通过对输入数据(图片)进行随机变换(如旋转、缩放或裁剪),增加训练数据集的大小,也可以用框架自带的Augment
BatchNomolization:通过调整和缩放每 ...
007 详谈大模型训练和推理优化技术-csdn-王嘉宁
转载本文转载于:@csdn-王嘉宁
引言ChatGPT于2022年12月初发布,震惊轰动了全世界,发布后的这段时间里,一系列国内外的大模型训练开源项目接踵而至,例如Alpaca、BOOLM、LLaMA、ChatGLM、DeepSpeedChat、ColossalChat等。不论是学术界还是工业界,都有训练大模型来优化下游任务的需求。
然而,大量实验证明,在高质量的训练语料进行指令微调(Instruction-tuning)的前提下, 超过百亿参数量的模型才具备一定的涌现能力 ,尤其是在一些复杂的推理任务上,例如下图:
图来自论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》
也就是说,如果我们需要通过大模型技术来提升业务指标,不得不要求我们去训练一个百亿规模的模型。
然而,一般情况下,我们不具备如此大规模的计算资源,尤其是对于学校里一般的科研团队,也许只有少量V100(32G),运气好可能会有几台A100。因此在有限的算力条件下训练或推理一个百亿量级的大模型是不太现实的。因此,无疑 ...
004 大模型微调总结-知乎-绝密伏击
转载本文转载于:@知乎-绝密伏击
总结
年份
inc
method
创新之处
参数
哪一层
位置
初始化方式
前辈
论文
2019
谷歌
Adapter Tuning
1、设计Adapter结构(即MLP),嵌入 Transformer 的结构2、Adapter 结构:- down-project层:将高维度特征映射到低维特征。- 非线性层ReLU:对低维特征进行处理,以更好地表达特征信息。- up-project结构:将低维特征映射回原来的高维特征。- skip-connection结构:确保即使在最差的情况下,模型仍能正确处理输入特征,类似于残差结构。
+3.6%
Transformer ffn和layerNorm之间
《Parameter-Efficient Transfer Learning for NLP》
年份
inc
method
创新之处
参数
哪一层
位置
初始化方式
前辈
论文
2021
斯坦福
Prefix Tuning
1、在每个Attention 层 输入token 之前构造一段任务相关的 virtual tokens ...
LC415. 字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = "11", num2 = "123"
输出:"134"
示例 2:
输入:num1 = "456", num2 = "77"
输出:"533"
示例 3:
输入:num1 = "0", num2 = "0"
输出:"0"
提示:
1 <= num1.length, num2.length <= 104
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
思路分析模拟123456789101112131415class Solution: def addStrings(self, nums1: str, nums2: str) -> str: ...
005 大语言模型综述[持续更新]-csdn-王嘉宁
转载本文转载于:@csdn-华师数据学院·王嘉宁@知乎-华师数据王嘉宁
Prompt-Tuning——深度解读一种全新的微调范式首次发布日期:2021年11月19日第一次全面更新:2023年2月3日第二次全面更新:2023年3月29日
阅读该博客,您将系统地掌握如下知识点:
什么是预训练语言模型?
什么是prompt?为什么要引入prompt?相比传统fine-tuning有什么优势?
自20年底开始,prompt的发展历程,哪些经典的代表方法?
面向不同种类NLP任务,prompt如何选择和设计?
面向超大规模模型,如何借助prompt进行参数有效性训练?
面向GPT3,什么是In-Context Learning?什么是Chain-Of-Thought?
面向黑盒模型,如何使用prompt?
ChatGPT里有哪些prompt技术?
未来prompt的发展与研究前景
Prompt的由浅入深的理解:
1级:Prompt是一种对任务的指令;
2级:Prompt是一种对预训练目标的复用;
3级:Prompt本质是参数有效性训练;
**热点预览🔥预告: HugNLP 正式发布 ...
PyTorch垃圾回收-torch_gc函数
torch_gc()是PyTorch库中的一个函数,用于手动触发垃圾回收(Garbage Collection)。垃圾回收是一种自动内存管理机制,用于释放不再使用的内存空间,以提高内存利用率。在PyTorch中,垃圾回收主要用于释放不再需要的张量(Tensors)和计算图(Computation Graph)的内存。通常情况下,PyTorch会自动进行垃圾回收,但在某些情况下,手动触发垃圾回收可以更及时地释放内存,从而避免内存占用过高的问题。torch_gc()函数的调用会立即触发垃圾回收,释放不再需要的内存。但需要注意的是,频繁地手动触发垃圾回收可能会导致性能下降,因为垃圾回收本身也需要一定的计算资源。因此,一般情况下,建议使用默认的自动垃圾回收机制。只有在确实需要释放大量内存的情况下,才考虑手动触发垃圾回收。
002 大模型LLM-微调经验分享&总结-知乎-刘聪NLP
转载本文转载于:@知乎-刘聪NLP
写在前面大型语言模型横行,之前非常焦虑,现在全面拥抱。目前也有很多开源项目进行大模型微调等,笔者也做了一阵子大模型了,特此来介绍一下ChatGLM-6B模型微调经验,并汇总了一下目前开源项目&数据。笔者与很多人微调结论不同,本人在采用单指令上进行模型微调,发现模型微调之后,「并没有出现灾难性遗忘现象」。
ChatGLM-6B模型微调(关系抽取)模型越大对显卡的要求越高,目前主流对大模型进行微调方法有三种:Freeze方法、P-Tuning方法和Lora方法。笔者也通过这三种方法,在信息抽取任务上,对ChatGLM-6B大模型进行模型微调。为了防止大模型的数据泄露,采用一个领域比赛数据集-汽车工业故障模式关系抽取,随机抽取50条作为测试集。
详细代码见上面的GitHub链接,并且也被ChatGLM官方收录。
Freeze方法Freeze方法,即参数冻结,对原始模型部分参数进行冻结操作,仅训练部分参数,以达到在单卡或不进行TP或PP操作,就可以对大模型进行训练。
微调代码,见finetuning_freeze.py,核心部分如下:
1234fo ...
001 阿里云搭建langchain-ChatGLM知识库问答-环境搭建
本文转载于:AIGC:在云上从0开始搭建langchain-ChatGLM,构建私域知识问答机器人DEMO根据实践过程进行部分修改
简介AIGC短板:知识茧房(缺少行业领域的私域数据,专有问题解答效果差;数据时效性缺陷,对实时要求高的问题效果差)。解法之一:私域数据Embedding +向量数据库(语义检索—-向量相似度匹配)。将问题向量化,结合私域知识库中匹配到的“精确”内容,生成高质量prompt,再结合LLM的既有知识,以及概括、推理、扩展等能力,大大提升回答的准确性。这也是langchain-ChatGLM的基本原理:本文介绍了在阿里云上从0开始搭建langchain-ChatGLM,构建私域知识问答机器人DEMO。可用于日常学习和研究,减少环境搭建时踩坑。
安装步骤以在CentOS 7.9 64位 64位系统搭建LLM环境,安装《langchain-ChatGLM》为例:注:Centos的安装和Ubuntu有区别,不是apt而是yum
1、 创建GPU实例(显存8GB以上,磁盘至少50G)本文选择了带V100 GPU的 ecs.gn6e-c12g1.3xlarge实例,在实 ...
003【LLM】从零开始训练大模型-知乎-何枝
转载本文转载于:@知乎-何枝
在这篇文章中,我们将尽可能详细地梳理一个完整的LLM训练流程。包括模型预训练Pretrain、tokenizer训练 、指令微调Instruction Tuning、奖励模型Reward Mod和 强化学习RLHF等环节。由于内容比较多,我们将逐步整理并完善这个文档。
预训练阶段Pretraining Stage当前,不少工作选择在一个较强的基座模型上进行微调,且通常效果不错(如:[alpaca]、[vicuna] 等)。
这种成功的前提在于:预训练模型和下游任务的差距不大,预训练模型中通常已经包含微调任务中所需要的知识。
但在实际情况中,我们通常会遇到一些问题,使得我们无法直接使用一些开源 backbone:
语言不匹配:大多数开源基座对中文的支持都不太友好,例如:[Llama]、[mpt]、[falcon] 等,这些模型在英文上效果都很优秀,但在中文上却差强人意。
续写任务测试
LLaMA
MPT
杭州西湖是
杭州西湖是杭州的一个静静的一个游泳池,游泳池是杭州西湖的一个游泳池,游泳池是杭州西湖的一个游泳池,游泳池是杭州西湖的一个 ...
LC15. 三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。
示例 2:
输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。
示例 3:
输入:nums ...