读书笔记
读书笔记这一篇博客用于记录日常阅读中摘录的好的句子。从2022.2.2开始,希望从此之后阅读可以一直陪伴我的余生。
谨以此句勉励未来的自己:
你太急切地想要一个答案了。想要风光的学位,瞬间的博学,想要意气风发,想闪着金光走向喜欢的人。
但现实告诉我,操之过急便会败北。它要我等,要我耐得住不断延长的时间线,要我交付出足够的努力堆砌在沉闷、晦涩的时光里,才肯将一切“我想要”一点一点递送至我手里。
爱的艺术爱情笔记百年孤独被讨厌的勇气表征:文化表象与意指实践不能承受的生命之轻非暴力沟通富爸爸穷爸爸蛤蟆先生去看心理医生孩子你慢慢来荒原狼恋人絮语目送那些古怪又让人忧心的问题能力陷阱批判性思维强迫症的森田疗法亲爱的安德烈亲密关系人类简史人类群星闪耀时人生的智慧杀死一只知更鸟时间从来不语,却回答了所有问题斯坦福高效睡眠法死水恶波天才在左疯子在右拖延心理学未来简史文化理论与大众文化导论乌合之众一个笔记本搞定你的拖延症优秀的绵羊月亮和六便士自卑与超越:你要清楚自己应该怎样过好这一生我相信这世界上一定有这样的天才:他们的出现就是为了引领时代的潮流,将整个人类文明引导向某个方向;但是对于我们这种普通人来讲, ...
2023-12-19论文笔记
如何更加高效地训练有偏好的 LLMs之前提到了三种改进 LLMs 对齐的方法:使用 AI 代替人类,优化微调数据以及优化训练流程。本周就这三个方向分别选出一篇代表性论文进行介绍(RLAIF、DPO、LIMA三篇论文之前分别进行过总结,因此本周介绍另外三篇)。
方式一:使用AI替代人类——RRHF(Rank Response to align Human Feedback)底层思想:这一类方法使用AI模型来替换人工标注偏好数据,或者指导模型训练,代表工作——RLAIF。
现有方法的缺陷现有的方法是 openai 提出的 SFT —> RM —> PPO 流程。但是其中 PPO 算法对于超参数敏感,训练难以收敛,在训练中需要同时部署多个模型,让普通组织难以自己进行对齐,因此作者提出了新的对齐方法来替代原有的基于 RM 和 PPO 的方法。
方法该方法的核心思想是直接在 RM 数据上优化 LLMs,让产生被接受回答的概率大于被拒绝回答的概率。具体来说,首先从多种来源收集某个 prompt 的响应(模型本身,chatgpt,GPT-4,人为撰写等),在训练过程中,同样可以改变采样响 ...
2023-12-05论文笔记
关于 LLMs 中强化学习步骤里 PPO 算法的具体实现LLMs 场景下强化学习的整体流程对于一般的强化学习而言,会有一个做动作的策略网络 $\pi$,它根据自己观测的状态 $s_i$,做出动作 $a_i$ 跟环境进行交互,然后环境会返回一个反馈 $r_i$,同时进入到下一个状态 $s_{i+1}$;策略网络再继续观测状态 $s_{i+1}$ 做出下一个动作 $a_{i+1}$ …直到达到最终状态。这样,策略网络和环境的一系列互动后最终会得到一个轨迹(trajectory),一般在一个轨迹上训练完叫做一个episode:$$\tau={s_1,a_1,r_1,s_2,a_2,r_2,\cdots,s_T,a_T,r_T}$$在 LLMs 训练的场景下,策略网络就是待微调的 LLMs,它做的事情就是接受 context(状态),执行后返回一系列文本(或者只是文本上的概率分布)(动作)。该策略的动作空间是与语言模型的词汇表相对应的所有 tokens,观察空间是可能的输入token 序列的分布,该分布也十分巨大,奖励函数是偏好模型和policy shift 约束的结合。
PPO 算 ...
2023-11-21论文笔记
写在前面最近面试的时候被问到了大模型压缩技术的相关问题,本人对此并无什么了解,因此阅读几篇相关论文进行初步了解。
常用的大模型压缩技术常用的大模型压缩技术可以被整理为下图:
剪枝(Pruning)剪枝是一种强大的技术,类似于给模型“减肥”,通过去掉一些不必要或多余的部分,以降低模型的大小和复杂性。我们可以把这些多余的东西想象成模型的“赘肉”,它们对模型性能几乎没有影响,反而占用了很大的内存和计算量。因此,我们可以直接去掉这些赘肉,在模型的性能几乎不受影响的同时提高模型的存储效率、内存利用率和计算效率。
剪枝有两种主要类型:结构化剪枝和非结构化剪枝。前者以一整组的形式去剪枝,比如说直接剪去整个神经元、通道或层。这种方式的好处在于能够降低模型的复杂性和内存占用,但同时整体的模型结构仍然得以保持。这就好比在修剪花园中的某一排树木之后,花园整体轮廓和结构依然清晰、整齐;后者则是以更细粒度的方式进行,它直接瞄准个别权重或神经元,就像单独修剪花园中的某几棵树木,虽然也减少了冗余,但是花园整体会有些凌乱,这样的方法可能导致模型变得稀疏却不规则,需要特殊的压缩技术来高效存储和计算,并且通常需要对LL ...
2023-11-7论文笔记
2023-11-7论文笔记BRANCH-SOLVE-MERGE IMPROVES LARGE LANGUAGE MODEL EVALUATION AND GENERATION背景现有的 LLMs 缺乏自一致性,并且不擅长分解并规划复杂的多约束问题。
工作作者提出了 Branch-Solve-Merge(BSM)——一种用于处理 multi-faceted 自然语言任务的分解方法,也是Large Language Model program(将LLMs嵌入到算法或程序中)的一个实例。具体来说,给定任意一个任务,branch模块通过将任务分解为多个并行的子任务来生成解决方案,其中每个子任务由一个唯一的分支表示,代表解决整体问题所需的不同组件,然后使用solve模块解决这些相互独立的子问题,最后使用merge模块将这些子问题的解决方案融合在一起,得到最终的整体解决方案。
作者在LLMs评估和约束文本生成这两个任务上进行了实验,示例如下图所示:
整体的算法流程图如下图所示:
效果在LLM评估任务上,使用的指标有LLM-Human Agreement (Ag)、Position Bias ...
2023-10-10论文笔记
Contrastive Decoding: Open-ended Text Generation as Optimization
想要解决的问题大语言模型存在的生成内容无关、重复、不连贯等问题。
灵感来源大语言模型的种种问题在更小的 LMs 上更为明显。
使用的方法
首先需要分别加载好两个 LM ,一个是大语言模型(例如 OPT-13B ),叫做 expert ,一个是小语言模型(例如 OPT-125M ),叫做 amateur 。并分别使用这两个模型对下一个 token 进行预测。
考虑到合理性约束的问题,需要将 token 的搜索空间限制在 expert 预测的概率高于某个阈值的子集中。
接着对该空间之中的每个 token 进行搜索,目标是最大化 expert 对数概率和 amateur 对数概率之间的差异。
方法效果How Language Model Hallucinations Can Snowball引言在之前的论文阅读中,我们主要关注的是那些由于知识的鸿沟而导致的幻觉现象,这篇论文关注的却是来源于其他的幻觉现象。
背景在现实应用中,LLMs的主要风险在于它们倾向于产生不 ...
Active RAG_DoLa
Active Retrieval Augmented Generation背景大语言模型能力很不错,但是仍旧存在生成幻觉,输出错误信息的现象,通过在外部知识源中检索到的合适信息来增强语言模型是一个潜在的方案。
现有方法的缺陷大多采用的是检索-生成的方式,仅仅只基于输入检索一次外部信息,对于长文本生成的应用场景,这是不够的,在这样的场景下,于生成过程中不断注入新的相关信息很有必要。仅有的一些多次查询的工作也是使用以前的全部上下文并以固定的间隔检索文档。
本工作提出的方法提出了 Forward-Looking Active REtrieval augmented generation (FLARE) 方法,使得模型可以灵活的决定什么时间,使用哪些内容进行检索。具体来说,该方法迭代地使用对下一个句子的预测来预估未来的内容,然后在预估内容中包含低置信度 token 时将其用作查询来检索相关文档以重新生成句子。
作者一共设计了两种FLARE方案,下面分别进行介绍:
FLARE with Retrieval Instruction作者设计了一个 retrieval instruction 模板,这 ...
Deep Learning Reproducibility
深度学习实验可复现问题深度学习在训练过程中,由于随机初始化,样本读取的随机性,导致重复的实验结果会有差别,个别情况甚至波动较大。一般论文为了严谨,实验结论能够复现/可重复,通常采取固定随机种子使得结果确定。先给出我的完整代码:
1234567891011121314151617181920212223242526272829303132333435# 设置环境变量—— CUDA_LAUNCH_BLOCKING 、CUBLAS_WORKSPACE_CONFIGos.environ["CUDA_LAUNCH_BLOCKING"] = "1"os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":16:8"# 从 config.json 配置文件中读取到 json 对象 config ,再从其中获取手动设置的随机数种子以及手动指定的运行显卡seed = config["seed"]device = config["cuda_device" ...
RAG and Hallucination
RAG、KGD and Hallucination大语言模型的幻觉(Hallucination)指的是模型产生不准确或误导性输出的现象,这种幻觉会导致大模型输出似是而非但实际不正确的答案,或者给出与上下文并不相关的输出。这种幻觉的本质是由于大语言模型本身缺乏对于现实世界的感知能力,其训练数据可能存在偏见的、不完整的、错误的虚假信息,训练中可能存在过拟合或者量化误差,以及Prompt上下文缺失等情况。在某些关键任务中,幻觉的确可能带来严重的后果和误导。
当然,幻觉的存在不意味着大模型就无法在生产环境中落地。治理幻觉的方式有很多,包括在训练时提供更高质量的数据,对模型进行Fine-tune补充领域内知识,在RLHF给予Reward Model关于数据真实性更高的倾向性,通过Prompt引导大模型避免对缺乏信息的问题进行生成,以及本文所提到Retrieval Augment Generation,基于向量数据库的召回式生成。合理利用幻觉,可以充分发挥大模型的推理能力和创造能力,解决更加发散性的问题。
RAG(retrieval-augmented generation)/KGD(k ...
Exchange Ctrl and Caps on Linux
键盘上Ctrl键是最常用的键之一了,但是位置却十分不友好,Caps键明明不怎么使用但是却正好放在小指旁边,因此这里记录一下在linux系统下如何将左Ctrl键和Caps键进行交换。首先使用命令编辑文件:
1gedit ~/.xmodmap
然后输入代码交换左Ctrl和Caps键的位置:
123456remove Lock = Caps_Lockremove Control = Control_Lkeysym Control_L = Caps_Lockkeysym Caps_Lock = Control_Ladd Lock = Caps_Lockadd Control = Control_L
最后使用命令让其生效:
1xmodmap ~/.xmodmap
大功告成。