参考trl 的dpo loss 计算方式,大致流程为: def dpo_loss( self, policy_chosen_logps: torch.FloatTensor, policy_rejected_logps: torch.FloatTensor, reference_chosen_logps: torch.FloatTensor, reference_rejected_logps: torch.FloatTensor, ) -> Tuple[torch.FloatTensor, torch.FloatTensor, torch.FloatTensor...
考虑到p_{\theta}\left( \tau \right)如公式 5 所示是多个概率值的连乘,难以进行梯度优化,因此将\nabla p_{\theta}\left( \tau \right)转化为\nabla \text{log }p_{\theta}\left( \tau \right)的形式使之易于计算。 根据\nabla p_{\theta}\left( \tau \right) = p_{\theta}\nabla \text{...
步骤2)在于优化,具体过程大概是,对于同一个question prompt,模型在两种模型:language/policy model 和 reference model下分别生成,对应chosen 和 rejected label真值标签的生成概率,因此可以获得四种概率值:policy_chosen_logps,policy_rejected_logps,reference_chosen_logps,reference_rejected_logps, 用于DPO loss计算。
F.logsigmoid:对log_prob_diff应用logsigmoid函数,相当于计算log(1 / (1 + exp(-x)))。这有助于将差异值转化为合适的损失值。 scaling_factor:一个可调的缩放因子,用来调整差异值对损失的贡献。 最后,计算损失函数的平均值training_loss,并用于训练优化。 9. 打印损失 print(training_loss) 输出计算得到的训...
自我奖励式语言模型,参阅论文《Self-rewarding language models》。CRINGE,参阅论文《The cringe loss: Learning what language not to model》。二元反馈 事实证明,收集偏好反馈比收集二元反馈(比如点赞或点踩)的难度大,因此后者可促进对齐过程的扩展。KTO 和 DRO 这两项研究关注的便是使用二元反馈来对齐 LLM。...
# 1. 当前策略计算 log 概率 logpi_current = θ.log_probability(s_t, a_t) # 2. 计算概率比 r_t = exp( logpi_current - logpi_old ) # 3. 计算未剪切与剪切目标 loss_unclipped = r_t * A_t loss_clipped = clip(r_t, 1-ε, 1+ε) * A_t ...
我在设置BatchSize的时候,首先选择大点的BatchSize把GPU占满,观察Loss收敛的情况,如果不收敛,或者收敛效果不好则降低BatchSize,一般常用16,32,64等。 Experimence Replay Buffer经验回放缓存 对训练影响较大,通常 ~ ,具体多大需要调参 在简单的任务中(训练步数小于1e6),对于探索能力强的DRL算法,通常在缓存被放满前...
论文尝试了以下4种不同的对比损失函数,主要差异在pair-wise还是list-wise,拟合相似度的相对排序(i-j),还是绝对打分(P(yi|x)-P(yj|x))的高低。消融实验显示第一个Rank Loss的效果最好。也就是从所有解码生成的候选中随机采样两个,以上F1更高的为正样本,反之为负样本。计算解码概率的Hinge-Loss...
以KL散度计算Loss 类似于奖励建模方法,策略目标变为:(推导过程详见原论文) $$ \mathcal{L}{\mathrm{DPO}}\left(\pi{\theta} ; \pi_{\mathrm{ref}}\right)=-\mathbb{E}{\left(x, y{w}, y_{l}\right) \sim \mathcal{D}}\left[\log \sigma\left(\beta \log \frac{\pi_{\theta}\left(...