LLM学习笔记(五)概率论
1. 随机变量与概率分布:模型输出的基础
在LLM中,随机变量最直观的体现就是模型预测的下一个token。每个时刻,模型都会输出一个概率分布,表示词汇表中每个token可能是"下一个词"的概率。
直观理解
想象模型在处理句子"我喜欢北京的"后需要预测下一个词。此时,模型会为词汇表中的每个候选token分配一个概率:
- “天安门”:0.3
- “故宫”:0.25
- “美食”:0.2
- “文化”:0.15
- 其他词:0.1
这个分布通过softmax函数从模型的logits输出转换而来:
# logits是模型输出的未归一化对数概率
logits = model(input_ids)[:, -1, :] # 获取最后一个位置的logits
probabilities = torch.softmax(logits, dim=-1) # 转换为概率分布
深层意义
概率分布不仅让模型能够进行采样生成,还能反映模型的不确定性程度。分布的形状(是否集中、平坦或有多个峰值)揭示了模型对当前预测的信心程度。
2. 条件概率:语言模型的核心
LLM是自回归(autoregressive)模型,即通过计算条件概率 P ( x t ∣ x < t ) P(x_t | x_{<t}) P(xt∣x<t) 来生成序列。整个序列的联合概率分解为一系列条件概率的乘积:
P ( x 1 , x 2 , … , x T ) = ∏ t = 1 T P ( x t ∣ x < t ) P(x_1, x_2, \dots, x_T) = \prod_{t=1}^T P(x_t | x_{<t}) P(x1,x2,…,xT)=t=1∏TP(xt∣x<t)
实际运作方式
当模型生成文本时,每一步都依赖于前面已生成的所有内容:
- 第一步: P ( x 1 ) P(x_1) P(x1) - 生成第一个token(无条件)
- 第二步: P ( x 2 ∣ x 1 ) P(x_2|x_1) P(x2∣x1) - 基于第一个token生成第二个
- 第三步: P ( x 3 ∣ x 1 , x 2 ) P(x_3|x_1,x_2) P(x3∣x1,x2) - 基于前两个token生成第三个
以此类推,形成条件概率链。
例子说明
假设模型在生成一个句子:
- 首先生成"我"(假设概率为0.1)
- 然后基于"我"生成"喜欢"(条件概率为0.3)
- 接着基于"我喜欢"生成"学习"(条件概率为0.2)
整个序列"我喜欢学习"的联合概率为:0.1 × 0.3 × 0.2 = 0.006
这种条件概率框架使LLM能够捕捉语言的上下文依赖性,这是它们强大能力的关键所在。
3. 最大似然估计:训练的统计基础
LLM训练的核心目标是最大化训练数据的似然概率,等价于最小化负对数似然(即交叉熵损失):
L ( θ ) = − ∑ t log P θ ( x t ∣ x < t ) \mathcal{L}(\theta) = -\sum_{t}\log P_\theta(x_t | x_{<t}) L(θ)=−t∑logPθ(xt∣x<t)
为什么使用对数?
对数变换有几个重要优势:
- 将乘法转换为加法,避免小数值相乘导致的数值下溢
- 使优化过程更加稳定
- 与信息论中的交叉熵概念直接对应
训练示例
考虑训练过程中的一个小批量文本:“我爱北京天安门”:
def compute_loss(model, tokens):# tokens: [batch_size, sequence_length]logits = model(tokens[:, :-1]) # 预测除最后一个token外的所有位置targets = tokens[:, 1:] # 目标是下一个token# 计算每个位置的负对数似然loss = F.cross_entropy(logits.view(-1, vocab_size), targets.view(-1),reduction='none')# 返回平均损失return loss.mean()
通过最小化这个损失函数,模型参数θ将被调整以增大训练数据的概率,从而"学习"语言的统计模式。
4. 期望与方差:衡量模型行为
期望值 E [ f ( X ) ] \mathbb{E}[f(X)] E[f(X)] 和方差 Var [ X ] \text{Var}[X] Var[X] 在LLM中有多种应用:
期望的应用
-
评估指标计算:计算平均惊讶度(negative log-likelihood)或平均困惑度
# 计算平均惊讶度 def average_surprisal(model, text):tokens = tokenize(text)log_probs = model.log_probs(tokens)return -log_probs.mean().item()
-
信息提取:在多次采样中提取"稳定"信息
# 通过多次采样获取稳定答案 responses = [model.generate(prompt) for _ in range(10)]
方差的应用
-
不确定性量化:高方差表示模型对某些预测的不确定性高
# 计算预测方差 logits = model(input_ids) probs = F.softmax(logits, dim=-1) entropy = -torch.sum(probs * torch.log(probs), dim=-1) # 高熵≈高方差≈高不确定性
-
多样性控制:在生成时,可以基于方差调整采样策略
方差和期望共同帮助我们理解模型的统计行为,不仅在评估模型性能时有用,也为生成策略提供了理论指导。
5. 贝叶斯定理:从先验到后验
虽然传统LLM训练不直接使用贝叶斯方法,但贝叶斯思想在多个方面得到应用:
P ( θ ∣ D ) ∝ P ( D ∣ θ ) P ( θ ) P(\theta | D) \propto P(D | \theta)P(\theta) P(θ∣D)∝P(D∣θ)P(θ)
实际应用
-
参数正则化:权重衰减可看作对参数的高斯先验
# L2正则化(权重衰减) loss = task_loss + weight_decay * sum(p.pow(2).sum() for p in model.parameters())
-
小样本学习:少样本(few-shot)提示可视为后验更新
- 没有示例时,模型使用先验P(θ)
- 提供few-shot示例后,模型更新为后验P(θ|少量示例)
-
推理校准:后验调整可以改善模型预测
# 简单的后验校准示例 def calibrate_probabilities(probs, temperature=1.0, label_smoothing=0.0):# 温度缩放scaled_logits = torch.log(probs) / temperaturecalibrated = F.softmax(scaled_logits, dim=-1)# 标签平滑(混合均匀先验)if label_smoothing > 0:uniform = torch.ones_like(calibrated) / calibrated.size(-1)calibrated = (1 - label_smoothing) * calibrated + label_smoothing * uniformreturn calibrated
贝叶斯框架为我们提供了整合先验知识和更新置信度的强大工具,这在微调、迁移学习和不确定性建模中特别有价值。
6. 采样方法:平衡确定性与创造性
生成文本时,我们需要从模型的概率分布中采样。不同采样策略影响生成文本的多样性和质量:
温度采样
调整温度T可以控制分布的平滑度:
P T ( x ) ∝ P ( x ) 1 / T P_T(x) \propto P(x)^{1/T} PT(x)∝P(x)1/T
def temperature_sampling(logits, temperature=1.0):# temperature=0会变成贪婪搜索# temperature<1使分布更尖锐(更确定)# temperature>1使分布更平坦(更多样)scaled_logits = logits / temperatureprobs = F.softmax(scaled_logits, dim=-1)next_token = torch.multinomial(probs, num_samples=1)return next_token
- 温度接近0:贪婪搜索,总是选最高概率词
- 温度为1:保持原始分布
- 温度大于1:增加低概率事件的采样机会
Top-k与Nucleus采样
这些方法通过截断分布尾部来减少低质量样本:
def top_k_sampling(logits, k=50):# 只保留概率最高的k个tokenvalues, indices = torch.topk(logits, k)probs = F.softmax(values, dim=-1)next_token = indices[torch.multinomial(probs, num_samples=1)]return next_tokendef nucleus_sampling(logits, p=0.9):# 保留累积概率达到p的最小token集合sorted_logits, sorted_indices = torch.sort(logits, descending=True)cumulative_probs = torch.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1)# 找到第一个累积概率超过p的位置sorted_indices_to_keep = cumulative_probs <= p# 在某些情况下,我们至少保留一个tokenif torch.sum(sorted_indices_to_keep) == 0:sorted_indices_to_keep[0] = Trueindices_to_keep = sorted_indices[sorted_indices_to_keep]logits_to_keep = logits[indices_to_keep]probs = F.softmax(logits_to_keep, dim=-1)next_token = indices_to_keep[torch.multinomial(probs, num_samples=1)]return next_token
这些采样方法直接影响生成文本的质量,是LLM应用中的关键决策点。温度和采样策略的选择取决于任务要求:
- 事实性问答:低温度,偏好确定性高的输出
- 创意写作:较高温度,允许更多样的输出
- 代码生成:通常使用较低温度但带nucleus采样,平衡正确性和多样性
7. 马尔可夫性:序列依赖的表示
虽然Transformer架构理论上可以考虑任意长的上下文,但实际上,LLM仍然是一种强化版的马尔可夫模型:当前token的生成依赖于固定长度窗口内的历史。
马尔可夫性与上下文窗口
标准马尔可夫模型假设:
P ( x t ∣ x < t ) = P ( x t ∣ x t − k , … , x t − 1 ) P(x_t | x_{<t}) = P(x_t | x_{t-k}, \ldots, x_{t-1}) P(xt∣x<t)=P(xt∣xt−k,…,xt−1)
LLM则扩展为:
P ( x t ∣ x < t ) = P ( x t ∣ x m a x ( 1 , t − C ) , … , x t − 1 ) P(x_t | x_{<t}) = P(x_t | x_{max(1,t-C)}, \ldots, x_{t-1}) P(xt∣x<t)=P(xt∣xmax(1,t−C),…,xt−1)
其中C是上下文窗口长度(如GPT-3为2048,Claude 3为200k+)。
有限记忆的影响
上下文窗口限制导致的问题包括:
- 无法引用超出窗口的信息
- 长文档理解中的一致性挑战
- 对长文本生成的连贯性约束
这种有限马尔可夫性质启发了许多改进方向,如长上下文模型、外部内存机制、检索增强等。
8. 蒙特卡洛估计:基于采样的评估
蒙特卡洛方法通过多次随机采样来估计统计特性,在LLM中有重要应用:
应用场景
-
不确定性估计:通过多次采样估计预测的置信区间
def estimate_confidence_interval(model, prompt, n_samples=100):# 生成多个回答responses = [model.generate(prompt) for _ in range(n_samples)]# 分析回答的分布(例如,对于是/否问题)yes_count = sum(1 for r in responses if "是" in r[:10])confidence = max(yes_count, n_samples - yes_count) / n_samplesreturn confidence
-
多样性度量:评估生成结果的多样性
def measure_diversity(model, prompt, n_samples=10):responses = [model.generate(prompt) for _ in range(n_samples)]# 计算生成文本之间的平均相似度similarities = []for i in range(n_samples):for j in range(i+1, n_samples):sim = compute_similarity(responses[i], responses[j])similarities.append(sim)return sum(similarities) / len(similarities)
-
集成预测:整合多次预测结果以提高准确性
def ensemble_prediction(model, prompt, n_samples=10):predictions = [model.generate(prompt) for _ in range(n_samples)]# 可以通过投票、平均或更复杂的方法整合结果return most_common(predictions)
蒙特卡洛方法帮助我们更好地理解模型行为的统计特性,特别是在处理高度不确定或多样化输出的场景中。
9. 随机过程与序列建模:统计依赖的捕捉
语言生成可视为一种离散时间随机过程,LLM通过自注意力机制捕捉这一过程中的统计依赖:
自注意力与随机过程
Transformer的自注意力机制计算:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
这实际上是在估计序列中各位置之间的统计依赖强度。注意力权重可以解释为:位置j对预测位置i的影响程度。
深层统计依赖
LLM通过多层注意力捕捉复杂的统计依赖:
- 浅层可能关注局部语法模式
- 深层可能捕捉全局语义依赖
- 多头注意力则并行捕捉不同类型的依赖关系
这种分层设计使LLM能够学习句法、语义和篇章层面的统计规律,从而生成连贯且有意义的文本。
10. 校准:确保概率预测的可靠性
模型校准衡量预测概率与实际频率的一致性:
校准重要性
假设模型以90%的置信度预测某些事实,如果模型校准良好,这些预测约90%应该是正确的。
def expected_calibration_error(probs, correct):"""计算预期校准误差probs: 预测概率correct: 对应的正确与否标记(0/1)"""# 将概率分成几个binn_bins = 10bins = np.linspace(0, 1, n_bins + 1)bin_indices = np.digitize(probs, bins) - 1ece = 0for bin_idx in range(n_bins):# 找到落在这个bin中的预测mask = bin_indices == bin_idxif not np.any(mask):continuebin_probs = probs[mask]bin_correct = correct[mask]# 计算这个bin中的平均概率和准确率avg_prob = np.mean(bin_probs)avg_acc = np.mean(bin_correct)# 加权绝对误差ece += np.abs(avg_prob - avg_acc) * (np.sum(mask) / len(probs))return ece
校准方法
- 温度缩放:通过除以温度参数调整logits
- Platt缩放:学习线性变换校准概率
- 模型集成:多个模型预测结合可提高校准性
良好的校准对于许多应用至关重要,如医疗诊断、金融预测和自动决策系统,因为它们需要依赖模型不仅给出正确答案,还要准确报告自己的确定性。
11. 似然比与对比评估:模型比较的工具
似然比是比较两个概率模型的强大工具:
P model1 ( x ) P model2 ( x ) \frac{P_{\text{model1}}(x)}{P_{\text{model2}}(x)} Pmodel2(x)Pmodel1(x)
实际应用
-
对抗训练:通过似然比区分真实vs生成文本
def discriminator_loss(real_data, generated_data, model1, model2):# 计算似然比,用于区分真实数据和生成数据real_log_probs_1 = model1.log_probs(real_data)real_log_probs_2 = model2.log_probs(real_data)real_ratio = torch.exp(real_log_probs_1 - real_log_probs_2)gen_log_probs_1 = model1.log_probs(generated_data)gen_log_probs_2 = model2.log_probs(generated_data)gen_ratio = torch.exp(gen_log_probs_1 - gen_log_probs_2)# 优化目标:增大真实数据的比值,减小生成数据的比值loss = -torch.mean(torch.log(real_ratio)) - torch.mean(torch.log(1 - gen_ratio))return loss
-
模型选择:比较不同模型对数据的拟合能力
def compare_models(test_data, model_a, model_b):log_probs_a = model_a.log_probs(test_data)log_probs_b = model_b.log_probs(test_data)# 如果比值>1,则模型A更适合数据log_ratio = log_probs_a - log_probs_breturn log_ratio.mean()
-
倾向性得分:用于评估生成偏好
def calculate_preference_score(model, prompt_a, prompt_b):completion = model.generate(prompt_a)# 计算完成后的文本在两个不同提示下的对数概率log_prob_a = model.conditional_log_prob(completion, prompt_a)log_prob_b = model.conditional_log_prob(completion, prompt_b)# 返回倾向性得分return log_prob_a - log_prob_b
似然比是评估和比较概率模型的强大工具,在模型选择、假设检验和对抗学习中都有广泛应用。
概率论视角的综合应用
这些概率论概念不是孤立的,而是形成了一个连贯的理论框架,支撑着LLM的各个方面:
-
从训练到推理的完整流:
- 模型定义:条件概率分布 P ( x t ∣ x < t ) P(x_t|x_{<t}) P(xt∣x<t)
- 训练目标:通过最大似然估计优化参数
- 推理方法:通过各种采样策略从概率分布中生成样本
- 评估标准:困惑度、校准误差等概率度量
-
不确定性的系统处理:
- 表示:概率分布的熵
- 传播:通过采样和蒙特卡洛方法
- 量化:方差、置信区间
- 通信:校准的概率输出
-
概率框架的实际价值:
- 提供理论基础解释模型行为
- 指导采样策略的选择
- 启发新的训练和推理方法
- 评估模型性能的系统标准
相关文章:
LLM学习笔记(五)概率论
1. 随机变量与概率分布:模型输出的基础 在LLM中,随机变量最直观的体现就是模型预测的下一个token。每个时刻,模型都会输出一个概率分布,表示词汇表中每个token可能是"下一个词"的概率。 直观理解 想象模型在处理句子…...
归并排序:分治思想的优雅实现
归并排序(Merge Sort)以简洁而高效的分治思想,在众多排序算法中占据着重要的地位。今天,就让我们一同深入探索归并排序的奥秘。 一、归并排序简介 归并排序是一种基于分治策略的排序算法。它的核心思想是将一个大的问题分解成若…...
从小区到商场再到校园,AI智能分析网关V4高空抛物检测方案全场景护航
在城市化进程不断加速的背景下,高层建筑如雨后春笋般涌现,然而,高空抛物这一“悬在城市上空的痛”却严重威胁着人民群众的生命财产安全。传统的监控方式难以对高空抛物行为进行及时、准确地识别与预警,而AI智能分析网关V4搭载高空…...
WEB安全--Java安全--shiro550反序列化漏洞
一、前言 什么是shiro? shiro是一个Apache的Java安全框架 它的作用是什么? Apache Shiro 是一个强大且灵活的 Java 安全框架,用于处理身份验证、授权、密码管理以及会话管理等功能 二、shiro550反序列化原理 1、用户首次登录并勾选记住密码…...
现代计算机图形学Games101入门笔记(十一)
致敬两位大佬 面的细分、简化、正则化 Loop 不是循环,是这个算法的发明人家族名称是Loop. 新增点,白点是不更新前通过细分得到的点。通过加权平均4个点坐标,更新坐标就是最后细分点的坐标。 如果细分出新的点刚好在老点上。那一部分相信周围点…...
OAT 初始化时出错?问题可能出在 PAM 配置上|OceanBase 故障排查实践
本文作者:爱可生数据库工程师,任仲禹,擅长故障分析和性能优化。 背景 某客户在使用 OAT 初始化OceanBase 服务器的过程中,进行到 precheck 步骤时,遇到了如下报错信息: ERROR - check current session ha…...
现场血案:Kafka CRC 异常
一、背景 现场童鞋说客户的研发环境突然在近期间歇式的收到了CRC的相关异常,异常内容如下 Record batch for partition skywalking-traces-0 at offset 292107075 is invalid, cause: Record is corrupt (stored crc = 1016021496, compute crc = 1981017560) 报错完全没有…...
实时技术方案对比:SSE vs WebSocket vs Long Polling
早期网站仅展示静态内容,而如今我们更期望:实时更新、即时聊天、通知推送和动态仪表盘。 那么要如何实现实时的用户体验呢?三大经典技术各显神通: SSE(Server-Sent Events):轻量级单向数据流WebSocket:双向全双工通信Long Polling(长轮询):传统过渡方案假设目前有三…...
搭建游戏云服务器的配置要求包括哪些条件?
在游戏行业迅猛发展的背景下,越来越多的游戏团队、独立开发者、企业平台开始将服务器部署转向云端,尤其是在初期测试、公测阶段及全球发布期,云服务器所带来的弹性部署、全球覆盖、成本控制能力成为不可替代的优势。但问题随之而来࿱…...
Go语言八股文之Mysql锁详解
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
1T 服务器租用价格解析
服务器作为数据存储与处理的核心设备,对于企业和个人开发者而言至关重要。当涉及到租用 1T 服务器时,价格是大家很为关注的要点。然而,1T 服务器租用一个月的费用并非固定不变,而是受到诸多因素的综合影响。 影响 1T 服务器租用…...
面试题:详细分析Arraylist 与 LinkedList 的异同
相同点 都是List接口的实现类: ArrayList和LinkedList都实现了Java集合框架中的List接口,因此它们都提供了对列表元素的操作方法。 都继承了Collection接口: 由于List接口继承了Collection接口,所以ArrayList和LinkedList也都继承…...
6 任务路由与负载均衡
一、任务路由核心机制 1.1 静态路由配置 # celeryconfig.pytask_routes {# 精确匹配任务路径payment.process_order: {queue: priority_payment},# 通配符匹配任务类型report.*: {queue: low_priority_reports},# 正则表达式匹配re.compile(r^video\.(encode|compress)): {q…...
前端精度问题全解析:用“挖掘机”快速“填平精度坑”的完美解决方案
写在前面 “为什么我的计算在 React Native 中总是出现奇怪的精度问题?” —— 这可能是许多开发者在作前端程序猿的朋友们都会遇到的第一个头疼问题。本文将深入探讨前端精度问题的根源,我将以RN为例,并提供一系列实用解决方案,让你的应用告别计算误差。 一、精度问题的…...
探索嵌入式硬件的世界:技术、应用与未来趋势
目录 一、什么是嵌入式硬件? 二、嵌入式硬件的核心组件与架构 1. 微处理器与控制器 2. 存储器设备 3. 输入/输出接口 4. 电源管理模块 5. 时钟芯片与时序控制 三、嵌入式硬件的设计原则与技术难点 1. 低功耗与能耗优化 2. 小型化与高度集成 3. 高可靠性和…...
中级网络工程师知识点3
1.在网络线路施工中应遵循规范: ①缆线的布防应自然平直,不得产生扭绞、打圈接头等现象 ②线缆两端应贴有标签,标签自己清晰、正确,标签应选用不易损坏的材料 ③水平子系统中配线间到工作区信息插座电缆不超过90米 ④工作区子系统中信息插座到网卡不超过10米 ⑤信息插…...
Spring2:应用事务+连接池形成的工具类
工具类 package com.qcby.utils;import com.alibaba.druid.pool.DruidDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException;/*** 事务的工具类*/ //事务是通过连接开启的,所以要保证是同一个连接 public class TxU…...
CentOS高手之路:从进阶实战到企业级优化
一、系统深度优化与性能调优 1. 内核参数调优 通过修改/etc/sysctl.conf文件调整内核参数,可显著提升服务器性能。例如: net.ipv4.tcp_fin_timeout30(快速释放TCP连接) vm.swappiness10(减少交换分区使用࿰…...
【Android构建系统】如何在Camera Hal的Android.bp中选择性引用某个模块
背景描述 本篇文章是一个Android.bp中选择性引用某个模块的实例。 如果是Android.mk编译时期,在编译阶段通过某个条件判断是不是引用某个模块A, 是比较好实现的。Android15使用Android.bp构建后,要想在Android.bp中通过自定义的一个变量或者条件实现选…...
命令拼接符
Linux多命令顺序执行符号需要记住5个 【|】【||】【 ;】 【&】 【&&】 ,在命令执行里面,如果服务器疏忽大意没做限制,黑客通过高命令拼接符,可以输入很多非法的操作。 ailx10 网络安全优秀回答者 互联网…...
学习笔记(C++篇)--- Day 5
1.取地址运算符重载 1.1 const成员函数 ①将 const 修饰的成员函数称为const成员函数,const 修饰成员函数放到成员函数参数列表的后面。 ②const 实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。const 修饰 Date 类的…...
排序算法之基础排序:冒泡,选择,插入排序详解
排序算法之基础排序:冒泡、选择、插入排序详解 前言一、冒泡排序(Bubble Sort)1.1 算法原理1.2 代码实现(Python)1.3 性能分析 二、选择排序(Selection Sort)2.1 算法原理2.2 代码实现ÿ…...
mysql集群
mysql双主keepalivedhaproxy 一、集群作用 实现高可用及负载均衡。 二、示例 1.实验环境 101 mysql01102 mysql01103 haproxy01keepalived01104 haproxy02keepalived02105 client2.各主机改名并关闭防火墙 101 mysql01102 mysql02103 haproxy01104 haproxy02105 clientsyst…...
【嵌入式开发-RGB 全彩 LED】
嵌入式开发-RGB 全彩 LED ■ RGB 全彩 LED简介■ 电路设计■ ■ RGB 全彩 LED简介 RGB 全彩 LED 模块显示不同的颜色。 ■ 电路设计 全彩 LED 使用 PA5、 蓝色(B) TIM2_CHN3 PA1、 绿色(G)TIM2_CHN2 PA2、 红色(R&am…...
网络安全-等级保护(等保) 2-6 GB/T 36958—2018 《信息安全技术 网络安全等级保护安全管理中心技术要求》-2018-12-28 发布【现行】
################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》明确了安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、…...
几个正整数常用的位运算操作
位运算在高性能计算、资源敏感型场景(如嵌入式系统)、特定算法(加密、压缩)中具有不可替代的优势。合理使用位运算可以显著提升代码效率和资源利用率。 1. 判断一个正整数是否为8的倍数 bool is_multiple_of_eight(int n) {if (…...
消息队列(MQ)在项目中的使用场景详解【附开发实战思路】
在开发中,很多人一开始对消息队列(MQ)的认识仅限于“异步处理”,但随着项目复杂度提升,我们会发现 MQ 不仅能异步处理任务,还能解耦系统、削峰限流,甚至提高整体架构的稳定性和扩展性。 这篇文…...
基于MATLAB-GUI图形界面的数字图像处理
基于MATLAB GUI的数字图像处理系统实现方案,包含常见图像处理功能。代码分为两部分:GUI界面设计和回调函数实现。 %% 第一部分:创建GUI界面 (使用GUIDE) % 1. 打开GUIDE: guide % 2. 创建新GUI,添加以下控件: % - …...
C语言水仙花数
水仙花数(Narcissistic Number)也被称为自幂数,是数学中的一种特殊三位数,属于自幂数的一种类型。它的定义为:一个三位数,其各位数字的立方和等于该数本身。 具体定义与计算方式条件: 设一个三位…...
前k个高频元素
pair<int int>:用于存储两个数字。(pair<int string>用于存储一个整数和一个字符串) const pair<int int>:表示pair对象是常量,一旦初始化以后,其内部的两个成员值都不能被修改。 bool…...
人工智能与智能的底色都是哲学
人工智能与智能的底色都是哲学,因为哲学为它们提供了对“智能”本质的追问与思考。哲学自古以来便对人类智能、思维与意识进行深入探讨,为理解智能的结构和功能奠定了基础。同时,人工智能的发展也引发了诸多哲学问题,如伦理道德、…...
能碳管理系统:助力企业实现“双碳“目标
在全球气候治理和绿色低碳发展的大背景下,能碳管理系统正成为企业应对气候变化、实现"碳达峰、碳中和"战略目标的核心工具。这一系统通过数字化手段将能源管理与碳排放管控深度融合,为企业低碳转型提供全方位支持。 一、系统架构与核心技术 …...
开源鸿蒙北向源码开发: 5.0kit化相关sdk编译
5.0kit化可以在编译系统sdk时添加,将你的kit文件加入编译使得最终生成的sdk包含kits文件 修改编译脚本 修改build仓里面的构建脚本文件,添加kits目录脚本命令 社区的build脚本已经有kits编译功能了,只需要把你的kits目录新增的kit拷贝到社区仓interface仓了,和社区的都一起编…...
多通道电源管理芯片在分布式能源系统中的优化策略
摘要:随着分布式能源系统的广泛应用,对电源管理芯片的性能要求日益提升。本文深入探讨了多通道电源管理芯片在分布式能源系统中的优化策略,以国科安芯的ASP4644芯片为例,从电气特性、工作模式、热管理、可靠性设计以及系统集成为主…...
IEEE 列表会议第五届机器人、自动化与智能控制国际会议
会议地点:中国 成都 会议官网:ICRAIC 主办单位:成都理工大学 协办单位:成都大学 早鸟截稿:2025年7月15日 截稿时间:2025年8月20日 出版信息:IEEE出版&EI数据库 会议时间:…...
GitHub 趋势日报 (2025年05月15日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1TapXWorld/ChinaTextbookPDF教材。⭐ 6685⭐ 15287Roff2xming521/WeClone&…...
Java 并发编程归纳总结(可重入锁 | JMM | synchronized 实现原理)
1、锁的可重入 一个不可重入的锁,抢占该锁的方法递归调用自己,或者两个持有该锁的方法之间发生调用,都会发生死锁。以之前实现的显式独占锁为例,在递归调用时会发生死锁: public class MyLock implements Lock {/* 仅…...
Git 笔记
设置Git的user name和email $ git config --global user.name "bread" $ git config --global user.email "1234567890qq.com"因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。git config --global 参数,有了这…...
蒟蒻编程日志
ORZ (用于记录你这个“人”是不是真的,也就是说CSDN的流量是否属合适) 2025/4/14 21:25 开坑 前言 2024/10/26:CSP-J 260pts,CSP-S 45pts。 2025/3/1:%你赛 180pts rk34 寄!这就是不认真的…...
深入GoFrame框架:GToken的优势、实践与踩坑经验分享
一、引言 近年来,Go语言凭借其简洁的语法、高并发性能和强大的标准库,在后端开发领域迅速崛起。从微服务到企业级应用,Go的生态圈正在蓬勃发展,吸引了越来越多的开发者投入其中。在这个生态中,框架的选择往往决定了项…...
MODBUS RTU调试助手使用方法详解
一、软件简介 485调试助手是一款常用的串口通信调试工具,专门用于RS-485总线设备的测试、调试和通信监控。它支持多种串口参数设置,提供数据收发功能,是工业现场调试的必备工具之一。 二、软件安装与启动 1. 系统要求 Windows 7/10/11操作…...
【专利信息服务平台-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
我用 Appuploader绕过 Mac,成功把 iOS 应用上线了 App Store
我以前总觉得,iOS 上架是 macOS Xcode 专属的领域。直到最近项目必须要上架 iOS,团队却没人用 Mac,只能临时组建了一套“跨平台上架流程”。 这篇文章记录我这个“非典型 iOS 开发者”是如何绕开传统 Xcode 流程,借助一系列工具…...
Mac上安装运行SynthTIGER
1. 确保已安装 Python 环境 SynthTIGER 需要 Python 3.6。如果你的 Mac 没有安装 Python: 推荐通过 Homebrew 安装: brew install python 或从 Python 官网 下载安装。 验证安装: python3 --version pip3 --version 2. 安装 SynthTIGER…...
从代码学习深度学习 - 实战Kaggle比赛:狗的品种识别(ImageNet Dogs)PyTorch版
文章目录 前言1. 获取和整理数据集1.1 读取标签1.2 整理数据集:划分训练集和验证集1.3 整理测试集1.4 执行数据重组 2. 图像增广3. 读取数据集3.1 创建Dataset实例3.2 创建DataLoader实例 4. 微调预训练模型4.1 定义网络结构4.2 定义损失函数和评估函数 5. 定义训练…...
翼兴消防监控 – 大数据可视化HTML源码
概述 在当今数据驱动的时代,大数据可视化已成为各行各业不可或缺的工具。幽络源今天为大家带来一款基于ECharts的消防监控大屏HTML源码,帮助开发者快速搭建专业级数据展示界面。这款源码设计简洁大方,功能完善,适合各类监控场景使…...
搭建运行若依微服务版本ruoyi-cloud最新教程
搭建运行若依微服务版本ruoyi-cloud 一、环境准备 JDK > 1.8MySQL > 5.7Maven > 3.0Node > 12Redis > 3 二、后端 2.1数据库准备 在navicat上创建数据库ry-seata、ry-config、ry-cloud运行SQL文件ry_20250425.sql、ry_config_20250224.sql、ry_seata_2021012…...
火山引擎AI大模型
火山引擎的AI大模型(如**“云雀”大模型**)作为字节跳动旗下的核心技术产品,在性能、应用场景和技术生态上表现较为突出,尤其在字节自身业务(如抖音、TikTok等)的打磨下,具备较强的实用性和行业…...
isaacgym环境安装
1. 系统环境 操作系统:Ubuntu 18.04.6 LTSGPU:NVIDIA TITAN RTXDriver 版本: 510.108.03CUDA 版本:11.6 2. conda安装以及环境安装 略过(参考内容:https://github.com/unitreerobotics/unitree_rl_gym/blob/main/doc…...
使用Mathematica制作Lorenz吸引子的轨道追踪视频
Lorenz奇异吸引子是混沌理论中最早被发现和研究的吸引子之一,它由Edward Lorenz在1963年研究确定性非周期流时提出。Lorenz吸引子以其独特的"蝴蝶"形状而闻名,是混沌系统和非线性动力学的经典例子。 L NDSolveValue[{x[t] -3 (x[t] - y[t]),…...