大模型算法题(6)

【往期文章】

MoE模型的前世今生
LLM长上下文的问题
解锁大模型长上下文能力
大模型推理窗口-从有限到无限大
理解Attention:从起源到MHA,MQA和GQA
Yi技术报告-划重点看细节
transformer中normalization的二三事
从代码实现看normalization-到底做了什么
稀疏注意力计算:sliding window attention
理解LLM位置编码:RoPE
大模型算法题(1)
大模型算法题(2)
大模型算法题(3)
大模型算法题(4)
大模型算法题(5)


【本文已在同名 微信公众号 / 知乎 / 个人博客linsight.cn 上线】

本系列将持续整理一些LLM中关键的、细节的、值得关注的内容,持续更新~

如有错漏,欢迎指正~


1.Xavier初始化思路是什么,是怎么做的?

2010年的《Understanding the difficulty of training deep feedforward neural networks》提出Xavier初始化,目的是为了保持模型中每一层的输出方差大致相等,这样做的原因主要有:

(1)避免梯度消失或梯度爆炸:在深度神经网络中,如果层与层之间的输出方差相差很大,就会有很大的值出现,那么在反向传播过程中,梯度可能会变得非常小(梯度消失)或者非常大(梯度爆炸)导致梯度更新缓慢,或者训练过程不稳定。

(2)保持信号的传播:通过保持每一层的输出方差大致相等,可以确保网络中的信号在前向传播和反向传播时不会因为方差的变化而减弱或增强,从而有助于网络更好地学习和传递信息。

(3)提高训练的稳定性和效率:当每一层的输出方差保持一致时,训练过程会更加稳定,因为权重更新的magnitude更加可控。这样可以提高训练的效率。

(4)避免过拟合或欠拟合:适当的方差控制有助于网络在训练过程中保持适当的泛化能力。过大的方差可能导致过拟合,而过小的方差可能导致欠拟合。

Xavier初始化方法通过考虑前一层的节点数(fan-in)和后一层的节点数(fan-out)来设置初始权重的分布范围。有三种方案:

(1)只考虑输入,设置参数的方差为1/fan-in

(2)只考虑输出,设置参数的方差为1/fan-out

(3)同时考虑输入和输出,设置参数的方差为2/(fan-in + fan-out)。实际使用中1/fan-in效果就较好。

2.RLHF中,Reward模型和Critic模型的作用分别是什么?

Critic模型主要负责评估当前策略下的行为,并预测未来的回报。在PPO中,Critic模型的输出用于计算优势函数(advantage function),这是一个衡量实际回报与预期回报之间差异的指标。优势函数是策略梯度方法中的关键组成部分,它帮助actor模型了解哪些行为比预期要好,哪些行为比预期要差。因此,Critic模型的评分直接影响actor模型的优化过程,指导其调整行为以提高整体性能。

Reward模型是基于人类反馈训练的,用于评估和打分模型生成的文本或行为的质量。在RLHF中,Reward模型的评分通常被用作奖励信号,直接反馈给Actor模型。这些奖励信号反映了人类对生成内容的偏好和评价标准,Actor模型会根据这些信号调整其行为,以生成更符合人类期望的输出。 RLHF中,Actor模型的优化目标是最大化期望回报。这个期望回报可以由Critic模型的预测和Reward模型的评分共同决定。具体来说,Actor模型的优化目标(objective)通常包括(1)策略损失:这部分损失来自于策略模型尝试最大化奖励信号(由Reward模型提供)和/或优势函数(由Critic模型提供)。(2)价值损失:在Actor-Critic架构中,Actor模型也负责优化Critic模型,那么价值损失会尝试最小化Critic模型预测的价值与实际回报之间的差异。(3)其他正则化项:可能还包括一些正则化项。

因此,Critic模型的评分用于计算优势函数,而Reward模型的评分直接作为奖励信号。这两个模型共同作用于Actor模型,帮助其学习如何生成更符合人类偏好和期望的行为。

3.Kaiming初始化是怎么做的?

Kaiming初始化在Xavier初始化的基础上做了调整。Xavier初始化的推导是基于线性函数的,但实际上今天所有模型都会大量使用非线性函数,比如ReLU,这样就导致了Xavier初始化的失效。 Kaiming初始化针对使用ReLU的模型提出。因为ReLU会抛弃掉小于0的值,对于一个均值为0的输入数据,这就相当于砍掉了一半的值,这样输出的方差和均值就变了。因此把Xavier初始化中使用的方差sqrt(1/N)改为sqrt(2/N),这样数据不会因为ReLU而变得越来越小。

4.使用Bert中的[CLS]作为输出进行分类和相似度计算,可能会有什么问题?

self-attention中,每个token都天然倾向于关注自己和附近的token,而对更远的内容分配较少的注意力。在Bert中,[CLS]一般是第一个token,放在最前面。这就导致[CLS]更容易关注到靠近它的输入,也就是文本的靠前部分。如果文本较长,且关键内容出现在靠后的位置,就有可能出现[CLS]中关注不够的情况,而导致效果下降。可以通过强制注意力分配,或者使用所有位置的输出而不单是[CLS]token的方法来缓解这个问题。

5.pytorch中的register_buffer是什么,有什么用?

register_buffer是nn.Module类中的一个方法,它用于注册一个不需要梯度的缓冲区。一般会把模型中需要持续使用或者跟踪,但是不需要通过梯度来更新的参数使用register_buffer注册。使用register_buffer注册的参数可以和其他训练的参数一样,保存在state_dict中,比如旋转位置编码的旋转矩阵,batchnorm中的全局均值和方差,一般都会用register_buffer注册。如果不使用register_buffer注册,普通的常量或者参数保存的时候不会被state_dict跟踪到。


读到这了,来一发点赞收藏关注吧~

博客:http://www.linsight.cn/
知乎:Linsight
微信公众号:Linsight


【往期文章】

MoE模型的前世今生
LLM长上下文的问题
解锁大模型长上下文能力
大模型推理窗口-从有限到无限大
理解Attention:从起源到MHA,MQA和GQA
Yi技术报告-划重点看细节
transformer中normalization的二三事
从代码实现看normalization-到底做了什么
稀疏注意力计算:sliding window attention
理解LLM位置编码:RoPE
大模型算法题(1)
大模型算法题(2)
大模型算法题(3)
大模型算法题(4)
大模型算法题(5)