博客

  • 人工智能如何模拟人类思维:跨领域映射研究揭示的启示

    在人类的认知科学中,理解抽象和具体概念是一个长期而复杂的议题。最近,由耶路撒冷希伯来大学的研究团队进行的一项研究,探索了大型语言模型(LLMs)在处理跨领域映射任务时显示出的人类思维模式,为我们提供了新的视角来理解人工智能如何模拟人类的思维过程。

    1. 研究背景与动机

    跨领域映射是指将一个概念从一个领域映射到另一个领域的任务。例如,如果问“如果医生是一种颜色,他会是什么颜色?”这种看似奇特的问题实际上是用来探索人们如何通过映射不同类别及其推理过程来表达具体和抽象概念的。

    大型语言模型(LLMs),如GPT和BERT,已经在生成类人文本和处理复杂任务方面取得了显著进展,但它们在以人类可以理解的方式解释或呈现自己的行为方面仍面临挑战。这项研究利用跨领域映射任务来评估这些语言模型的概念化和推理能力。

    2. 研究方法与过程

    研究团队从心理学领域借鉴了跨领域映射的任务,并对几种大型语言模型进行了行为研究。研究中,研究者将人类数据用于启发模型,通过跨领域映射任务来测试模型,并对模型的响应进行了分析。

    实验设置包括选择几个大型语言模型,并使用一系列预定义的模板来引导这些模型生成响应。通过这种方式,研究团队能够评估模型在这一任务上的表现,并将其与人类行为进行比较。

    3. 实验结果与发现

    研究结果显示,模型在跨领域映射任务上的表现与人类非常相似,这表明它们在概念表示上与人类有着相似之处。例如,大多数模型都能提供有效的解释,并采用与人类相似的推理路径。

    此外,研究还发现,模型在解释它们的预测时具有一定的能力,这些解释的类别与人类的解释类别分布相似,表明模型在其表示中依赖于与人类类似的相似性类型。

    4. 深入分析与启示

    这项研究不仅揭示了大型语言模型在概念化测试中与人类的行为对齐,还通过模型的行为提供了进一步的认知心理学见解。这种跨领域对齐的能力指出,即使是基于文本的模型也能在没有直接感知输入的情况下,通过文本学习到感知相关的知识。

    5. 结论与未来方向

    这项研究表明,大型语言模型在理解和处理抽象概念方面具有惊人的能力,这些模型不仅可以用作文本生成工具,还可以作为认知模型来研究人类语言和思维。未来的研究可以进一步探索这些模型在更广泛的心理和认知任务中的应用,以及它们如何帮助我们更好地理解人类的思维过程。

    通过这样的研究,我们不仅能够改进人工智能模型,还能够通过模拟和理解人类的思维方式,探索人类智能的本质。

    [PDF] A Nurse is Blue and Elephant is Rugby: Cross Domain Alignment in Large Language Models Reveal Human-like Patterns | Semantic Scholar

  • 图像与语言的奇妙联系

    我们人类总是试图从大脑中抽象出概念,并通过语言和符号来表达。我们用”椅子”这个词指代所有有腿、有座位、能坐的家具,而看到一幅鲜花图画时会想到”美丽”。但是,我们如何在心中构建这些概念的?不同概念之间是否存在某种奇妙的联系?

    最近,一项有趣的心理学实验给出了一些启示。研究人员让参与者在两个看似毫不相关的概念域之间建立联系,比如把职业映射到颜色。结果发现,人们常常以一致且可预测的方式进行映射。例如,医生经常被映射成白色,显然是因为医生穿白大褂。

    令人惊讶的是,人工智能模型竟然也展现出了类似的行为!研究人员对多个大型语言模型进行了同样的实验,发现它们在很大程度上能够复现人类的映射模式。更有意思的是,一些模型甚至比普通人更接近人群的平均映射结果。

    但AI模型为什么会与人类如此一致呢?通过让模型解释自己的映射过程,研究人员发现它们主要依赖感知相似性、词语关联、共同中介等因素来建立跨域联系,这与人类如出一辙。例如,鼓被映射到雷声,是因为二者声音相似;足球映射到菠萝,是因为它们外形相似。

    这项研究初步揭示了人类与AI在概念表征方面的共性。尽管语言模型只接受过文本训练,但它们似乎能从语言中学到感知知识,形成结构化的概念体系。这或许意味着,人类思维的某些基本特征已经融入了当前的AI系统。

    不过,机器是否真的拥有概念化能力,仍有待进一步研究。但这一发现无疑加深了我们对AI内在机制的认识,为构建更加智能、更加人性化的AI系统指明了方向。人工智能正以惊人的速度发展,在可预见的未来,或许会诞生出一个崭新的”机器心智”。到那时,人类与AI之间的界限,也许会变得愈发模糊。

    [PDF] A Nurse is Blue and Elephant is Rugby: Cross Domain Alignment in Large Language Models Reveal Human-like Patterns | Semantic Scholar

  • 当护士变成蓝色,大象变成橄榄球:大型语言模型的跨领域比对揭示人类般的模式

    近年来,大型语言模型(LLMs)在生成人类般的文本和处理需要推理的复杂任务方面取得了显著进步。然而,它们解释自身行为或以人类可理解的方式呈现其行为的能力仍然是一个挑战。由于 LLMs 与人类的互动方式与人类非常相似,研究人员开始通过比较它们的行为来评估它们的理解和推理能力,并从认知心理学、心理语言学和神经科学等领域汲取灵感。

    本文将借鉴一项新兴的心理学任务——跨领域比对,来评估 LLMs 的概念化和推理能力。这项任务要求参与者将一个语义领域的概念映射到另一个语义领域(例如,将“医生”映射到“颜色”,将“钢琴”映射到“动物”)。有趣的是,研究发现,人们在进行这些看似随意的映射时,会遵循一些可预测的模式,依赖于感知相似性或词语联想等特定类型的相似性。例如,”鼓”通常被映射到”雷声”,这显然是由于它们在感官上的相似性,因为它们都发出类似的声音。

    本文通过一项行为研究,将跨领域比对任务应用于评估 LLMs 的概念化和推理能力。研究人员使用人类参与者在认知实验中收集的数据,提示多个 LLMs 进行跨领域比对,并分析其在群体和个体层面的反应。此外,他们还评估了模型对其预测的推理能力,通过分析和分类模型对这些映射的解释。

    实验结果表明,LLMs 与人类在映射和解释方面存在一些相似之处,表明模型的概念表征与人类类似。这种相似性不仅体现在模型表征中,也体现在它们的行为中。此外,模型大多提供了有效的解释,并采用了与人类相似的推理路径。

    实验设计

    研究人员使用了 LL23 在其实验中收集的人类跨领域比对数据。数据包含 12 个领域,从中选择了 32 个领域对。对于每个领域对,研究人员构建了 2-3 个形式为“如果一个 x(源项目)是一个 y(目标领域),它会是什么 y?”的语句(例如,“如果一个医生(源项目)是一个颜色(目标领域),它会是什么颜色?”)。最终,研究人员获得了 75 个语句,每个语句都由 20 个参与者回答。

    研究人员选择了七个强大的 LLMs,包括 Flan 语言模型和 Llama-chat 语言模型的变体,以及 Mistral-7B。这些模型被称为“指令遵循 LLMs”,属于专门训练用于遵循指令的语言模型类别——这在我们研究的语境中是一个重要的特征。

    实验结果

    研究人员发现,LLMs 在群体层面上的跨领域比对性能显著高于随机猜测。一些 LLMs 在个体层面上的比对结果甚至超过了群体层面上的最流行映射,表明它们的行为更接近于“典型”的人类行为,而不是随机参与者。

    解释分析

    研究人员还提示模型解释其映射结果。他们使用为人类确定的相似性类别(例如,感知相似性)来训练一个分类器,根据这些类别对模型的解释进行分类。结果表明,模型的解释类别分布与人类非常相似,表明它们在概念表征中依赖于类似类型的相似性。此外,对模型解释进行定性分析表明,它们能够为跨领域映射提供简洁的论据。

    结论

    本文的研究结果表明,LLMs 在跨领域比对任务中表现出与人类相似的行为模式,并能够对这些映射进行推理。这表明,LLMs 可能与人类一样,依赖于感知相似性等因素来进行概念化和推理。

    未来方向

    研究人员计划进一步研究这些发现的意义,并探讨 LLMs 与人类之间的这种比对是否更深层次,即,这些测试与人类个性和认知模式之间的行为关联是否也能在 LLMs 中观察到。鉴于 LLMs 表现出的令人印象深刻的能力,一些研究将它们视为认知模型,甚至神经模型。本文的研究为这种观点提供了实证基础,有助于了解这种观点的优缺点。

    本文的研究结果为我们理解 LLMs 的能力提供了新的视角,并为未来研究提供了方向。

  • 游戏卡顿的救星?深度解析CPU缓存为何如此重要!

    你是否也曾体验过在酣畅淋漓的游戏过程中,画面突然卡顿,操作延迟甚至出现撕裂?这种糟糕的体验足以让任何玩家抓狂。众所周知,显卡性能不足是造成游戏卡顿的重要原因之一,但除此之外,还有一个常常被玩家忽视的关键因素——CPU缓存。

    CPU缓存:CPU的高速“便签本”

    CPU缓存,顾名思义,是CPU内部的一块存储区域,它的作用类似于CPU的“高速便签本”,用于临时存储CPU需要频繁使用的数据和指令。

    想象一下,CPU就像一位经验丰富的厨师,而内存则是存放着各种食材的仓库。当厨师需要某种食材时,如果每次都要跑到仓库去取,那将花费大量的时间。而CPU缓存就像厨师工作台旁边的小冰箱,存放着一些常用的食材,需要时随手可取,大大提高了工作效率。

    CPU缓存的分级存储

    为了更高效地利用缓存空间,CPU缓存通常采用多级缓存结构,常见的有三级缓存:

    • L1缓存(一级缓存): 速度最快,容量最小,通常只有几十KB,存储CPU即将执行的指令和数据。
    • L2缓存(二级缓存): 速度和容量介于L1和L3之间,通常有几百KB到几MB,存储CPU近期使用过的指令和数据。
    • L3缓存(三级缓存): 速度最慢,容量最大,可以达到几十MB,存储所有CPU核心共享的数据。

    当CPU需要访问某个数据时,会先在L1缓存中查找,如果找到则直接使用;如果没有找到,则依次在L2、L3缓存中查找,最后才会访问内存。

    CPU缓存为何对游戏至关重要?

    游戏运行时,CPU需要进行大量的计算和数据处理,例如计算游戏角色的位置、处理游戏物理效果、渲染游戏画面等等。这些数据通常需要反复调用,而CPU缓存的存在就能大大减少CPU访问内存的次数,从而提高游戏运行效率,减少卡顿现象。

    举例来说,游戏中角色的移动轨迹、碰撞检测等都需要CPU进行大量的计算,而这些计算都需要反复读取和写入角色的位置、速度等数据。如果这些数据存储在内存中,每次读取都需要花费较长时间,就会导致游戏卡顿。而如果将这些数据存储在CPU缓存中,CPU就能快速访问,从而保证游戏的流畅运行。

    AMD与英特尔:缓存技术之争

    长期以来,AMD和英特尔作为CPU领域的巨头,一直在缓存技术上不断竞争,并分别推出了各自的技术,例如AMD的3D V-Cache技术和英特尔的Smart Cache技术。

    • AMD注重缓存容量: AMD的CPU通常拥有更大的缓存容量,例如最新发布的锐龙7 5800X3D处理器,就拥有高达96MB的3D V-Cache,能够存储更多的数据,进一步减少访问内存的频率,从而提升游戏性能。
    • 英特尔注重缓存速度: 英特尔的CPU则更注重缓存速度,例如最新的酷睿i9-13900K处理器,其L3缓存的速度高达5.2GHz,能够更快地访问缓存中的数据,同样能够提升游戏性能。

    总结:

    CPU缓存作为CPU的重要组成部分,对游戏性能有着至关重要的影响。无论是AMD的大容量缓存还是英特尔的快速缓存,都在努力提升玩家的游戏体验。未来,随着游戏对硬件性能的要求越来越高,相信CPU缓存技术也将不断发展,为玩家带来更加流畅的游戏体验。

  • G-DIG: 基于梯度的机器翻译高质量、多样化指令微调数据选择方法

    摘要

    大型语言模型 (LLM) 在通用场景中展现出卓越的能力,而指令微调使其能够在各种任务中与人类意图保持一致。然而,指令数据的多样性和质量仍然是指令微调的两大挑战。为此,本文提出了一种基于梯度的新方法 G-DIG,用于自动选择高质量、多样化的指令微调数据,以应用于机器翻译任务。

    核心创新:

    • 分析单个训练样本在训练过程中对模型的影响。
    • 利用影响函数和少量高质量种子数据集,选择对模型产生积极影响的训练样本作为高质量样本。
    • 通过对梯度进行聚类和重采样,最大限度地提高训练数据对模型影响的多样性。

    实验结果:

    在 WMT22 和 FLORES 翻译任务上的大量实验证明了该方法的优越性,深入分析进一步验证了其有效性和泛化能力。

    主要内容:

    1. 引言
    • 指令微调对于提升大型语言模型在特定任务上的表现至关重要。
    • 指令数据的多样性和质量是指令微调成功的关键因素。
    • 现有方法大多依赖外部模型来判断质量或多样性,忽略了 LLM 本身的模型行为和强大能力。
    1. 相关工作
    • 回顾了 LLM 在机器翻译中的应用,包括上下文翻译样本选择、提示优化和解码策略。
    • 总结了训练数据质量和多样性在指令微调中的重要性,并分析了现有自动选择高质量指令方法的不足。
    • 介绍了基于梯度的数据选择方法,特别是影响函数在识别错误训练数据和追踪事实知识方面的应用。
    1. 方法
    • 高质量数据选择:
      • 使用人工标注的小规模高质量翻译数据作为种子数据。
      • 利用影响函数 (IF) 量化训练样本对测试样本的影响。
      • 选择对种子数据产生积极影响的训练样本作为高质量数据。
    • 多样化数据选择:
      • 使用梯度相似性评估训练数据的整体多样性。
      • 对训练样本的梯度进行 K 均值聚类,以获得不同的模式。
      • 从聚类结果中均匀采样,以确保训练数据的多样性。
    1. 实验设置
    • 数据集: WMT22 和 FLORES 翻译数据集。
    • 模型: Baichuan2-7B 和 Llama2-7B。
    • 评估指标: BLEU、BLEURT 和 COMET。
    • 基线模型: 随机选择、奖励模型选择、Bayling-13B、BigTranslate-13B、TIM。
    1. 实验结果
    • G-DIG 在不同数量的训练数据上均优于随机选择基线。
    • G-DIG 优于基线模型,并取得了与 SOTA 模型相当的结果。
    • 人工评估表明,与随机基线相比,G-DIG 能够更好地调整模型。
    • 多样性增强模块在训练数据较少时效果更为显著。
    • G-DIG 选择的文本具有高度的平行性和准确性。
    1. 结论
    • G-DIG 是一种有效的选择高质量、多样化 LLM 微调数据的方法,可以显著提高机器翻译性能。

    局限性:

    • 计算影响函数的计算成本较高。

    伦理考量:

    • 所有数据源均为公开可用,不涉及隐私问题。
    • 所有人工评估均由专业翻译人员完成,并支付市场工资。

    简要总结

    本文提出了一种名为 G-DIG 的方法,用于选择高质量和多样化的训练数据,以改进机器翻译模型。G-DIG 利用梯度信息来识别对模型性能有积极影响的训练样本,并通过聚类和重采样技术来确保数据的多样性。实验结果表明,G-DIG 在各种翻译任务中均优于基线方法,并取得了与最先进模型相当的结果。


    export.arxiv.org/pdf/2405.12915


    Q: 这篇论文试图解决什么问题?

    A: 这篇论文试图解决大型语言模型(Large Language Models,LLMs)在指令微调(instruction finetuning)过程中面临的两个主要挑战:指令数据的多样性(Diversity)和质量(Quality)。具体来说,论文提出了一个名为G-DIG(Gradient-based DIverse and hiGh-quality Instruction Data Selection)的新颖方法,用于自动选择高质量的、多样化的指令微调数据,以提高机器翻译的性能。

    在指令微调中,尽管已有研究提出通过收集大量的指令数据来提升LLMs的表现,但这些方法往往依赖于另一个模型来评估数据的质量和多样性,而忽视了LLMs本身的内在行为和强大能力。为了解决这一问题,G-DIG方法利用影响函数(Influence Function)这一基于梯度的方法来量化个别训练样本对模型的影响,并通过以下两个步骤来选择数据:

    1. 高质量数据选择:通过影响分数来衡量每个训练样本对测试实例的响应质量,并选择对高质量种子数据集(由人工创建的一小部分高质量数据)产生积极影响的训练样本作为高质量数据。
    2. 增强数据多样性:通过聚类梯度并重新采样,最大化训练数据对模型的不同影响,以增强训练数据的多样性。

    通过在WMT22和FLORES翻译任务上的广泛实验,论文证明了G-DIG方法的有效性和泛化能力。

    Q: 有哪些相关研究?

    A: 这篇论文提到了多个与大型语言模型(LLMs)在机器翻译任务中的指令微调(instruction finetuning)相关的研究。以下是一些主要的相关研究领域和具体工作:

    1. LLMs在机器翻译中的应用
      • 研究了强大的LLMs(如GPT-4)在机器翻译任务上的进步,以及如何充分利用LLMs的翻译能力。
    2. 指令微调数据的质量和多样性
      • 探讨了指令微调数据的质量和多样性对LLMs性能的影响,并提出了一些方法来自动选择高质量的、多样化的训练数据。
    3. 基于梯度的数据选择
      • 研究了如何使用影响函数和梯度信息来选择高质量的微调数据,并展示了这种方法在选择高质量数据方面的潜力。
    4. 特定工作
      • Xu et al. (2023):提出首先在单语数据上微调模型,然后在高质量的平行数据上进行微调。
      • Li et al. (2024b):通过多语言指令微调训练模型,以激发翻译能力。
      • Li et al. (2024a):提出通过一种修补机制从更大的模型中创建高质量的指令微调数据。
      • Chen et al. (2023b):通过添加全局指令表示来提高模型对指令的理解,并通过对过度翻译和遗漏翻译结果与正确翻译进行比较,提高模型的忠实度。
      • Zeng et al. (2023b):提出了一种新的框架,使用比较示例来教导LLMs学习翻译。
    5. 其他方法
      • Cao et al. (2023):提出通过结合几个语言指标使用线性模型来评估每个指令的质量。
      • Du et al. (2023):提出了一种综合方法,基于奖励模型得分和语义多样性来选择高质量和多样化的指令。

    这些研究为本文提出的G-DIG方法提供了背景和对比,同时也展示了在LLMs指令微调领域中,如何通过不同方法来提高翻译质量和模型性能。

    Q: 论文如何解决这个问题?

    A: 论文通过提出一个名为G-DIG(Gradient-based DIverse and hiGh-quality Instruction Data Selection)的新方法来解决大型语言模型(LLMs)在机器翻译中的指令微调数据的多样性和质量问题。G-DIG方法包括两个主要组成部分:

    1. 高质量数据选择(High-quality Data Selection)
      • 利用**影响函数(Influence Function, IF)**来量化个别训练样本对模型行为的影响。
      • 通过人工创建一个小的高质量种子数据集(seed data),作为评估训练数据质量的标准。
      • 选择那些对种子数据产生积极影响的训练样本作为高质量数据。
    2. 增强数据多样性(Enhancing Diversity)
      • 使用梯度相似性来评估训练数据的多样性。
      • 通过梯度聚类算法(如K-means)对训练样本的梯度进行聚类,以区分不同的影响模式。
      • 从聚类结果中均匀采样,以确保训练数据的多样性。

    具体实施步骤如下:

    • 步骤1:计算影响分数,通过影响函数计算候选池中样本对种子数据的影响。
    • 步骤2:选择具有所有正影响的训练样本作为高质量数据。
    • 步骤3:对选定的高质量数据进行梯度聚类,以区分不同的影响,并重新采样以获得高质量和多样化的微调数据。

    此外,论文还采用了一些技术手段来提高计算效率和减少内存消耗,例如使用Kronecker-Factored Approximate Curvature (KFAC) 来近似Hessian矩阵,以及使用随机投影来降低梯度的维度。

    通过这些方法,G-DIG旨在直接利用模型梯度,捕捉模型通过学习算法获得的行为,并将其反馈到训练数据的选择中,而不是依赖外部模型来判断质量和多样性。论文通过在WMT22和FLORES翻译任务上的广泛实验,证明了G-DIG方法的有效性和泛化能力。

    Q: 论文做了哪些实验?

    A: 论文中进行了一系列的实验来验证G-DIG方法的有效性。以下是实验的主要设置和结果:

    1. 实验设置
      • 数据集:在中文到英文(Zh ⇒ En)和德文到英文(De ⇒ En)的翻译任务上进行实验。
      • 候选池:收集了大量候选数据集,并手动构建了两个小的种子数据集。
      • 模型:使用了Baichuan2-7B和Llama2-7B这两种大型语言模型(LLMs)。
      • 微调设置:微调过程持续3个epoch,初始学习率为1e-5,全局批量大小为64。
      • 评估:使用BLEU、BLEURT和COMET等自动评估指标。
    2. 实验结果
      • 主要结果:G-DIG模型在不同数量的选定训练数据(从1k到64k)上,不仅超过了基线选择方法,还达到了与现有最佳模型(SOTA)相当的性能。
      • 与基线和SOTA模型的比较:G-DIG在多个评估指标上超越了随机选择模型,并在某些情况下与SOTA模型如TIM-7B、Bayling-13B、BigTranslate-13B和NLLB-54B等性能相当或更优。
      • 人类评估:进行了人类评估,结果显示G-DIG方法使模型的翻译质量更好,平均得分更高,且在中文到英文和德文到英文的翻译中,G-DIG子集模型的翻译质量更常被评为优于随机子集模型。
    3. 分析
      • 高质量数据选择模块的优越性:G-DIG w/o Diversity(不增强数据多样性的G-DIG)与基于奖励模型的方法相比,显示出更好的性能。
      • 多样性增强模块的改进:G-DIG在训练数据多样性方面优于基于嵌入的方法。
      • 选定数据的质量:展示了G-DIG和随机选择训练数据的并行文本示例,G-DIG选择的数据在目标文本空间中准确、连贯,并且在源文本方面自然、格式和语法正确。
    4. 超参数讨论
      • 讨论了G-DIG方法中的两个主要超参数:种子数据集的大小和K-means聚类的数量。
    5. 统计分析
      • 对实验结果进行了统计分析,使用t-test来比较G-DIG与随机基线的结果,并提供了p值。

    这些实验结果和分析强调了数据选择在LLMs指令微调中的重要性,并证明了G-DIG方法在提高翻译性能方面的有效性和泛化能力。

    Q: 有什么可以进一步探索的点?

    A: 论文提出了G-DIG方法,并在机器翻译任务上进行了实验验证。尽管取得了积极的结果,但仍有一些可以进一步探索的点:

    1. 计算成本:影响函数(Influence Function)的计算成本可能很高,尤其是在大型语言模型上。未来的工作可以探索减少计算成本的方法,例如通过优化算法或利用更高效的硬件。
    2. 超参数调整:论文中提到了两个主要的超参数:种子数据集的大小和K-means聚类的数量。进一步研究这些超参数的最佳设置,以及它们如何影响不同语言对和任务的性能,可能是有价值的。
    3. 多样性和质量的平衡:虽然G-DIG旨在同时提高数据的多样性和质量,但找到两者之间的最佳平衡可能需要进一步的研究。这可能包括开发更精细的度量标准或调整方法来平衡这两个因素。
    4. 跨领域应用:论文中的实验主要集中在机器翻译任务上。探索G-DIG方法在其他领域(如文本摘要、问答系统等)的应用,可能会揭示新的可能性和挑战。
    5. 模型泛化能力:研究G-DIG选择的数据如何影响模型在未见过的数据上的泛化能力,以及如何改进方法以提高模型的鲁棒性。
    6. 人类评估的扩展:虽然进行了人类评估,但扩展这些评估以包括更多样本和评估者,以及在不同的语言对和任务中进行评估,可能会提供更深入的见解。
    7. 集成其他选择标准:考虑将G-DIG与其他数据选择标准(如任务相关性、数据难度等)结合起来,以进一步优化微调数据集。
    8. 实时应用:研究如何将G-DIG方法应用于实时系统,以及如何根据用户反馈动态调整数据选择策略。
    9. 可解释性和透明度:提高数据选择过程的可解释性和透明度,帮助用户和研究人员理解模型是如何从大量候选数据中做出选择的。
    10. 伦理和社会影响:进一步探讨使用G-DIG方法可能带来的伦理和社会影响,确保所选数据集的公平性和无偏见性。

    这些探索点可以帮助推动LLMs指令微调领域的研究,提高模型性能,同时确保数据选择过程的效率和公正性。

    Q: 总结一下论文的主要内容

    A: 这篇论文的主要内容包括以下几个方面:

    1. 问题陈述:论文指出,在大型语言模型(LLMs)的指令微调过程中,指令数据的多样性和质量是两个主要挑战。
    2. 方法介绍:为了解决这些挑战,论文提出了一种名为G-DIG(Gradient-based DIverse and hiGh-quality Instruction Data Selection)的新方法,用于自动选择高质量的、多样化的指令微调数据。
    3. 关键创新
      • 使用**影响函数(Influence Function)**来量化个别训练样本对模型的影响,并选择对模型有积极影响的样本作为高质量数据。
      • 通过梯度聚类和重采样来增强训练数据的多样性。
    4. 实验设计:论文在中文到英文(Zh ⇒ En)和德文到英文(De ⇒ En)的翻译任务上进行了实验,使用了Baichuan2-7B和Llama2-7B这两种大型语言模型。
    5. 实验结果:G-DIG方法在不同数量的选定训练数据上,不仅超过了基线选择方法,还达到了与现有最佳模型(SOTA)相当的性能。此外,人类评估结果显示G-DIG方法能够更好地对齐模型,提高翻译质量。
    6. 分析与讨论
      • 对G-DIG的高质量数据选择模块和多样性增强模块进行了深入分析,证明了这些模块的有效性。
      • 讨论了G-DIG方法中的两个主要超参数:种子数据集的大小和K-means聚类的数量。
    7. 结论与局限性
      • 论文总结了G-DIG方法能够提高LLMs在机器翻译任务上的性能,并更好地对齐模型。
      • 指出了影响函数计算成本高的问题,并提出了未来工作的方向。
    8. 伦理考虑:论文提到所有数据来源都是公开的,不涉及隐私问题,并且所有人类评估都支付了市场工资。

    这篇论文通过提出G-DIG方法,为大型语言模型的指令微调数据选择提供了一种新的思路,并在实验中证明了其有效性。

  • 中文互联网正在加速崩塌:一场关于记忆与遗忘的数字浩劫

    这篇文章探讨了一个令人担忧的现象:中文互联网内容正在以前所未有的速度消失,尤其是移动互联网兴起之前的时期。作者以“时间的二向箔”来形容这种现象,将互联网比作正在被二维化的太阳系,所有曾经存在过的信息都在逐渐消失殆尽。

    文章从一个简单的搜索开始,引出问题:

    作者尝试在百度上搜索“马云”在1998年到2005年期间的信息,结果却发现几乎没有任何有效信息。即使更换搜索引擎,结果也大同径庭。进一步的搜索表明,不仅仅是马云,其他同时期的人物,甚至是曾经红极一时的网站和平台,其信息都已大量消失。

    造成这种现象的原因主要有两个:

    1. 经济原因: 维护网站需要持续的资金投入,而许多早期网站缺乏盈利模式,最终因资金链断裂而关闭。即使是盈利网站,也可能因为早期内容流量低而选择将其删除,以节省成本。
    2. 监管原因: 随着互联网监管的加强,一些早期内容可能因为不符合现行规定而被删除。此外,舆论环境的变化也导致一些曾经“平常”的内容变得敏感,平台和个人出于自我审查的目的,选择主动删除这些内容。

    除了经济和监管因素,其他原因还包括:

    • 技术变革:例如域名变更、平台更迭等。
    • 版权保护:例如早期盗版资源网站的消失。
    • 个人意愿:例如个人网站的关闭。

    作者认为,互联网内容的消失是“信息进化竞争”的必然结果。

    在注意力经济时代,只有能够持续吸引注意力的内容才能存活,而维持内容存在的成本也是一个重要因素。传统互联网内容的消失,正是这种竞争的体现。

    文章最后表达了对“没有历史”的担忧。

    作者认为,互联网信息的消失将导致我们失去对过去的记忆,无法再了解曾经发生过的事情和存在过的人。这种“失忆”将对个人和社会产生深远的影响。

    文章以《三体》中的“二向箔”作比喻,将互联网内容的消失描绘成一场不可逆转的浩劫,并呼吁人们珍惜现存的信息,因为它们随时都可能消失。

    文章亮点:

    • 以小见大,从一个简单的搜索引出互联网内容消失的重大问题。
    • 分析透彻,从经济、监管、技术等多个角度剖析问题根源。
    • 文笔生动,运用“时间的二向箔”等比喻,使文章更具感染力。
    • 引人深思,引发读者对互联网时代信息保存和历史记忆的思考。

    这篇文章以其深刻的洞察力和犀利的笔触,揭示了中文互联网内容正在加速消失的现状,并对其原因和影响进行了深入分析,是一篇发人深省的佳作。


    中文互联网正在加速崩塌

    在互联网时代,我们习惯了通过几次简单的点击就能获取信息。然而,近年来,一个令人警觉的趋势正在悄然发生:中文互联网的内容正在迅速消失。

    一个简短的实验

    先问大家一个问题:如果我们在百度上搜索“马云”,并将时间范围设定在1998年到2005年,结果会有多少条呢?很多人会猜测,大概有百万甚至千万条。然而,实际结果却令人震惊:仅有1条,并且这条信息还是错的,发布时间是2021年。

    这个现象不仅仅限于马云,其他知名人物如马化腾、雷军等的早期信息也同样难以搜寻。几乎所有在那个年代曾经红火的中文网站的信息都已经消失,唯一的例外是新浪网,但其能找到的信息也非常有限。

    崩塌的原因

    为什么会出现这种情况呢?主要有两个原因:

    1. 经济原因:维护一个网站需要成本,如果网页长期无人访问,维护它就成了负担。许多早期的网站因为缺乏经济支持而关闭,如人人网。
    2. 监管原因:随着互联网监管的日益严格,许多曾经合法存在的内容被删除,或者由于舆论环境的变化,一些曾经平常的内容变得敏感,导致内容被清除。

    此外,版权保护、机构和个人意愿等原因也导致了大量内容的消失。但这些只是次要原因,主要还是经济和监管因素。

    互联网的记忆

    互联网曾被认为是有记忆的,但现在看来,这种记忆是短暂的。大量曾经存在的内容已经消失。曾有人将重要文件存储在某BBS上,几年后发现整个BBS都不见了。类似的情况在Hotmail邮箱、人人网等平台上也发生过。

    这种现象让人不禁想起刘慈欣的《三体》中的“二向箔”概念。小说中,先进文明用二向箔将整个太阳系从三维压缩成二维。而在现实中,互联网内容的消失就像是时间的二向箔,吞噬了过去的记忆。

    互联网内容的进化

    互联网内容的存在也遵循进化论:以尽可能低的成本争取尽可能多的注意力。当一个内容能吸引足够多的注意力且维持成本较低时,它就有可能存活。否则,它就会消失。传统互联网内容的消亡是这种“信息进化竞争”的自然结果。

    综上所述,中文互联网内容的消失是一个复杂而多维度的现象。随着时间的推移,这种趋势可能还会继续。对于我们这些依赖互联网获取信息的人来说,这无疑是一种损失。我们需要更多的关注和讨论,以便找到应对之策,保护这份曾经属于我们的数字记忆。


    这篇文章旨在引发读者对互联网内容保存的思考。如果您对这一话题有更多见解,欢迎在评论区分享。


    这篇文章的标题是《中文互联网正在加速崩塌》,作者丁丁在文中详细描述了中文互联网内容正在迅速消失的现象,并探讨了背后的原因。这是一个值得深思的问题,尤其对于那些关心互联网历史与信息保存的人们来说。

    主要内容与观点

    1. 中文互联网内容的消失
      • 作者通过搜索马云、雷军等知名人物在1998年至2005年间的相关信息,发现几乎找不到有效的原始资料。这种情况不仅限于个别名人,而是普遍存在于那个时代的中文互联网内容中。
      • 许多曾经红极一时的中文网站,如网易、搜狐、天涯论坛、校内网等,其早期的内容几乎完全消失。甚至一些仍在运营的网站,其历史内容也所剩无几。
    2. 可能的原因
      • 经济原因:维持网站运营需要成本,包括服务器、带宽、人员运维等。如果某些内容没有流量价值或者战略价值,网站可能选择删除这些内容以节省成本。
      • 监管原因:随着互联网监管的日益严格,许多曾经合法或灰色存在的内容被删除。一些敏感内容或过时言论也可能被删除,以避免潜在的风险。
      • 其他原因:版权保护加强、机构和个人的自我审查等,也导致大量内容被移除。
    3. 互联网记忆的短暂性
      • 作者指出,互联网的记忆并不像我们想象中那样永久。许多内容在时间的洪流中被“吞噬”,类似于刘慈欣《三体》中的“二向箔”吞噬一切的概念。

    评论与思考

    这篇文章揭示了一个非常现实且令人担忧的问题:中文互联网的历史正在被快速遗忘。这一点值得我们深入思考和讨论。

    1. 互联网的脆弱性

    互联网被视为信息存储的无尽宝库,但事实上,它非常脆弱。网站的关闭、内容的删除、服务器的崩溃等,都可能导致信息的永久丧失。我们需要认识到,互联网并不是一个可靠的长期存储工具。

    2. 数字记忆的保存

    如何有效地保存数字记忆是一个亟待解决的问题。除了依赖网站自身的存档措施,互联网档案馆(如Wayback Machine)等第三方机构的作用也至关重要。同时,个人和机构也需要加强对重要数字资料的备份意识。

    3. 权力与信息控制

    信息的消失不仅是技术和经济原因造成的,监管和自我审查在其中也起到了重要作用。这反映了权力对互联网内容的巨大影响力。我们需要在信息自由和监管之间寻找平衡,以避免大量有价值的信息被无故删除。

    4. 数字鸿沟的扩大

    随着旧内容的消失,新一代互联网用户将越来越难以接触到互联网的早期历史。数字鸿沟不仅体现在技术和设备的使用上,也体现在信息获取的全面性和深度上。

    结论

    《中文互联网正在加速崩塌》一文提醒我们,互联网并不是一个固若金汤的记忆体,它的内容会因为多种原因而消失。我们需要更加重视数字内容的保存和信息的自由流通,以确保互联网能够真正成为人类知识和历史的长久存储库。这不仅需要技术手段的支持,更需要政策和社会意识的共同努力。

  • 在工程上,”Chain of Thought” (COT) 并不是简单地让大语言模型(LLM)多看几遍题目来回答

    在工程上,”Chain of Thought” (COT) 并不是简单地让大语言模型(LLM)多看几遍题目并综合之前的回答做最终回复。相反,COT 是一种引导模型逐步推理和回答问题的方法,目的是通过明确和详细的推理步骤来提高模型的回答质量和准确性。

    Chain of Thought 的核心思想

    COT 的核心思想是通过引导模型逐步推理,模拟人类解决复杂问题时的思考过程。它包括以下几个关键点:

    1. 分步推理:将复杂问题分解为一系列小步骤,每一步都清晰地推导出下一步的结果。这种方法有助于模型在每个小步骤上进行更准确的计算和推理。
    2. 过程透明:在回答问题时,模型不仅给出最终答案,还提供详细的推理过程。这使得模型的推理过程更加透明,便于检查和验证。
    3. 提高准确性:通过逐步推理,模型可以更好地处理复杂任务,相比直接生成最终答案,分步推理可以减少错误的累积,提高最终答案的准确性。

    COT 的实现方式

    实现 COT 通常包括以下步骤:

    1. 明确问题:首先明确问题的要求,确定需要解决的具体任务。
    2. 分解步骤:将复杂问题分解为若干个简单的子问题或步骤,每一步都明确具体的操作或推理过程。
    3. 逐步推理:模型按照分解的步骤逐步进行推理,每一步都给出对应的结果。
    4. 综合答案:最后将各个步骤的结果综合起来,得到最终答案。

    示例

    下面是一个简单的例子,展示了如何使用 COT 来解决一个数学问题:

    问题:计算 123 和 456 的和。

    传统方法

    123 + 456 = 579

    COT 方法

    1. 首先计算个位数的和:3 + 6 = 9
    2. 然后计算十位数的和:2 + 5 = 7
    3. 最后计算百位数的和:1 + 4 = 5
    最终答案是:579

    工程实现中的注意事项

    在工程实现中,COT 需要注意以下几点:

    1. 提示设计:设计合适的提示(prompts)以引导模型进行分步推理。提示应当清晰、详细,能够逐步引导模型完成每一步的推理。
    2. 模型训练:使用带有 COT 的训练数据对模型进行训练,使其学会分步推理的方式。这可以通过监督学习或使用带有详细推理步骤的示例进行强化学习。
    3. 评估和验证:对模型的推理过程进行评估和验证,确保每一步的推理都是正确的,从而保证最终答案的准确性。

    结论

    COT 在工程上是一种通过分步推理来提高大语言模型回答质量的方法,而不是简单地重复多次回答然后综合结果。它通过明确和详细的推理步骤,帮助模型更好地理解和解决复杂问题,从而提高回答的准确性和可靠性。

  • 赋予大模型道德决策能力:Skin-in-the-Game框架

    在人工智能蓬勃发展的今天,大型语言模型(LLMs)在总结、算术推理和问答等任务中展现了卓越的能力。然而,当涉及到多方利益相关者的道德推理和伦理决策时,这些模型往往举步维艰。最近提出的“Skin-in-the-Game”(SKIG)框架旨在通过一种全新的方法,提升LLMs在道德推理方面的能力。

    道德决策的挑战

    随着Vaswani等人(2017)和Radford等人(2018)开发的LLMs变得越来越复杂,其应用范围也在不断扩大。从教育(Kung等,2023)到优化(Li等,2023),这些模型已经革新了各个领域。尽管取得了显著进展,但在伦理决策领域仍面临重大挑战。这是因为人类价值观和伦理观念的复杂性,受文化和社会偏见(Fraser等,2022)的影响,构成了独特的难题。

    SKIG框架

    由弗吉尼亚理工大学和亚马逊的研究人员提出的SKIG框架,通过模拟决策对多方利益相关者的影响,旨在提升LLMs的道德推理能力。该框架的核心概念是“Skin-in-the-Game”,即通过让模型承担其决策的结果,促进更加负责任和道德的选择。受到Taleb和Sandis(2013)的启发,该框架结合了共情练习和风险评估,从而模拟问责机制,提升决策能力。

    SKIG的工作原理

    在SKIG框架中,LLMs被用来基于给定的情境和潜在的行动方案,探索不同的决策情景。模型被引导去设想自己是情境中的每一个利益相关者,模拟其行动的问责性。这种视角的转变显著提高了模型的表现,在各种道德推理基准测试中提升幅度高达70%。这些改进在不同类型的LLMs中都表现出一致性,包括专有模型和开源模型。

    SKIG的关键组成部分

    1. 模拟问责:通过模拟决策的后果,LLMs被引导去考虑对所有利益相关者的影响,从而加深对伦理影响的理解。
    2. 共情练习:该框架包含一些练习,使LLMs能够与不同的利益相关者产生共情,提升其道德推理能力。
    3. 风险评估:通过评估不同决策的潜在风险,LLMs能够做出更加明智和道德的选择。

    相关工作和贡献

    道德在LLMs中的研究引起了广泛关注,各种方法侧重于通过微调(Ganguli等,2022)或提示(Bang等,2022)将这些模型与人类价值观对齐。SKIG框架补充了这些方法,通过增加在各种情景下分析决策对利益相关者影响的关键维度。

    结论

    Skin-in-the-Game框架在提升LLMs道德决策能力方面迈出了重要一步。通过模拟问责机制和培养共情能力,SKIG解决了AI道德推理的固有挑战。随着LLMs的不断发展,像SKIG这样的框架将在确保这些模型做出负责任和道德的选择方面发挥关键作用,最终惠及整个社会。


    “身临其境”:通过大语言模型中的多方利益相关者协调进行决策 (中文分析)

    这篇论文介绍了 SKIG(Skin-in-the-Game,身临其境),这是一个旨在增强大型语言模型 (LLM) 道德推理能力的新框架。其核心思想是通过促使 LLM 从多个利益相关者的角度考虑其决定的后果,来模拟一种问责制。

    以下是该论文关键方面的细分:

    1. 问题陈述:

    • LLM 在摘要、推理和问答等任务中表现出色,但在道德和伦理决策方面却步履维艰,尤其是在涉及多个利益相关者的复杂场景中。
    • 现有方法主要侧重于通过微调或提示将 LLM 与人类价值观保持一致,但缺乏探索决策后果和模拟问责制的稳健机制。

    2. 解决方案:SKIG 框架

    • 受“身临其境”概念的启发,SKIG 旨在让 LLM 更加了解与其决策相关的潜在风险和回报。
    • 关键组成部分:
      • 情景生成器:根据给定的情况和潜在行动探索多种可能的情景。
      • 利益相关者识别和换位思考:识别所有涉及的利益相关者,并促使 LLM 体验每个利益相关者的视角,从而模拟问责制。
      • 动机分析:分析行动背后的动机,以符合社会规范并促进现实情景的生成。
      • 后果探索:检查每个情景中行动对每个利益相关者的潜在后果。
      • 风险评估:评估最佳情况和最坏情况的后果及其可能性,从而 nuanced 地理解潜在的风险和收益。
      • 结果总结:总结每个情景的关键结果,以帮助做出明智的决策。

    3. 理论基础:

    • 该论文将道德决策制定视为一个优化问题,其中 LLM 旨在最大化代表所有利益相关者效用的综合福利函数。
    • 它为 SKIG 的泛化性能提供了理论保证,强调了 LLM 准确模拟情景分布的能力和所用模拟次数的重要性。

    4. 实验和结果:

    • 该论文在各种道德推理基准测试中评估了 SKIG,包括 MMLU 道德情景、道德故事、ETHICS 常识道德和社会化学 101。
    • SKIG 在不同的 LLM 中始终优于基线方法,如标准提示、零样本 CoT 和思想实验,包括专有模型(TEXT-ADA、TEXT-BABBAGE、TEXT-CURIE、TEXT-DAVINCI、GPT-3.5 TURBO、GPT-4)和开源模型(MISTRAL-7B)。
    • 消融研究证明了 SKIG 框架中每个组件的重要性,其中换位思考和风险评估对性能的提高贡献最大。

    5. 主要贡献:

    • 引入了 SKIG,这是一个通过模拟问责制和多方利益相关者视角来增强 LLM 道德推理能力的新框架。
    • 对 SKIG 的泛化能力进行了理论分析。
    • 在各种道德推理基准测试中证明了相对于现有方法的显著性能改进。

    6. 局限性和未来工作:

    • 该论文承认了与 LLM 情景生成和评估过程中潜在偏差相关的局限性。
    • 未来的工作可以探索减轻这些偏差并进一步增强框架处理复杂道德困境的能力的方法。

    总的来说,这篇论文提出了一种解决 LLM 在道德推理方面局限性的有希望的方法。通过模拟问责制并鼓励多方利益相关者视角,SKIG 为开发更道德、更负责任的 AI 系统提供了一个有价值的框架。

  • 打破瓶颈:一种层次化框架优化大规模语言模型的答案选择

    近年来,基于链式思维提示(Chain-of-Thought, CoT)的技术进步为大规模语言模型(LLMs)在复杂推理任务中带来了显著突破。然而,当模型生成多个推理链并基于答案频率进行集成时,正确答案在少数情况下的表现仍然较差。本文提出的层次化推理聚合框架AoR(Aggregation of Reasoning)通过评估推理链的方式来选择答案,并根据任务复杂度动态调整推理链的数量,显著提升了LLM的推理性能。

    背景与现状

    LLMs在各种自然语言处理任务中取得了显著进展,但在推理任务上与人类水平仍存在差距。传统方法通过增加模型的规模来提升性能,但效果有限。链式思维提示技术通过生成一系列中间步骤来简化每一步的复杂性,提供了一种新颖的视角来解决复杂推理任务。

    然而,目前的多数投票集成方法在错误答案多于正确答案时表现不佳。本文通过对多个推理任务的分析发现,超过80%的样本尽管LLMs能够生成正确答案,但多数投票仍然导致错误预测。例如,在AQuA数据集中,尽管模型生成了正确答案,但由于错误答案的数量优势,最终选择了错误答案。

    研究问题

    在LLMs能够生成正确答案的情况下,如何减小错误答案的干扰以准确选择正确答案?为了回答这一问题,本文提出了AoR框架,通过评估推理链来提升答案选择的准确性。

    AoR框架

    AoR框架分为两个阶段:局部评分和全局评价。在局部评分阶段,评估产生相同答案的推理链,重点关注推理过程的合理性和步骤的适当性。在全局评价阶段,联合评估不同答案组中最具逻辑一致性和方法有效性的推理链,确定最佳推理链并将其对应的答案作为最终输出。

    此外,AoR利用全局评价阶段的评分来估计模型对其最优推理过程和答案的信心水平,动态决定是否需要采样更多的推理链。这种动态采样机制在平衡性能和计算成本方面表现出色。

    实验结果

    实验结果表明,AoR在各种推理任务中的表现优于现有的集成方法。特别是在任务难度较大的情况下,AoR通过动态采样显著提升了LLMs的推理性能,减少了推理开销。

    主要贡献

    1. 识别出现有依赖答案频率的集成机制的不足,强调了推理过程的重要性,设计了层次化推理聚合框架AoR。
    2. 利用最优推理链的评分,AoR动态调整采样数量,在平衡性能和计算成本方面表现优异。

    结论

    本文提出的AoR框架通过评估推理链显著提升了LLMs在复杂推理任务中的性能,为未来的研究和应用提供了新的思路。未来的工作可以进一步优化AoR的评估机制和动态采样策略,以应对更复杂的推理任务。


    arxiv.org/pdf/2405.12939#pdfjs.action=download


    我们来深入了解一下 AoR 框架的各个组成部分,以及它是如何解决大型语言模型 (LLMs) 在复杂推理任务中所面临挑战的。

    现有问题:

    现有的 LLM 推理方法,特别是依赖答案频率进行集成的那些,在面对正确答案属于少数情况时往往表现不佳。这是因为:

    • 多数投票偏差: 当错误答案的数量超过正确答案时,即使 LLM 能够生成正确答案,基于多数投票的机制也可能倾向于选择错误的最终预测。
    • 缺乏推理质量评估: 许多方法仅仅依靠答案出现的频率,而没有对推理过程本身进行质量评估,导致难以区分逻辑合理但答案罕见的情况。

    AoR 框架如何解决这些问题:

    AoR (Aggregation of Reasoning) 框架通过以下几个关键组件来解决上述问题:

    1. 局部评分 (Local-Scoring):
    • 分组: AoR 首先使用 CoT (Chain-of-Thought) prompting 技术生成多个推理链,并将得出相同答案的推理链归为一组。
    • 评估: 在每个组内,AoR 会根据预定义的标准(例如逻辑一致性、步骤清晰度、知识运用等)对每个推理链进行评分。
    • 筛选: AoR 会选择每个组中得分最高的 k 个推理链作为代表,传递到下一阶段。 作用: 局部评分阶段的目标是筛选出每个答案组中推理质量最高的代表性推理链,避免仅仅依赖答案频率进行筛选。
    1. 全局评估 (Global-Evaluation):
    • 代表推理链比较: AoR 从每个答案组中选择一个得分最高的推理链,并将这些代表推理链进行比较。
    • 最终答案选择: AoR 会根据预定义的标准(与局部评分类似)对代表推理链进行评估,并选择得分最高的推理链所对应的答案作为最终答案。 作用: 全局评估阶段的目标是从不同答案中选择推理最充分、逻辑最合理的答案,避免多数投票偏差。
    1. 动态采样 (Dynamic Sampling):
      • 分数差距判断: AoR 会根据全局评估阶段中最高分和次高分推理链之间的分数差距来判断是否需要生成更多推理链。
      • 动态调整: 如果分数差距小于预设阈值,意味着模型对最终答案的选择不够确定,AoR 会自动生成更多推理链,并重复上述评分和评估过程,直到达到预设的置信度或推理链数量上限。
      作用: 动态采样机制能够根据任务的复杂性和模型的置信度自适应地调整推理链的数量,在保证准确性的同时提高效率。

    总结:

    AoR 框架通过结合局部评分、全局评估和动态采样机制,有效地解决了现有 LLM 推理方法的局限性。它不仅关注答案的频率,更注重对推理过程本身进行质量评估,从而提高了 LLM 在复杂推理任务中的准确性和可靠性。

    希望这个解释能够帮助你更好地理解 AoR 框架! 😊


    让我们通过一个例子来说明 AoR 框架如何应用于大型语言模型的复杂推理任务中。

    假设我们现在有一个常识推理任务:

    问题: 小明在公园里散步,突然下起了大雨。他没有带伞,结果全身都湿透了。请问小明应该怎么做才能避免淋湿?

    传统的基于答案频率的 LLM 推理方法可能会生成以下推理链和答案:

    • 推理链 1: 下雨了,小明没有带伞,所以他淋湿了。他应该回家。 (答案:回家)
    • 推理链 2: 下雨了,小明没有带伞,所以他淋湿了。他应该躲到树下。 (答案:躲到树下)
    • 推理链 3: 下雨了,小明没有带伞,所以他淋湿了。他应该跑到附近的商店里避雨。 (答案:跑到商店里)
    • 推理链 4: 下雨了,小明没有带伞,所以他淋湿了。他应该回家。 (答案:回家)

    如果仅仅根据答案频率,”回家” 出现了两次,会被认为是最佳答案。

    然而,”躲到树下” 或者 “跑到商店里” 才是更合理的答案。

    现在我们来看看 AoR 框架如何处理这个问题:

    1. 局部评分: AoR 会将产生相同答案的推理链分组,并对每个推理链进行评分。假设评分标准包括逻辑性、相关性和可行性。
    • “回家” 组的两个推理链得分可能较低,因为它们没有直接解决如何避免淋湿的问题。
    • “躲到树下” 和 “跑到商店里” 的推理链得分可能较高,因为它们提供了更直接、更可行的解决方案。
    1. 全局评估: AoR 会从每个答案组中选择得分最高的推理链进行比较。在这个例子中,”躲到树下” 和 “跑到商店里” 的推理链可能会被选中。AoR 会进一步评估这两个推理链,并根据常识判断 “跑到商店里” 可能比 “躲到树下” 更能有效地避免淋湿。
    2. 动态采样: 假设 AoR 在全局评估阶段对 “跑到商店里” 的推理链很有信心 (例如,分数差距远超预设阈值),它就不会生成更多推理链。否则,它会生成更多推理链,例如 “打电话叫出租车” 或者 “借一把伞”,并重复上述评分和评估过程,直到达到预设的置信度。

    最终,AoR 框架会选择 “跑到商店里” 作为最佳答案,因为它能够更准确地理解问题的语义,并生成更合理、更有效的解决方案。

    通过这个例子,我们可以看到 AoR 框架如何通过对推理过程进行更细致的评估和动态调整,克服了传统方法的局限性,从而在复杂推理任务中取得更好的表现。

  • DeepSeek-V2中的MLA详解

    DeepSeek-V2是DeepSeek团队最新发布的MoE(Mixture of Experts)架构的LLM(大型语言模型)底座。该模型拥有236B的总参数量和21B的每个token激活参数量,支持128K tokens的上下文长度。DeepSeek-V2的一个核心创新点就是Multi-head Latent Attention(MLA)。

    Multi-head Latent Attention(MLA)简介

    MLA对传统Transformer中的多头注意力机制(MHA)进行了改进,主要目标是:

    1. 降低推理时KV Cache的存储开销;
    2. 缓解GQA(Grouped-Query Attention)和MQA(Multi-Query Attention)等方法导致的模型性能损耗。

    标准的MHA结构

    在标准的MHA结构中,每个token的query、key和value通过参数矩阵映射得到,并分割成多个注意力头。每个头独立计算注意力权重并得到输出,这个过程虽然能捕捉丰富的上下文信息,但在推理时需要缓存大量的KV Cache。

    MLA如何改进?

    MLA通过对keys和values进行低秩联合压缩来降低KV Cache:

    1. 低秩Key-Value联合压缩
      [
      \mathbf{c}_t^{KV} = W^{DKV} \mathbf{h}_t
      ]
      [
      \mathbf{k}_t^C = W^{UK} \mathbf{c}_t^{KV}
      ]
      [
      \mathbf{v}_t^C = W^{UV} \mathbf{c}_t^{KV}
      ]
      其中,(\mathbf{c}_t^{KV})表示压缩后的隐向量,(W^{DKV})是降维映射矩阵,(W^{UK})和(W^{UV})是升维映射矩阵。在推理时,只需要缓存隐向量(\mathbf{c}_t^{KV}),显著减少了KV Cache的容量。
    2. Queries的低秩压缩
      [
      \mathbf{c}_t^Q = W^{DQ} \mathbf{h}_t
      ]
      [
      \mathbf{q}_t^C = W^{UQ} \mathbf{c}_t^Q
      ]
      这样即便不能减少KV Cache,但可以降低训练过程中的激活内存。

    代码实现

    以下是MLA在DeepSeek-V2中的Python代码实现片段:


    class DeepSeekV2Attention(nn.Module):
    def init(self, config: DeepSeekV2Config, layer_idx: Optional[int] = None):

    self.w_dq = nn.Linear(self.hidden_size, config.q_lora_rank, bias=config.attention_bias)
    self.w_uq = nn.Linear(config.q_lora_rank, self.num_heads * self.q_head_dim, bias=False)
    self.w_dkv = nn.Linear(self.hidden_size, self.dc, bias=config.attention_bias)
    self.w_uk = nn.Linear(self.dc, self.num_heads * self.q_head_dim, bias=False)
    self.w_uv = nn.Linear(self.dc, self.num_heads * self.q_head_dim, bias=False)

    def forward(self, hidden_states: torch.Tensor, attention_mask: Optional[torch.Tensor] = None, 
                position_ids: Optional[torch.LongTensor] = None, past_key_value: Optional[Cache] = None, 
                output_attentions: bool = False, use_cache: bool = False, **kwargs):
        bsz, q_len, _ = hidden_states.size()
    
        q = self.w_uq(self.q_a_layernorm(self.w_dq(hidden_states))).view(bsz, q_len, self.num_heads, self.q_head_dim).transpose(1, 2)
        kv_seq_len = q.size(-2)
        if past_key_value is not None:
            kv_seq_len += past_key_value.get_usable_length(kv_seq_len, self.layer_idx)
    
        compressed_kv = self.w_dkv(hidden_states)
        if past_key_value is not None:
            compressed_kv = past_key_value.update(compressed_kv)
    
        k = self.w_uk(compressed_kv).view(bsz, -1, self.num_heads, self.q_head_dim).transpose(1, 2)
            v = self.w_uv(compressed_kv).view(bsz, -1, self.num_heads, self.q_head_dim).transpose(1, 2)
    
            attn_weights = torch.matmul(q, k.transpose(2, 3)) * self.softmax_scale
            attn_weights = nn.functional.softmax(attn_weights, dim=-1)
    
            if output_attentions:
                outputs = (attn_weights,)
            else:
                outputs = ()
    
            attn_output = torch.matmul(attn_weights, v)
            attn_output = attn_output.transpose(1, 2).contiguous().view(bsz, q_len, self.hidden_size)
    
            attn_output = self.out_proj(attn_output)
            outputs = (attn_output,) + outputs
    
            if use_cache:
                outputs = outputs + (past_key_value,)
    
            return outputs
    ```
    
    

    结论
    DeepSeek-V2通过引入Multi-head Latent Attention(MLA)结构,成功优化了传统的多头注意力机制(MHA),在保证模型性能的同时,显著降低了推理时KV Cache的存储开销。这不仅提高了模型的效率,也为未来的大模型架构设计提供了新的思路。

    MLA的实现通过对queries、keys和values进行低秩压缩,减少了存储需求,缓解了因GQA和MQA方法导致的性能损耗。这种创新在深度学习模型的设计中具有重要的参考价值。

    如果你对于DeepSeek-V2的MLA结构有更多的兴趣,建议查看其开源代码和详细文档,以便深入理解其工作机制和实现细节。

  • 整体调整Android App的UI亮度

    要在夜间模式下整体降低 Android 应用的亮度,以实现车内环境中舒适的视觉效果,你可以使用以下几种方法:

    1. 使用主题和样式降低亮度:调整应用的主题和颜色资源,使夜间模式的颜色更暗、更柔和。
    2. 使用屏幕亮度调整:在代码中动态调整屏幕亮度。

    下面详细介绍这两种方法:

    方法一:调整主题和样式

    1. 创建夜间模式资源文件: 在 res/values-night 文件夹中创建 styles.xml 文件,并定义夜间模式的颜色。
       <resources>
           <!-- Base application theme for Night mode -->
           <style name="AppTheme" parent="Theme.AppCompat.DayNight">
               <!-- Customize your theme here. -->
               <item name="colorPrimary">@color/colorPrimaryNight</item>
               <item name="colorPrimaryDark">@color/colorPrimaryDarkNight</item>
               <item name="colorAccent">@color/colorAccentNight</item>
               <!-- Add more customizations if needed -->
           </style>
       </resources>
    1. 定义夜间模式的颜色: 在 res/values-night/colors.xml 文件中定义较暗的颜色。
       <resources>
           <color name="colorPrimary">#121212</color> <!-- A dark gray color -->
           <color name="colorPrimaryDark">#000000</color> <!-- Black color -->
           <color name="colorAccent">#BB86FC</color> <!-- A soft purple for accents -->
           <!-- Define more colors if needed -->
       </resources>
    1. 启用夜间模式: 在代码中启用夜间模式。例如,在 MainActivity 中:
       import android.os.Bundle;
       import androidx.appcompat.app.AppCompatActivity;
       import androidx.appcompat.app.AppCompatDelegate;
    
       public class MainActivity extends AppCompatActivity {
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
    
               // Enable night mode
               AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
           }
       }

    方法二:动态调整屏幕亮度

    你可以使用代码动态调整屏幕的亮度,以适应车内环境的需求。

    1. 调整屏幕亮度: 你可以在 Activity 中使用以下代码来调整屏幕亮度:
    import android.os.Bundle;
    import android.provider.Settings;
    import android.view.Window;
    import android.view.WindowManager;
    import androidx.appcompat.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Enable night mode
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    
            // Set screen brightness to a lower value
            setScreenBrightness(0.1f);  // Value between 0.0 (dark) and 1.0 (bright)
        }
    
        private void setScreenBrightness(float brightnessValue) {
            Window window = getWindow();
            WindowManager.LayoutParams layoutParams = window.getAttributes();
            layoutParams.screenBrightness = brightnessValue;
            window.setAttributes(layoutParams);
        }
    }

    请求系统权限(如果需要):

    如果你需要全局调整系统亮度,你可能需要请求系统权限。在 AndroidManifest.xml 中添加权限:

    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

    然后在代码中请求权限:

    import android.content.Intent;
    import android.os.Bundle;
    import android.provider.Settings;
    import androidx.appcompat.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
        private static final int REQUEST_CODE_WRITE_SETTINGS = 1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            if (Settings.System.canWrite(this)) {
                // Set screen brightness to a lower value
                setScreenBrightness(0.1f);
            } else {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, REQUEST_CODE_WRITE_SETTINGS);
            }
        }
    
        

    onActivityResult 中处理权限请求的结果:

       @Override
       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
           super.onActivityResult(requestCode, resultCode, data);
           if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {
               if (Settings.System.canWrite(this)) {
                   // 权限已授予,设置屏幕亮度
                   setScreenBrightness(0.1f);
               } else {
                   // 权限被拒绝,处理相应的逻辑
                   Toast.makeText(this, "需要系统写入权限来调整屏幕亮度", Toast.LENGTH_SHORT).show();
               }
           }
       }
    
       private void setScreenBrightness(float brightnessValue) {
           // 检查权限是否已授予
           if (Settings.System.canWrite(this)) {
               Window window = getWindow();
               WindowManager.LayoutParams layoutParams = window.getAttributes();
               layoutParams.screenBrightness = brightnessValue;
               window.setAttributes(layoutParams);
    
               // 设置系统全局的屏幕亮度
               Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, (int) (brightnessValue * 255));
           } else {
               Toast.makeText(this, "没有系统写入权限", Toast.LENGTH_SHORT).show();
           }
       }

    结合两种方法

    你可以结合上述两种方法,既调整应用的主题颜色,又动态调整屏幕亮度,以达到最佳的夜间模式效果。

    总结

    1. 调整应用主题和样式:使用 Android 的 DayNight 主题和夜间模式资源文件,定义较暗的颜色来适应夜间模式。
    2. 动态调整屏幕亮度:在代码中动态调整屏幕亮度,使屏幕整体亮度降低,从而在车内环境中提供更舒适的视觉效果。

    通过这两种方法的结合,你可以为用户提供一个更好的夜间使用体验。希望这些方法能够帮助你实现应用的夜间模式功能。


    如果不想调整屏幕亮度,你可以通过调整应用的整体 UI 亮度来实现夜间模式效果。以下是几种简单的方法:

    方法一:使用半透明的暗色覆盖层

    为整个应用添加一个半透明的暗色覆盖层,以降低整体亮度。

    1. 在 XML 布局文件中添加覆盖层: 在你的主布局文件中添加一个 View,并将其设置为半透明的黑色。
       <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
    
           <!-- 其他布局组件 -->
    
           <!-- 覆盖层 -->
           <View
               android:id="@+id/overlay"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#80000000" /> <!-- 50% 透明度的黑色 -->
       </FrameLayout>
    1. 在代码中控制覆盖层的可见性: 在代码中动态控制覆盖层的可见性,以便在需要时启用或禁用夜间模式。
       import android.os.Bundle;
       import android.view.View;
       import androidx.appcompat.app.AppCompatActivity;
    
       public class MainActivity extends AppCompatActivity {
           private View overlay;
    
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
    
               overlay = findViewById(R.id.overlay);
    
               // 启用夜间模式
               enableNightMode(true);
           }
    
           private void enableNightMode(boolean enable) {
               if (enable) {
                   overlay.setVisibility(View.VISIBLE);
               } else {
                   overlay.setVisibility(View.GONE);
               }
           }
       }

    方法二:调整应用的主题颜色

    使用 DayNight 主题,并为夜间模式定义较暗的颜色。

    1. 创建夜间模式的颜色资源: 在 res/values-night/colors.xml 文件中定义较暗的颜色。
       <resources>
           <color name="colorPrimary">#121212</color>
           <color name="colorPrimaryDark">#000000</color>
           <color name="colorAccent">#BB86FC</color>
           <!-- 其他颜色定义 -->
       </resources>
    1. styles.xml 中定义夜间模式主题: 在 res/values-night/styles.xml 文件中定义夜间模式的主题。
       <resources>
           <style name="AppTheme" parent="Theme.AppCompat.DayNight">
               <item name="colorPrimary">@color/colorPrimaryNight</item>
               <item name="colorPrimaryDark">@color/colorPrimaryDarkNight</item>
               <item name="colorAccent">@color/colorAccentNight</item>
               <!-- 其他主题属性 -->
           </style>
       </resources>
    1. 启用夜间模式: 在代码中启用夜间模式。
       import android.os.Bundle;
       import androidx.appcompat.app.AppCompatActivity;
       import androidx.appcompat.app.AppCompatDelegate;
    
       public class MainActivity extends AppCompatActivity {
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
    
               // 启用夜间模式
               AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
           }
       }

    方法三:动态调整各个 UI 组件的亮度

    可以通过编程方式调整各个 UI 组件的亮度,例如背景色和文本色。

    1. 遍历并调整视图树中的每个视图: “`java
      import android.os.Bundle;
      import android.view.View;
      import android.view.ViewGroup;
      import android.widget.TextView;
      import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main); // 调整每个视图的亮度 View rootView = findViewById(android.R.id.content); adjustBrightness(rootView, 0.5f); // 0.5 表示 50% 亮度 } private void adjustBrightness(View view, float brightnessFactor) {
      if (view instanceof ViewGroup) {
      ViewGroup viewGroup = (ViewGroup) view;
      for (int i = 0; i < viewGroup.getChildCount(); i++) {
      adjustBrightness(viewGroup.getChildAt(。。。。。。

    1. 递归调整视图树中的每个视图: 下面的代码示例演示了如何递归遍历视图树,并调整每个视图的亮度。该方法适用于 TextViewImageView 等常见视图组件。
       import android.graphics.Color;
       import android.os.Bundle;
       import android.view.View;
       import android.view.ViewGroup;
       import android.widget.TextView;
       import androidx.appcompat.app.AppCompatActivity;
    
       public class MainActivity extends AppCompatActivity {
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
    
               // 调整每个视图的亮度
               View rootView = findViewById(android.R.id.content);
               adjustBrightness(rootView, 0.5f);  // 0.5 表示 50% 亮度
           }
    
           private void adjustBrightness(View view, float brightnessFactor) {
               // 调整 TextView 的文本颜色
               if (view instanceof TextView) {
                   TextView textView = (TextView) view;
                   int color = textView.getCurrentTextColor();
                   textView.setTextColor(adjustColorBrightness(color, brightnessFactor));
               }
    
               // 对于其他视图类型,可以在这里添加类似的处理逻辑
               // 例如:调整 ImageView 的图像亮度
    
               // 如果视图是 ViewGroup,递归调整子视图
               if (view instanceof ViewGroup) {
                   ViewGroup viewGroup = (ViewGroup) view;
                   for (int i = 0; i < viewGroup.getChildCount(); i++) {
                       adjustBrightness(viewGroup.getChildAt(i), brightnessFactor);
                   }
               }
           }
    
           private int adjustColorBrightness(int color, float brightnessFactor) {
               int alpha = Color.alpha(color);
               int red = (int) (Color.red(color) * brightnessFactor);
               int green = (int) (Color.green(color) * brightnessFactor);
               int blue = (int) (Color.blue(color) * brightnessFactor);
               return Color.argb(alpha, red, green, blue);
           }
       }

    方法四:使用自定义的主题属性

    你可以创建自定义的主题属性来定义较暗的颜色,并在应用的各个组件中使用这些属性。

    1. 定义自定义主题属性: 在 res/values/attrs.xml 文件中定义自定义属性。
       <resources>
           <attr name="nightModeBackgroundColor" format="color"/>
           <attr name="nightModeTextColor" format="color"/>
       </resources>
    1. 在主题中设置这些属性: 在 res/values/styles.xmlres/values-night/styles.xml 文件中分别设置这些属性。
       <!-- res/values/styles.xml -->
       <resources>
           <style name="AppTheme" parent="Theme.AppCompat.DayNight">
               <item name="nightModeBackgroundColor">@color/lightBackground</item>
               <item name="nightModeTextColor">@color/lightText</item>
           </style>
       </resources>
    
       <!-- res/values-night/styles.xml -->
       <resources>
           <style name="AppTheme" parent="Theme.AppCompat.DayNight">
               <item name="nightModeBackgroundColor">@color/darkBackground</item>
               <item name="nightModeTextColor">@color/darkText</item>
           </style>
       </resources>
    1. 在布局文件中使用这些属性: 在布局文件中使用这些自定义属性。
       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:background="?attr/nightModeBackgroundColor"
           android:textColor="?attr/nightModeTextColor"
           android:text="Hello, World!" />

    结论

    通过以上几种方法,你可以在不调整屏幕亮度的情况下,实现 Android 应用整体 UI 亮度的降低:

    1. 使用半透明的暗色覆盖层:简单直接,可以快速实现整体亮度降低。
    2. 调整应用的主题颜色:使用 DayNight 主题,实现更加规范的夜间模式。
    3. 动态调整各个 UI 组件的亮度:细粒度控制每个组件的亮度,适用于需要精细调整的场景。
    4. 使用自定义的主题属性:通过自定义属性,灵活定义和应用夜间模式

    为实现使用半透明的暗色覆盖层且不影响触摸点击操作,你可以使用 FrameLayout 来添加一个透明的覆盖层,并将它设置为不接收触摸事件。这样可以确保覆盖层不会干扰用户的点击操作。

    实现步骤

    1. 在 XML 布局文件中添加覆盖层: 在你的主布局文件中添加一个 View,并将其设置为半透明的黑色。将这个 View 放在布局的最上层,并设置 android:clickable 属性为 false
       <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
    
           <!-- 其他布局组件 -->
    
           <!-- 覆盖层 -->
           <View
               android:id="@+id/overlay"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#80000000" <!-- 50% 透明度的黑色 -->
               android:clickable="false"
               android:focusable="false" />
       </FrameLayout>
    1. 在代码中控制覆盖层的可见性: 在代码中动态控制覆盖层的可见性,以便在需要时启用或禁用夜间模式。
       import android.os.Bundle;
       import android.view.View;
       import androidx.appcompat.app.AppCompatActivity;
    
       public class MainActivity extends AppCompatActivity {
           private View overlay;
    
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
    
               overlay = findViewById(R.id.overlay);
    
               // 启用夜间模式
               enableNightMode(true);
           }
    
           private void enableNightMode(boolean enable) {
               if (enable) {
                   overlay.setVisibility(View.VISIBLE);
               } else {
                   overlay.setVisibility(View.GONE);
               }
           }
       }

    确保覆盖层不影响触摸事件

    为了确保覆盖层不影响触摸事件,你还可以使用 setOnTouchListener 方法,返回 false,表示覆盖层不处理触摸事件,将它们传递给下面的视图。

    import android.os.Bundle;
    import android.view.View;
    import android.view.MotionEvent;
    import androidx.appcompat.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
        private View overlay;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            overlay = findViewById(R.id.overlay);
    
            // 设置覆盖层的触摸监听器,确保不拦截触摸事件
            overlay.setOnTouchListener((v, event) -> false);
    
            // 启用夜间模式
            enableNightMode(true);
        }
    
        private void enableNightMode(boolean enable) {
            if (enable) {
                overlay.setVisibility(View.VISIBLE);
            } else {
                overlay.setVisibility(View.GONE);
            }
        }
    }

    结论

    通过上述方法,你可以使用半透明的暗色覆盖层来降低 Android 应用的整体亮度,同时确保覆盖层不会影响用户的触摸和点击操作。这种方法简单且高效,适用于需要快速实现夜间模式效果的场景。

  • 黑金的世纪:石油与人类文明的共舞

    在我们这个科技高速发展的时代,石油不仅是驱动经济发展的引擎,更是现代文明不可或缺的基石。从工业革命到信息时代,石油以其独特的能量密度和广泛的应用领域,深刻影响了全球的经济、政治和社会结构。今天,我们就通过《石油世紀 億萬歲月積累 黑金150年 (增訂版)》,一同探讨这段充满激情与斗争的历史。

    石油的崛起与文明的推进

    《石油世紀》由普立茲奖得主丹尼爾.尤金所著,这本书被誉为石油领域的“超级巨作”。自1991年首次在美国出版以来,便在学界和市场上双双获得巨大的成功。书中详细描述了石油工业从十九世纪中叶的崛起,到二十一世纪的全球影响力,展现了石油如何通过影响人类的生活方式、经济发展和国际关系,成为现代社会不可或缺的一部分。

    尤金在书中指出:“未来25年,人类对石油的需求将比现在增加40%。”这一预言不仅引发了广泛的讨论,也让我们不得不重新审视石油在未来全球能源格局中的地位。

    石油工业的关键节点

    石油工业的发展史可以说是一部工业革命的缩影。从1859年美国宾夕法尼亚州的第一口油井,到20世纪初期的汽车普及,再到二战期间的石油战略资源地位,石油的每一次重大突破,都推动了人类文明的进步。

    在书中,尤金详细介绍了几次重要的石油危机,如1973年的石油禁运和1979年的伊朗革命。这些事件不仅影响了当时的国际局势,还深刻改变了各国的能源政策和战略布局。

    石油对经济和国际关系的影响

    石油不仅是经济发展的重要动力,也是国际关系中的关键因素。尤金在书中通过大量的数据和案例,展示了石油如何成为国家之间博弈的重要筹码。例如,中东地区因其丰富的石油储量,长期以来一直是国际政治的焦点。而美国、俄罗斯等大国也在全球范围内通过石油进行战略布局。

    未来的能源挑战

    尽管石油在现代文明中占据着重要地位,但我们也必须面对一个现实:石油资源是有限的,而且其开采和使用带来的环境问题日益严重。尤金在书中呼吁全球社会要重视可再生能源的开发和利用,以应对未来可能出现的能源危机。

    他在书中指出:“要了解过去,才能把握现在,展望未来。”这一观点不仅适用于石油工业,也适用于整个能源领域的发展。

    总结

    《石油世紀 億萬歲月積累 黑金150年 (增訂版)》是一部内容详实、视角独特的巨作。通过对石油工业的详细描绘,丹尼爾.尤金不仅让我们看到了石油在过去150年中的重要地位,也让我们深刻理解了石油对未来全球能源格局的潜在影响。

    这本书不仅适合能源领域的专业人士阅读,也适合所有对历史、经济和国际关系感兴趣的读者。通过阅读这本书,我们不仅能更好地理解石油工业的过去和现在,更能为未来的能源挑战做好准备。

    无论你是学者、学生,还是普通读者,《石油世紀》都将带给你一次深刻的阅读体验,让你在黑金的世界中,探寻人类文明的每一个重要节点。

    ed2k://|file|676086A0D13F678F37C31586AB095791.pdf|241577761|5224DEF939B37252EE9855F524D8C9BA|h=Y4B2E53GVNICEG5XK3DNFZZ3GNJ3YT24|/

  • WordPress插件的安全性

    在WordPress插件开发的过程中,安全性是一个至关重要的方面。插件代码可能会在数百万个WordPress站点上运行,因此确保代码的安全性是开发者不可忽视的责任。在《WordPress插件开发教程手册》的插件安全部分中,我们可以学习到如何检查用户能力、验证输入和清理输出等安全措施。

    检查用户能力

    为了确保插件的安全性,首先需要检查用户的能力。如果插件允许用户提交数据(无论是管理员还是游客),一定要检查用户权限。WordPress以用户角色和能力的形式提供了这个能力系统。比如,管理员角色会拥有“manage_options”的能力,这让他们有权限查看、编辑、保存网站选项,而其他角色则没有这个权限。

    示例代码

    以下代码在前端创建了一个删除文章的链接,但没有检查用户能力,导致所有访问网站的用户都可以使用这个链接删除文章:

    function wporg_generate_delete_link($content)
    {
        if (is_single() && in_the_loop() && is_main_query()) {
            $url = add_query_arg(
                [
                    'action' => 'wporg_frontend_delete',
                    'post'   => get_the_ID(),
                ],
                home_url()
            );
            return $content . ' <a href=' . esc_url($url) . '>' . esc_html__('Delete Post', 'wporg') . '</a>';
        }
        return null;
    }
    
    function wporg_delete_post()
    {
        if (isset($_GET['action']) && $_GET['action'] === 'wporg_frontend_delete') {
            $post_id = (isset($_GET['post'])) ? ($_GET['post']) : (null);
            $post = get_post((int)$post_id);
            if (empty($post)) {
                return;
            }
            wp_trash_post($post_id);
            $redirect = admin_url('edit.php');
            wp_safe_redirect($redirect);
            die;
        }
    }
    
    add_filter('the_content', 'wporg_generate_delete_link');
    add_action('init', 'wporg_delete_post');

    为了确保只有拥有编辑能力的用户可以看到这个链接并删除文章,我们需要在显示链接时检查用户是否拥有“edit_others_posts”能力:

    if (current_user_can('edit_others_posts')) {
        add_filter('the_content', 'wporg_generate_delete_link');
        add_action('init', 'wporg_delete_post');
    }

    数据验证

    数据验证是确保输入数据符合预期的一项重要措施。它可以防止恶意数据的输入和潜在的安全漏洞。数据验证应尽早执行,可以在前端使用JavaScript进行初步验证,但绝不能代替后端的PHP验证。

    常见的验证方法

    1. 必填字段检查: 确保输入的必填字段不为空。
    2. 格式检查: 确保输入的数据符合预期的格式,比如电话号码、邮编、Email等。
    3. 范围检查: 确保输入数据在预期的范围内,比如数量字段要大于0。

    在WordPress中,我们可以使用多种方法来验证数据,包括PHP内置函数、WordPress核心函数以及自定义函数。以下是一些常用的PHP内置函数:

    • isset()empty():检查变量是否存在或为空。
    • mb_strlen()strlen():检查字符串长度。
    • preg_match():检查字符串是否匹配指定的正则表达式。

    通过这些方法,我们可以有效地确保数据的安全性,防止潜在的安全漏洞。

    结论

    确保WordPress插件的安全性不仅是对用户负责,也是对自己的代码负责。通过检查用户能力和验证输入数据,可以大大减少安全风险,提升插件的可靠性和安全性。希望每一位开发者都能在开发过程中重视安全性,为用户提供安全可靠的插件。

  • Git Worktree

    Git 是一个强大的版本控制系统,而 Git Worktree 是其中一个非常有用但也常常被忽略的功能。今天,我们就来深入探讨一下 Git Worktree 的使用,揭示它如何能让你的工作流程更加高效。

    什么是 Git Worktree?

    简单来说,Git Worktree 允许你在同一个存储库中创建多个工作树(工作目录)。这些工作树可以指向同一个仓库中的不同分支或不同的提交。这意味着你可以在同一个项目的多个版本之间轻松切换,而无需频繁地切换分支和清理工作区。

    为什么要使用 Git Worktree?

    1. 并行工作:如果你需要同时处理多个功能或修复多个 bug,Git Worktree 可以帮你轻松实现这一点。你可以为每个功能或修复创建一个独立的工作树,而不必担心分支之间的冲突。
    2. 减少切换成本:频繁切换分支会使你的工作区变得混乱,还可能导致意外的代码覆盖。使用 Worktree,可以避免这些问题,因为每个工作树都是独立的。
    3. 简化上下文切换:不同的工作树可以代表不同的项目上下文,这极大地简化了在不同任务之间切换的过程。

    如何使用 Git Worktree?

    1. 创建一个新的 Worktree

    首先,确保你的 Git 版本支持 Worktree(Git 2.5 及以上版本)。创建一个新的工作树非常简单:

    git worktree add ../path/to/new-worktree branch-name

    例如:

    git worktree add ../feature-x feature-branch

    这个命令将在 ../feature-x 目录中创建一个新的工作树,并且检出 feature-branch 分支。如果 feature-branch 不存在,Git 会自动创建它。

    2. 列出所有 Worktree

    你可以使用以下命令来列出当前所有的工作树:

    git worktree list

    这会显示所有工作树的路径和它们所对应的分支或提交。

    3. 删除一个 Worktree

    当你不再需要某个工作树时,可以使用以下命令将其删除:

    git worktree remove ../path/to/worktree

    例如:

    git worktree remove ../feature-x

    这会删除 feature-x 目录,但不会删除其对应的分支或提交。

    实际应用场景

    多功能开发

    假设你正在开发一个新功能,但突然需要修复一个紧急的 bug。你可以创建一个新的工作树来处理这个 bug 修复,而不必中断当前的功能开发。

    git worktree add ../bugfix bugfix-branch

    完成修复后,你可以将其合并到主分支,然后回到原来的功能开发工作树继续工作。

    代码评审

    在进行代码评审时,你可以为每个评审创建一个独立的工作树,这样可以清晰地分离不同的评审上下文。

    git worktree add ../review-pr-1234 pr-1234-branch

    评审完毕后,删除该工作树即可。

    总结

    Git Worktree 是一个非常强大的工具,可以显著提高你的工作效率,特别是在需要并行处理多个任务的情况下。通过简单的命令,你就可以轻松管理多个工作树,让你的开发过程更加流畅和高效。

    希望通过这篇文章,你能更好地理解和使用 Git Worktree。如果你还没有尝试过这个功能,现在就试试看吧,它可能会彻底改变你的工作方式!

  • GPT-4o背后的神仙团队

    在OpenAI最近的一场20多分钟的发布会中,GPT-4o正式亮相。然而,这一新发布的模型并未获得所有专家的一致认可。尽管GPT-4o原生支持多模态,但一些业内大佬对其进步似乎并不买账。

    GPT-4o:小升级还是重大突破?

    在OpenAI联合创始人、现已离开的传奇大神AK看来,GPT-4o仅仅是一个文本、音频和视觉组合的模型,可以在一个神经网络中处理所有三种模态,甚至可以在特殊情况下进行实时语音翻译。马老板也认为,这种对GPT-4o的描述更加准确,隐隐透露出一丝酸意。

    然而,当OpenAI CEO Sam Altman转发了开发GPT-4o背后的团队故事后,外界才真正了解到,要实现原生多模态能力,需要一个怎样的神仙团队。

    18人内核团队:开创人机交互新历史

    马斯克曾在采访中表示,OpenAI推出ChatGPT的最大意义在于,创造了一个人机交互的界面,让普通人能用文本与AI交流。而GPT-4o则希望在人机交互的媒介上进一步拓展,除了文本,还包括音频和视觉等。

    要实现这一目标,OpenAI的Omni Team共由18人组成,其中4名华人,几乎都是90后。团队领导Prafulla Dhariwal本科学历的背景也显得尤为特别,他在本科毕业后直接加入OpenAI,参与过强化学习、无监督学习以及Scaling Law等前沿研究,还参与了DALL-E 2、GPT-3、DALL-E 3等关键项目。

    核心成员:多领域天才齐聚

    1. James Betker:负责图像、音频、数据和后期训练等方面,被评价为任何任务都能搞定的多面手。曾在Garmin和谷歌工作过,适应能力和职业道德备受认可。
    2. Rowan Zellers:视频方面的负责人,让模型能够像人类一样观看视频。他博士毕业后直接加入OpenAI,参与了多个关键项目,包括GPT-4。
    3. Alexis Conneau:音频方向的负责人,第一个提出将电影《Her》中Samantha角色复刻到现实中的人。他在谷歌和Meta AI工作过,参与过影响10亿用户的项目,论文曾获EMNLP最佳论文奖。

    华人科学家的贡献

    OpenAI的重要项目中从不缺乏华人的身影,GPT-4o的研发也不例外:

    • Li Jing:北大物理系毕业,MIT博士,曾参与DALL-E和Sora项目。
    • Jiahui Yu:中科大本科,UIUC博士,现为OpenAI感知团队的负责人,曾是谷歌Gemini多模态的负责人。
    • Yu Zhang:上海交大本科,MIT博士,曾在谷歌DeepMind工作。
    • Huiwen Chang:清华大学本科,普林斯顿大学博士,加入OpenAI前在谷歌担任研究科学家。
    • Qiming Yuan:清华大学本科,德州大学奥斯丁分校硕士,负责语言的预训练数据处理,曾在Dropbox和微软工作。

    未来展望

    GPT-4o的推出,不仅展示了OpenAI团队的非凡实力,也揭示了未来人机交互的更多可能性。虽然目前的评价存在争议,但不可否认的是,GPT-4o在多模态处理上的突破,将为人类与AI的交流带来更多新方式和新体验。

    总的来说,这18人的神仙团队,正通过他们的聪明才智和不懈努力,开创人机交互的新历史,将AI的可能性推向新的高度。

    GPT-4o背后的神仙团队:项目负责人为本科学历,北大/清华/交大/中科大校友在列
    dig.chouti.com/link/42443601

  • 新iPad Pro暴力测试:史上最薄苹果产品容易弯折吗?

    近日,维纳斯在《挨踢1024》栏目发布了一则关于新iPad Pro的暴力测试。作为史上最薄的苹果产品,这款iPad Pro的耐用性备受关注。测试结果显示,新iPad Pro在一定程度上确实比较容易弯折。测试视频中,通过施加外力,iPad Pro出现了明显的弯曲现象,显示出其在结构上的脆弱性。

    在评论区,用户们纷纷表达了自己的看法。有些人认为,作为高端电子产品,iPad Pro的设计应该在美观与耐用之间找到平衡;而另一些人则表示,尽管它容易弯折,但作为日常使用的工具,只要不故意施加极端压力,完全可以满足需求。

    总体来看,这次测试为消费者提供了一个参考,让大家在购买时可以更全面地了解产品的特点和潜在问题。如果你也对新iPad Pro的耐用性有疑问,不妨观看这则暴力测试视频,进一步了解产品性能。

    更多详细内容请访问原文链接:新iPad Pro暴力测试


    了解更多:

    1. 抽屉新热榜
    2. 最佳第6人
  • ICMP隧道详解

    ICMP隧道是一种利用ICMP协议进行通信的隧道技术。它可以在不开放端口的情况下进行通信,因此具有一定的隐蔽性。下面将从技术原理、实现方式和检测防御等方面详细解释ICMP隧道的相关知识。

    技术原理

    ICMP隧道的实现原理是替换ICMP数据包中的Data部分。在ICMP协议中,Data部分用于传输数据。通过修改Data部分的内容,可以实现在ICMP数据包中传输自定义的数据。具体原理如下:

    1. ICMP协议结构:ICMP数据包的结构包括协议头部和Data部分。协议头部占据了0~31个字节,剩下的部分就是Data部分。
    2. Data部分的默认内容:不同操作系统的ping命令在发送ICMP数据包时,Data部分的内容是不同的。例如,Windows系统默认传输32字节的数据,内容是abcdefghijklmnopqrstuvwabcdefghi;Linux系统默认传输48字节的数据,内容是!”#$%&'()+,-./01234567。
    3. 替换Data部分:ICMP隧道的关键就是替换Data部分的内容。对于Windows系统,只需要替换Data部分并重新计算校验和即可。对于Linux系统,替换Data部分后还需要满足其他规律,以防止链路上的设备对错误包进行抛弃处理。

    实现方式

    实现ICMP隧道需要编写自己的ICMP发送和应答程序,以替代系统本身的ping程序。具体实现方式如下:

    1. ICMP隧道服务器端:服务器端是必须的,用于接收和处理ICMP隧道的请求和应答。可以通过关闭系统的ping应答程序,并启动自己的ICMP应答程序来实现。服务器端需要指定一个独立的公网IP和一个代理端的公网IP,其中代理端的公网IP可以通过在服务器端上使用tcpdump icmp命令获取。
    2. ICMP隧道代理端:代理端是ICMP隧道的客户端,用于与服务器端进行通信。代理端需要指定服务器端的公网IP和代理端自身的公网IP。在与服务器端建立连接后,代理端可以通过修改ICMP数据包的Data部分来传输自定义的数据。

    检测防御

    由于ICMP隧道具有一定的隐蔽性,因此对于网络安全而言,检测和防御ICMP隧道是非常重要的。常见的检测和防御方法包括:

    1. 流量分析:通过对网络流量进行分析,检测出异常的ICMP数据包,如数据包大小、频率等。
    2. IDS/IPS系统:使用入侵检测系统(IDS)或入侵防御系统(IPS)来监测和阻止ICMP隧道的传输。
    3. 防火墙配置:在防火墙中配置规则,限制ICMP数据包的传输,或者对ICMP数据包进行深度检测和过滤。
    4. 网络监控:通过实时监控网络流量和日志,及时发现和应对ICMP隧道的使用。

    综上所述,ICMP隧道是一种利用ICMP协议进行通信的隧道技术,具有一定的隐蔽性。在实际应用中,需要注意检测和防御ICMP隧道的使用,以保障网络安全。


    Learn more:

    1. 小白必看!ICMP隐蔽隧道从入门到精通 – 知乎
    2. 内网转发及隐蔽隧道 | 网络层隧道技术之ICMP隧道(pingTunnel/IcmpTunnel)-腾讯云开发者社区-腾讯云
    3. ICMP隧道通信原理与通信特征 – FreeBuf网络安全行业门户

    ICMP隧道技术是一种利用ICMP协议实现数据传输的隐蔽技术。它在网络通信中具备高度隐蔽性,能够绕过防火墙和入侵检测系统。让我们从技术原理、实现方式和检测防御三个方面详细探讨ICMP隧道技术。

    技术原理

    ICMP(Internet Control Message Protocol)是TCP/IP协议簇中的一个重要子协议,主要用于在IP主机和路由器之间传递控制消息,诸如网络是否连通、主机是否可达、路由是否可用等信息。ICMP隧道正是利用ICMP协议的这一特性,通过在ICMP报文中嵌入数据来实现隐蔽的数据传输。

    ICMP隧道的技术核心在于:

    1. ICMP报文结构:ICMP报文包含类型字段和代码字段,用于标识报文的类型。常见的ICMP类型包括ICMP_ECHO(请求)和ICMP_ECHOREPLY(应答)。
    2. 数据嵌入:ICMP报文可以携带数据,通常利用ICMP_ECHO和ICMP_ECHOREPLY报文的可选数据字段嵌入需要传输的数据。
    3. 隐蔽性:由于ICMP报文通常由系统内核处理,不占用特定端口,并且很多防火墙默认允许ICMP报文通过,因此ICMP隧道具有较高的隐蔽性。

    实现方式

    实现ICMP隧道通常需要编写客户端和服务器端程序,分别在受控主机和攻击者主机上运行。以下是常见的实现工具及其工作原理:

    1. icmpsh:这是一个简单且便携的ICMP隧道工具。受控端(客户端)使用C语言实现,运行在目标Windows机器上,而主控端(服务端)可以运行在任何平台上,支持C、Perl和Python等多种实现版本。
      • 建立隧道:受控端接收ICMP_ECHO数据包,解出其中隐藏的命令并执行,然后将执行结果封装在ICMP_ECHOREPLY数据包中发送给主控端。
      • 数据包分析:通过抓包可以看到传输的命令和响应数据。
    2. icmptunnel:通过创建虚拟网卡,将所有流量都路由到虚拟网卡,并封装在ICMP回显数据包中传输。
      • 建立隧道:客户端主机的所有用户流量都通过虚拟网卡tun0,icmptunnel在此接口上侦听IP数据包并封装在ICMP回显包中。
      • 数据包分析:抓包分析可以看到通过ICMP隧道传输的所有流量。
    3. ptunnel:支持大多数操作系统,包括Windows(需要WinPcap)。
      • 建立隧道:使用命令行工具建立ICMP隧道,类似于其他ICMP隧道工具,通过封装和解封装ICMP数据包实现数据传输。

    检测防御

    尽管ICMP隧道具有隐蔽性,但通过合理的检测和防御措施仍然可以有效防范其威胁。

    1. 流量分析:通过监控网络流量,分析ICMP报文的频率、大小和内容,识别异常的ICMP通信行为。
    2. IDS/IPS系统:部署入侵检测系统(IDS)和入侵防御系统(IPS),设置规则检测和阻止异常ICMP流量。
    3. 防火墙配置:在防火墙中配置策略,限制ICMP报文的传输,或对ICMP报文进行深度检测和内容过滤。
    4. 网络监控:实时监控网络流量和日志,及时发现和响应ICMP隧道的使用。

    总的来说,ICMP隧道技术是一种有效的隐蔽通信手段,但通过合理的检测和防御措施,可以有效降低其带来的安全风险。网络管理员需保持警惕,持续更新防御策略,以应对不断变化的安全威胁。


    Learn more:

    1. 小白必看!ICMP隐蔽隧道从入门到精通 – 知乎
    2. 内网转发及隐蔽隧道 | 网络层隧道技术之ICMP隧道(pingTunnel/IcmpTunnel)
      1. ICMP隧道通信原理与通信特征 – FreeBuf网络安全行业门户







    进一步阅读与参考

    对于那些对ICMP隧道技术有更深入兴趣的读者,可以参考以下资源:

    1. 《小白必看!ICMP隐蔽隧道从入门到精通》:这篇文章详细介绍了ICMP隧道的基本概念、实现方法和常见工具,适合新手入门学习。
    1. 《内网转发及隐蔽隧道 | 网络层隧道技术之ICMP隧道(pingTunnel/IcmpTunnel)-腾讯云开发者社区-腾讯云》:该文章深入探讨了ICMP隧道的网络层实现,适合有一定网络基础的读者进行学习。
    1. 《ICMP隧道通信原理与通信特征 – FreeBuf网络安全行业门户》:这篇文章从专业角度分析了ICMP隧道的通信原理与特征,并提供了防御和检测方案,适合网络安全从业者参考。

    通过阅读这些资源,读者可以更全面地了解ICMP隧道技术,并在实际工作中应用所学知识,提升网络安全水平。

    结语

    ICMP隧道技术虽然具有隐蔽性强、绕过防火墙等优点,但这也使它成为网络攻击者常用的手段之一。作为网络安全从业者,我们需要深刻理解其原理与实现方式,才能在实际工作中有效地检测和防御这种隐蔽通信技术。希望通过本文的介绍,读者能对ICMP隧道有一个全面的认识,并能在日常工作中更好地保障网络安全。

    如果您有任何疑问或需要进一步讨论,欢迎在评论区留言,我们将尽力解答您的问题。


    Learn more:

    1. 小白必看!ICMP隐蔽隧道从入门到精通 – 知乎
    2. 内网转发及隐蔽隧道 | 网络层隧道技术之ICMP隧道(pingTunnel/IcmpTunnel)-腾讯云开发者社区-腾讯云
    3. ICMP隧道通信原理与通信特征 – FreeBuf网络安全行业门户
  • 提升 BiglyBT 对 IPFS 友好的处理方式:更好地处理作为 Webseeds 使用的 IPFS URL

    在当今数字内容共享的时代,文件的分布和传输方式正在快速演变。BitTorrent 和 IPFS(InterPlanetary File System)是两个强大的工具,分别在文件共享和分布式存储领域占据重要地位。然而,这两个工具之间的互操作性尚有提升空间。最近,有用户在 GitHub 上提出了一项建议,旨在改进 BiglyBT 客户端对 IPFS URL 作为 Webseeds 的处理方式,从而使其更加 IPFS 友好。这一提议不仅有助于提升文件传输效率,还能进一步推动去中心化网络的发展。

    现状与问题

    当前,当 BiglyBT 遇到一个公共 IPFS 网关 URL 作为 Webseed 时,它会尝试连接到该网关。然而,通过公共网关下载托管在 IPFS 上的文件,特别是大文件,效率往往不高。用户 hollownights 提出,BiglyBT 应该在检测到公共 IPFS 网关 URL 作为 Webseed 时,自动将其重写为由本地主机提供的路径格式 URL,或者如果检测到使用“ipfs:”协议的原生 IPFS URL,则将其重写为子域网关 URL。

    具体而言,URL 的重写方式如下:

    • 公共网关 URL:https://gateway-host.tld/ipfs/{cid} → http://localhost:8080/ipfs/{cid}
    • 原生 IPFS URL:ipfs://{cidv1} → http://{cidv1}.ipfs.localhost:8080

    重写后,BiglyBT 将发起请求并等待 HTTP 206(或200)响应。如果收到响应,则继续连接;如果未收到响应,则放弃本地主机 URL,回退到公共网关 URL 或直接丢弃原生 URL。

    提议的改进

    hollownights 还提出,这种行为可以通过与 IPFS 软件进行通信(通过命令行或 API)进一步优化,但目前以保持简单为目标。此更改结合自动将下载的文件/文件夹导入本地 IPFS 节点的选项(#2823),将显著提高去中心化 Web 协议(IPFS)与去中心化“文件协议”(BitTorrent)之间的互操作性。

    此外,parg 对此提出了一些疑问:谁会使用这些 IPFS Webseeds?如果这些 Webseeds 被添加到公开发布的种子文件中,那么大多数用户不会运行本地 IPFS 节点。如果这些 Webseeds 仅限于 IPFS 社区,为什么还要使用种子文件?

    hollownights 解释道,这种方法不仅仅是为了增加种子,还可以帮助像互联网档案馆这样的网站更好地将 Web 协议和 BitTorrent 结合起来。他进一步指出,如果 BitTorrent 客户端能够与本地 IPFS 节点通信,将更容易在 IPFS 网络中填充文件和节点,解决(或至少减轻)Web 问题。

    实际应用

    虽然 parg 认为公众大规模安装和维护 IPFS 节点的可能性不大,但 hollownights 强调这项改进主要面向已经托管种子盒和 IPFS 节点的用户。这些用户通常会发布大量文件,并希望在不同网络之间分发这些文件,同时节省带宽。对于网站而言,这意味着可以使用 IPFS 分发网站上的文件,同时通过种子文件利用用户的带宽。如果用户托管 IPFS 节点,那么这种方式将更加高效;如果没有,一切将如常进行。

    通过这些改进,BiglyBT 将更好地支持 IPFS,从而推动去中心化网络的发展。这不仅有助于提高文件传输效率,还能让更多用户受益于去中心化技术的优势。

    https://github.com/BiglySoftware/BiglyBT/issues/2822
  • 巴尔的摩大桥事故:21名船员的“无期徒刑”

    七周前,巴尔的摩的弗朗西斯·斯科特·基大桥在一场意外中被撞断,这一消息至今仍在许多人的记忆中挥之不去。尽管事故已经发生了这么久,桥体的清理工作却进展缓慢,仅有部分残骸得到清理。直到5月13日,卡在船头的部分桥体才终于被爆破拆除。

    这起事故的起因可以追溯到“达利号”货船及其上的21名船员。时隔七周,这些船员仍然困在原地,不被允许离开。讽刺的是,这个地点距离最近的港口只有2海里(约3.7公里)。对于这些船员来说,这简直像是一场“无期徒刑”。

    事故的全貌

    事故的详细过程在之前的报道中已经提及,这里简要回顾一下:达利号原计划从巴尔的摩出发,经过27天的航程,将货物运至斯里兰卡。然而,这艘船在刚刚出发后不久便遭遇了事故。

    5月14日,美国运输安全委员会(NTSB)发布了一份24页的初步调查报告,揭示了事故的部分内幕。《纽约时报》梳理了其中的重点,指出达利号在出事前一天至少经历了两次电力故障,导致船员在出发前大约十个小时对电力系统进行了调整。虽然调整的具体影响尚不明确,但事故的直接原因是船舶的断路器跳闸,致使其丧失了推进和转向能力。

    达利号配备了四台柴油发动机驱动的发电机。NTSB的调查显示,事故当天使用的柴油并无质量问题,问题出在前一天船员在其中一台发动机上安装废气清洁系统时误关了排气风门,导致发动机熄火,发电机也随之关闭。后来船员用另一台发电机短暂恢复了供电,但燃料压力不足,导致这台发电机也跳闸。在恢复供电过程中,船员将断路器换成了备用的,这可能为后来的事故埋下了隐患。

    事故过程

    3月26日凌晨1点左右,达利号驶离巴尔的摩港,沿繁忙的航道前进。所有系统表面上都能正常工作,负责该船的高级驾驶员将控制权交给了一名学徒,自己则在一旁待命。然而,在接近大桥时,备用断路器突然跳闸引发停电,推进和转向系统随之失灵。高级驾驶员赶紧接过控制权,并下令船舵向左舷急转并抛锚。然而,另两个断路器也跳闸了,导致第二次停电。最终,达利号无可避免地与大桥相撞。

    事故的后果

    这起事故不仅导致六名建筑工人遇难,还对巴尔的摩港和弗朗西斯·斯科特·基大桥的商业运输造成了严重影响。据多家保险公司估计,此次事故造成的保险损失可能高达10至40亿美元,甚至被伦敦劳合社主席认为可能成为有史以来最大的一次海上保险损失。

    现在,律师们已经摩拳擦掌准备开始法律战斗。《华尔街日报》估计,整个诉讼可能会持续十年之久。

    谁来承担责任?

    调查人员收集了船上的数据,并与船员进行了交谈,所有船员的酒精测试结果均为阴性。然而,巴尔的摩市政府坚持认为事故由船员责任造成,已经起诉了达利号的拥有者和管理者,指责两家公司提供了“无能的船员”。

    此外,由于事故影响巨大,FBI也展开了刑事调查。由于签证限制、缺乏“上岸通行证”,再加上NTSB和FBI的联合调查,21名船员中有20名印度籍,1名斯里兰卡籍,他们都无法下船。FBI还没收了他们的所有通讯设备,使他们与外界几乎隔绝。

    船员的困境

    由于原定航程只需一个月,船员们的食物早已吃光。现在他们靠美国海岸警卫队提供的补给维持基本生活。船上的卫生条件也变得越来越糟糕,船员们无法获得足够的医疗用品和必要的维护工具。可以想象,这些船员每天都生活在焦虑和不确定中,既要应对长时间的拘留,又要面对可能的法律后果。

    船员的心声

    尽管他们的处境艰难,但这些船员依然保持了基本的职业操守。船员之一,阿尼尔·库马尔,在接受电话采访时表示:“我们每天都在等待,等待可以离开这艘船,等待可以回家。我们希望事情能尽快得到解决,这种等待的煎熬实在难以忍受。”

    未来的走向

    目前,达利号的船东和管理公司正积极配合调查,并为船员争取早日回国的权利。律师们也在为船员们争取法律上的公正待遇,试图证明事故是由于设备故障和操作失误所致,而非船员的个人责任。

    从法律角度来看,这起事故涉及多个方面的责任认定,包括设备制造商、船东、管理公司以及船员本身。无论最终结果如何,这起事故无疑将对未来的海上运输和安全标准产生深远影响。

    结语

    巴尔的摩大桥事故不仅是一次海上运输的惨剧,更是对人类耐力和职业道德的考验。21名船员在如此艰难的情况下仍然坚守岗位,等待最终的调查结果,这种精神值得我们尊敬和关注。

    然而,事故背后的深层次问题,如船舶设备的维护、船员的培训和管理、以及全球航运业的法律和监管机制,都需要进一步探讨和改进。希望这起事故能为未来的海上运输安全提供有益的教训,避免类似悲剧再次发生。


    希望通过详细描述巴尔的摩大桥事故的全过程,不仅让读者了解事件的来龙去脉,还能引发对海上运输安全和船员权益的关注。

  • 外包式儿童陪伴师:高薪背后的隐忧

    月入四万的“外包父母”,正掏空孩子的童年-虎嗅网 (huxiu.com)


    近些年,随着生活节奏的加快和工作压力的增大,越来越多的家长选择将育儿工作外包给所谓的“儿童成长陪伴师”。这种现象尤其在北上广深等大城市中愈发普遍。然而,这种外包育儿的模式真的能解决家长们的育儿难题吗?还是说它反而在无意间掏空了孩子们的童年?

    外包式儿童陪伴师:高薪背后的隐忧

    “儿童成长陪伴师”这个听起来颇为高大上的职业,其实就是代替家长陪伴孩子,监督他们的学习和生活。从帮助孩子完成作业到接送孩子参加各种培训班,这些陪伴师几乎包办了家长的所有职责。根据虎嗅网的报道,这些陪伴师的月薪可以高达四万元,市场需求也异常火爆。

    然而,问题也随之而来。首先,这个行业并没有被官方认定,自然缺乏相关的行业规范,服务质量参差不齐。陪伴师的资质也良莠不齐,有些只是换了个马甲的补课老师,实际提供的服务并不值那么高的费用。

    家长角色的缺位

    家长们选择外包陪伴,很大程度上是因为工作忙碌,无法抽出时间陪伴孩子。然而,真正的亲子关系需要的是家长的亲身参与和情感支持,而不是靠外人来完成。长期依赖外包,只会导致亲子关系的疏离。当孩子遇到青春期叛逆、厌学等问题时,家长和孩子之间缺乏沟通和了解,最终只能再次依赖外部的“专家”来解决问题。

    赵菊英式教育:短期见效的陷阱

    “网红”家庭教育专家赵菊英,以其极端的教育方式吸引了不少家长的关注。她通过砸烂孩子的玩具,来逼迫孩子形成所谓的“梦想”。这种“羞辱惩罚式”教育不仅无法真正解决问题,反而容易引发孩子的极端反抗和对家长的仇恨。

    赵菊英的“成功”并非个例,而是反映了家长们在教育上的焦虑和急功近利的心态。他们希望通过短期的努力和金钱的投入,迅速把孩子培养成“学霸”,但这种方法忽视了孩子作为独立个体的需求和感受。

    真正的亲子关系:不可外包的责任

    家庭教育的核心在于情感交流和价值观的传递,这是任何外聘的专家和陪伴师都无法替代的。家长们与其花钱买陪伴,不如多花时间学习如何真正成为一个好父母。我们不是孩子一出生就自动会当爹妈了,需要不断学习和成长。

    孩子的情感需求是随着年龄增长而不断上升的,家长们需要在孩子成长的过程中,给予足够的关注和支持。如果家长只是通过花钱来解决问题,最终只会导致亲子关系的疏离,甚至可能对孩子的心理健康造成长期的负面影响。

    结语

    短期内,外包育儿看似能够解决家长们的时间和精力问题,但却忽视了亲子关系中的核心:爱与陪伴。真正的亲子关系需要家长的亲身参与和无条件的接纳与理解。希望每一位家长都能意识到,育儿不是一场可以外包的任务,而是一段需要用心经营的旅程。

    让我们一同反思,在忙碌的生活中,如何找到平衡点,给予孩子真正需要的陪伴和支持。

    祝愿每一位家长和孩子都能在爱与理解中共同成长。

    (原文来自微信公众号:格致君,作者:格致君的后花园,更多精彩内容请点击虎嗅网。)