自然语言处理 lec4-2 Language Modelling
N-gram Language Models
如果我们将每个可能的句子 s 视为空间 S 中的一个点:
然而将s的出现次数进行统计,近似,形式化是不可能的
解决方法:将问题分解。将每句话看成一个词的序列,视为一个随机变量X1,X2,…,Xn的序列
模型预测P(X1 = w1,X2 = w2,X3 = w3,…,Xn = STOP):
是一个序列而非集合
用特殊标记STOP,有时还会有START
可以用链式法则进行分解:
问题:很难“看到”历史贡献,当n很大的时候
解决方法:需要进行假设
Markov Assumptions
当历史很长的时候,是否还需考虑前面的词?当n很大的时候第一个词对最后的词的影响是否很大?
大多数时候无需很长的历史,只有前后几个上下文影响下一个词的内容,可以将历史的窗口变小
First-order Markov assumption:只看前面一个词,一阶假设
零阶假设(Unigram Language Model),完全不考虑历史:效果很差,和朴素贝叶斯模型一样,实质是 bag-of ...
自然语言处理 lec4-1 pre
More About ClassificationGenerative Models and Discriminative ModelsExamples from Dan Jurafsky
任务:区分猫和狗的图片
问题:光线,遮挡,清晰度,动画风格等
Generative Models(先学p(x,y)):估计描述猫和狗,有什么特征可以归类为猫,有什么特征可以归类为狗。训练两个模型比较得分,分类为猫或狗
Discriminative Models(直接学习p(y|x)):学习区分性的特征,例如:狗带项圈
同分布的数据下,判别式模型性能更强,能够反映一些差别
Generative Models v.s. Discriminative Models
Generative Models – Naive Bayes:
Discriminative Models – Log-Linear model:
Model Evaluation
在大多数情况下,得到一组训练数据,并被要求构建一个分类器,该分类器将被提交到其他地方并在未知的测试集中进行评估性能:
设计模型 ...
角色动画与运动仿真 03 Character Kinematics
Character Kinematics
基本假设:人体是刚体,通过关节连接形成骨骼
How to create a pose
Joint 不会自动生效…
我们需要仔细计算每个骨骼的位置和方向
Kinematics of a Chain
Qi:关节i方向(全局坐标系下)
Ri:关节i旋转(局部坐标系下)
问题:在诶出旋转后如何关节连接处的位置?
首先初始化Q1-Q4为I
从后往前考虑:先找到Q4相对其父结点Q3的局部旋转R4:
再考虑Q3相对于Q2的局部旋转R3,这里R3也要叠加到Q4,每次叠加都是旋转关节本身+作用于其所有的自关节:
继续上述过程直到算到启示的关节:
同时,已知两个朝向也可以计算中间的旋转:
计算关节位置要从前往后算:Pi+1 = Pi + QiLi。可以从上一步的世界坐标系位置计算下一步的位置
考察终点x,可以对其进行展开得到x相对于祖先结点的相对运动
若没有给出旋转矩阵而是给出旋转角θ:可以利用罗德里格公式计算旋转矩阵R
旋轴带动:
局部坐标系
旋转轴
位置
可以将人体关节抽象为 ...
角色动画与运动仿真 04 Keyframe Animation
Keyframe Animation(关键帧动画)
动画流程:给出关键帧并通过算法补充中间的动画
Interpolation
给定一系列关键点,计算关键点之间的点的值是多少——找f(x)映射:
关键点间的值:内插
关键点外的值:外插
Stepped Interpolation
阶梯差值缺点:不够平滑,函数不连续
Linear Interpolation
线性插值缺点:运动的时候可能突然改变速度(C1不连续),函数光滑性不够,C0连续
解决方法:需要非线性的插值
Polynomial Interpolation(多项式插值)
如果用单一的多项式进行插值,则有多少点就需要多少方程
可以写成矩阵形式用待定系数法求解:
问题:高次项有龙格现象:高次项插值虽然插值过所有点,曲线光滑,但是抖动幅度很大
Spline Interpolation
使用一阶的样条进行插值:类似于线性插值
常使用三次样条进行插值(Cubic Splines):
使用待定系数法求解:上例有 N 个段,4N 个未知参数,加入一些约束求解:
可以写成矩阵求解,但是这个矩 ...
大模型基础与对齐 03 DeepSeek & LLaMA
DeepSeek DetailsThe DeepSeek-V3 Architecture
The Mixture of Expert(MoE)
将transformer中的FNN编程多个小的FNN
决定走哪个小的FNN取决于专家选择,将专家合在一起
总的计算量不变
专家数量增加,颗粒度越精细,同时设置shared专家
负载均衡的路由策略:为解决MoE中专家负载失衡可能导致的“路由塌陷”问题(即部分专家过载而模型性能下降),DeepSeek-V3提出了无辅助损失的负载均衡策略。传统MoE(如 GShard、Switch Transformer)需要在损失函数中加入均衡项来惩罚不均衡,但过强的辅助损失会损害模型性能
DeepSeek-V3引入动态偏置:为每个专家的得分增加一个可调偏置,仅用于路由决策,不影响实际输出权重。训练中每步监控各专家的使用量,若某专家过载则降低其偏置,反之增加偏置,以动态平衡专家流量
Expert choice: 让expert选token而不是token选expert,传统的token选择expert方法在路由过程中无法控制每个专家接收的to ...
LLaMA3 自学笔记
LLaMA3模型
LLaMA3挑选了规模高达50TB的预训练语料,是LLaMA2的7倍之多,在性能上实现了质的飞跃,充分证明了数据的力量
这一语料库不仅包含丰富的代码数据以增强模型的逻辑推理能力,还涵盖了超过5%的非英文数据,覆盖30多种语言,显著扩展了模型的跨语言处理能力
LLaMA3还进行了与LLaMA2一样的人类反馈强化学习,这一策略已被证明能显著提升模型性能
在模型架构上,LLaMA3与前一代LLaMA2几乎完全相同,只是在分词(tokenizer)阶段,由sentencepiece 换成 tiktoken,将字典长度扩大了三倍,极大提升了推理效率
这一改进减少了文字符等语言元素被拆分为多个Token的情况,有效降低了总体Token数量,从而提高了模型处理语言的连贯性和准确性
另一方面,扩大的字典有助于减少对具有完整意义的语义单元进行分割,使模型在处理文本时可以更准确的捕捉词义和上下文,提高生成文本的流畅性和连贯性
LLaMA3均采用了分组查询注意力机制
tokenizer改进分词工具的更换
LLaMA2 使用 SentencePiece:
123self.s ...
LLaMA2 自学笔记
LLaMA2模型
秉承“小模型+大数据”的设计理念,LLaMA2在LLaMA1的基础上进一步优化和扩充了训练数据,将语料库的规模扩展至约7TB,实现了对更丰富语言和领域资源的覆盖
在预训练阶段之后,LLaMA2采纳了人类反馈强化学习的方法,进一步提升了模型的性能:
使用了大规模且公开的指令微调数据集对模型进行有监督的微调
LLaMA2还训练了RLHF奖励模型,并基于近似策略优化(Proximal Policy Optimization, PPO)以及拒绝采样(Rejection Sampling)进行强化学习对模型进行更新
在模型架构上,LLaMA2继承了LLaMA1的架构
LLaMA2-34B和LLaMA270B在decode 阶段的 kv cache 优化上做了改变,还额外增加了分组查询注意力(GroupedQueryAttention,GQA),以提升计算效率
在分组查询注意力机制下,键(key)以及值(value)不再与查询(query)一一对应,而是一组查询共享相同的键和值,从而有效降低内存占用并减少模型总参数量
分组查询注意力
MQA,全称 Mult ...
LLaMA1 自学笔记
LLAMA
LLaMA(LargeLanguage ModelMeta AI)是由MetaAI开发的一系列大语言模型
在模型架构上,LLaMA借鉴了GPT系列的设计理念,同时在技术细节上进行了创新和优化
LLaMA与GPT系列的主要区别在于:GPT系列的升级主线聚焦于模型规模与预训练语料的同步提升,而LLaMA则在模型规模上保持相对稳定,更专注于提升预训练数据的规模
LLaMA1模型
LLaMA1是 Meta AI 于 2023 年 2 月推出的首个大语言模型
在Chinchilla扩展法则的指引下,实践“小模型+大数据”的理念,旨在以大规模的优质数据训练相对较小的模型
相对较小的参数规模可以赋能更快的推理速度,使其可以更好的应对计算资源有限的场景
在预训练语料方面,LLaMA1的预训练数据涵盖了大规模网页数据,总数据量高达5TB
在模型架构方面,LLaMA1采用了与GPT系列同样的网络架构。但是其在Transformer 原始词嵌入模块、注意力模块和全连接前馈模块上进行了优化:
在词嵌入模块上,为了提高词嵌入质量,LLaMA1参考了GPTNeo的做法,使用旋转位 ...
大模型基础与对齐 02 Transformer & GPT-3
GPT-3: Next Token Generation
任务:每次预测下一个单词,选择概率最高的作为输出
问题:一词多义,WSD问题。因此需要进行上下文的语义理解
解决方法:通过attention机制来进行上下文的理解
可以通过GPT-3的参数量的计算了解其运行的原理:175B
Word Embedding: update in leanring
最终会形成一个embedding矩阵,并在learning过程中不断更新
在词义空间embedding space中,每个词向量都有方向,且方向表征一定的含义和词义间的关系
例如复数可由cats - cat得到,复数和带复数形式单词的点乘结果会更大(说明其更相关):
每个symbol都会有一个embedding向量:
The output layer: the logits
输出需要是单词,即logits,所以需要unembedding矩阵把embedding转化为logits
转化后的乘积仍为向量,还需要通过softmax层转化为概率形式,选择概率最大的单词输出:
The Attention o ...
Learning PyTorch with Examples 自学笔记
Learning PyTorch with Examples
我们将以使用三阶多项式拟合y=sin(x)的问题作为示例。网络将包含四个参数,并通过梯度下降法进行训练,以最小化网络输出与真实输出之间的欧几里得距离来拟合随机数据
TensorsWarm-up: numpy
在介绍 PyTorch 之前,我们将首先使用 NumPy 来实现这个网络
NumPy 提供了一个 n 维数组对象(ndarray),以及许多用于操作这些数组的函数
NumPy 是一个通用的科学计算框架,它并不了解计算图、深度学习或梯度
然而,我们可以通过手动实现网络的前向传播和反向传播,使用 NumPy 操作来拟合一个三阶多项式到正弦函数
123456789101112131415161718192021222324252627282930313233343536373839# -*- coding: utf-8 -*-import numpy as npimport math# Create random input and output datax = np.linspace(-math.pi ...