人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本篇文章围绕 privacy_sandbox/reach_whitepaper/README.md 展开系统讲解该目录配套代码的安装方式、四个误差估计脚本的运行方法与命令行参数并结合仓库源码深入解析合成数据集生成、贡献上限capping、时间窗口、直接方法与草图sketching方法的底层实现原理。读完本文后你将能够独立复现白皮书中的误差估计实验理解 Privacy Sandbox Private Aggregation API 场景下到达率去重受众规模查询误差的主要来源与量化方式并能基于 CSV 输出进一步分析不同配置下的误差行为。项目背景与定位该目录是白皮书《Reach Implementation Best Practices in the Privacy Sandbox Private Aggregation API》的配套开源实现仓库在 privacy_sandbox/reach_whitepaper 目录下提供了完整的可运行 Python 代码用于量化不同算法在计算 reach即去重后的受众规模时产生的误差。在 Privacy Sandbox 的 Private Aggregation API 场景中查询结果受多种因素扰动贡献上限cap每个用户最多被允许向若干个切片slice贡献数据超出部分的贡献会被丢弃造成观测值小于真实值时间窗口window size查询覆盖的时间跨度天越长用户流失、重复贡献等效应越明显切片粒度slicing granularity按广告主、广告系列、地理位置等不同维度切分后每个切片的规模分布差异巨大隐私噪声differential privacy noise为保证差分隐私聚合结果需叠加 Laplace 噪声噪声尺度与预算 ε 和 cap 直接相关。仓库的四个计算脚本分别针对上述不同误差来源或算法生成误差估计样本并将结果以 CSV 形式输出。README 明确指出这不是 Google 官方支持的正式产品This is not an officially supported Google product因此代码定位是研究复现与最佳实践参考而非生产级实现。环境准备与安装代码依赖若干科学计算与开发工具库仓库在 requirements.txt 中列出了完整依赖清单基于 Python 3.11 及以上版本含 numpy 1.26.4、pandas 2.2.2、matplotlib、seaborn、absl 等。按 README 说明安装依赖只需一条命令pip install -r requirements.txt同时仓库还提供了 run.sh 作为一键式端到端运行脚本它先创建并激活 Python 虚拟环境、安装依赖再以最小参数规模依次运行四个脚本见下文端到端运行一节。需要注意所有脚本以 Python 模块方式运行python -m reach_whitepaper.xxx因此需要保证privacy_sandbox/reach_whitepaper的父目录在PYTHONPATH中且仓库根目录包含 __init__.py 等包初始化文件才能正确解析privacy_sandbox.reach_whitepaper这一模块路径。脚本总览脚本用途默认参数compute_cumulative_error.py累计查询cumulative query误差caps1..4window_sizes1..30repetitions100compute_direct_error.py固定窗口直接方法direct method误差caps1..4repetitions100compute_sketches_error.py固定窗口草图方法sketching误差caps1..4window_sizes1..361步长 10repetitions100compute_observation_error.py观测值与真实值之间capping 导致的误差caps1..4repetitions100四个脚本都基于 absl.flags 实现命令行参数解析并都要求必填--output参数指定 CSV 输出文件。此外所有脚本共用 constants.py 中定义的两个关键常数EPSILON 64差分隐私总预算 εMIN_SIZE 4RMSRE相对均方根误差误差计算中分母的最小值。脚本一观测误差capping 误差估计README 中的第 4 条运行命令python -m reach_whitepaper.compute_observation_error对应实现文件 compute_observation_error.py。该脚本的定位是计算 capping 导致的误差module docstring 为Computes the errors due to capping.即量化观测值observed_size受贡献上限影响与真实值true_size无上限之间的差异。支持的 flags参数默认值说明--caps1,2,3,4用户被允许贡献的切片数上限--repetitions100采样重复次数--output必填输出 CSV 文件路径该脚本对sample.WindowSize天/周/月、cap、切片粒度做笛卡尔积遍历通过sample.sample_slices采样获得每个切片的observed_size与true_size最终输出的 CSV 列包括window_size、cap、slicing_granularity、observed_size、true_size。由于它不含加噪步骤其输出的observed_size与true_size之差纯粹反映了贡献上限对真实规模的折损是理解其他三个脚本误差基线的重要参照。脚本二固定窗口直接方法误差README 中的第 2 条运行命令python -m reach_whitepaper.compute_direct_error对应 compute_direct_error.py用于直接方法direct method计算固定窗口天/周/月reach 时的误差估计。支持的 flags参数默认值说明--caps1,2,3,4贡献上限--repetitions100采样重复次数--output必填输出 CSV 文件路径核心估计函数位于 compute_direct_error.pydef sample_estimated_cardinality(epsilon, count, cap): return random.laplace(count, 1.0 * cap / epsilon)即在真实基数count上叠加尺度为cap / ε的 Laplace 噪声。这里的核心思想是在差分隐私机制中查询结果的敏感度为 cap单个用户最多影响 cap 个切片的计数因此噪声尺度与 cap 成正比、与预算 ε 成反比。值得注意的是直接方法需要对每个窗口 × 切片粒度组合分别分配隐私预算。从 compute_direct_error.py 可以看出每个切片实际使用的预算为epsilon / (len(sample.WindowSize) * len(sample.SlicingGranularity))即把总预算 ε64 平均分配到 3 种窗口大小 × 4 种切片粒度 12 个组合上。这也解释了为什么直接方法在切片数增多时误差会显著放大——预算被切分后每个切片上的噪声尺度相应变大。CSV 输出列包括window_size、cap、slicing_granularity、observed_size、true_size、estimate。需要留意的是从源码结构看该脚本在组装errors列表时向每行追加了 6 个字段含slicing_granularity而声明的列名仅 5 个若直接运行可能遇到字段与列不匹配的情况如果你需要复现固定窗口直接方法的实验可自行对齐列定义后再运行。脚本三累计查询误差直接方法 vs 逐点贡献机制README 中的第 1 条运行命令python -m reach_whitepaper.compute_cumulative_error对应 compute_cumulative_error.py它对比了累计cumulative查询场景下两种加噪策略的误差直接方法direct method对整个窗口的观测基数一次性加噪如 compute_cumulative_error.py 所示random.laplace(count, 1.0 * cap / epsilon)预算同样按窗口大小与切片粒度均分EPSILON / (window_size * len(SlicingGranularity))逐点贡献机制point contribution mechanism对窗口内每一天的贡献分别加噪再求和如 compute_cumulative_error.py 所示def sample_estimated_with_point_contribution(epsilon, window_size, count, cap): return count random.laplace(0, 1.0 * cap / epsilon, sizewindow_size).sum()即对window_size天的每一天分别采样Laplace(0, cap/ε)再累加。由于独立 Laplace 变量求和后方差线性叠加窗口越长逐点贡献机制的累计噪声方差越大但其优势在于预算按天分配EPSILON / len(SlicingGranularity)不必随窗口长度切分。支持的 flags参数默认值说明--caps1..4贡献上限--window_sizes1..30累计窗口天数--repetitions100采样重复次数--output必填输出 CSV 文件路径该脚本同时使用multiprocessing.Pool并行计算两类估计输出 CSV 列包括algorithm取值direct method或point contribution mechanism、cap、window_size、slicing_granularity、observed_size、true_size、estimate方便直接按algorithm分组比较两种机制在不同窗口长度下的误差曲线。脚本四草图方法Sketching误差README 中的第 3 条运行命令python -m reach_whitepaper.compute_sketches_error对应 compute_sketches_error.py用于估计草图sketch类算法的误差——这类算法先通过哈希把用户映射到一组寄存器register再通过对寄存器做与或合并union来估计去重基数。支持的 flags参数默认值说明--caps1..4贡献上限--window_sizes1..361步长 10窗口天数--repetitions100采样重复次数--output必填输出 CSV 文件路径脚本中定义了两个关键配置与组件SKETCH_SIZE 10_000见 compute_sketches_error.py草图寄存器数量LaplaceNoiser类见 compute_sketches_error.py对每个寄存器桶独立叠加尺度为cap/ε的 Laplace 噪声噪声张量形状为(repetitions, window_size, n_registers)与逐日注册表的维度一一对应。误差估计的核心逻辑在 sketches.py 中实现逐日用户注册sample_n_non_empty_registerssketches.py用多项分布把每天的真实基数按寄存器概率分布随机投放到 10000 个寄存器上得到三维布尔数组registers[i, j, k]第 i 次重复、第 j 天、第 k 个寄存器是否非空加噪与去噪在计数上叠加 Laplace 噪声后以阈值 0.5 做去噪registers 0.5模拟聚合方在不知道真实贡献时的二值化判断合并把窗口内所有天的寄存器按位或合并按 axis1 求和后判断 1得到每次重复的合并草图基数估计estimated_cardinalitysketches.py利用期望非空寄存器数公式sum_{i1}^n 1 - (1 - p_i)^n其中 p_i 为第 i 个寄存器被选中的概率再通过单调函数求逆指数探测 二分法见_invert_monotonicsketches.py从观测到的非空寄存器数反推出基数估计批量预计算缓存sample_estimated_cardinalitysketches.py以_BATCH_SIZE 10批量预生成估计值并缓存缓存键为(count, window_size, id(noiser), id(register_probabilities))减少重复调用时的计算开销。输出 CSV 列包括sketch_size、window_size、cap、observed_size、true_size、estimate其中sketch_size当前固定为 10000。合成数据与关键常数源码级解读所有脚本的误差估计都建立在sample.sample_slices生成的合成切片规模样本之上理解其两阶段生成逻辑是解读实验结果的前提。切片规模服从离散幂律分布synthetic_dataset.py 实现了离散幂律power-law分布采样sample_discrete_power_lawsynthetic_dataset.py其理论基础是 Clauset 等人论文Power-law distributions in empirical dataSIAM Review 2009中的近似采样公式并扩展支持了上限x_max通过截断均匀随机数 r 的采样区间实现。幂律分布能很好地模拟广告投放场景中少数大切片 大量小切片的真实规模分布。切片粒度决定幂律形状参数sample.py 定义了四种切片粒度枚举其取值同时充当幂律分布的形状参数 b粒度值形状参数 b切分维度LEVEL_11.01仅按广告主LEVEL_21.1广告主 广告系列LEVEL_31.5广告主 广告系列 地理位置LEVEL_41.6广告主 广告系列 地理位置 订单项 素材从源码结构可以推断粒度越细LEVEL 越高切片数量越多、单个切片平均规模越小、分布尾部越重相应地小切片上的相对误差也越容易被放大。阶段一贡献上限capping折损sample.py 中的_cap_discount_rate通过从幂律分布形状参数 b1.18、缩放系数 scale2.14采样 10000 个用户贡献次数统计贡献次数达到 cap 的用户占比得到被上限移除的用户概率。随后sample_slicessample.py用np.random.binomial(n, p_reported)对每个切片的真实规模做二项采样得到 capping 后的观测规模。阶段二时间窗口折损_window_discount_ratesample.py使用scale * n_days^discount_shape默认 discount_shape-0.06刻画窗口越长、单位天数内去重规模增长越慢的规律。最终sample_slices将单日规模乘以窗口天数再乘以折扣率分别得到无上限true_size与有上限observed_size两种规模。值得留意的是sample_test.py 对sample_slices做了参数化测试验证样本数量正确、cap0 时抛出ValueError、cap 超过 1000 时抛出ValueError——这也印证了_cap_discount_rate对 cap 取值区间 [1, 1000] 的限制。端到端运行仓库提供的 run.sh 完整展示了从零开始的运行流程virtualenv -p python3 . source ./bin/activate pip install -r requirements.txt python compute_observation_error.py --caps 1 --repetitions 1 --output observation_error.csv python compute_direct_error.py --caps 1 --repetitions 1 --output direct_error.csv python compute_cumulative_error.py --caps 1 --window_sizes 1 --repetitions 1 --output cumulative_error.csv python compute_sketches_error.py --caps 1 --window_sizes 1 --repetitions 1 --output sketches_error.csv该脚本以最小参数caps1、repetitions1、window_sizes1做冒烟验证产出四个 CSV 文件。注意 run.sh 以compute_xxx.py文件方式直接执行而非python -m模块方式因此它需要在reach_whitepaper目录内运行而 README 推荐的python -m reach_whitepaper.xxx方式则需要在仓库根目录运行。要复现论文级别的完整实验可参考各脚本的默认参数组合# 累计查询窗口 1~30 天两种机制对比 python -m reach_whitepaper.compute_cumulative_error --output cumulative_error.csv # 固定窗口直接方法天/周/月 python -m reach_whitepaper.compute_direct_error --output direct_error.csv # 草图方法窗口 1~361 天步长 10 python -m reach_whitepaper.compute_sketches_error --output sketches_error.csv # 观测误差capping 折损 python -m reach_whitepaper.compute_observation_error --output observation_error.csv运行完成后可以结合 pandas 或 seaborn 对 CSV 做进一步分析例如按algorithm分组绘制累计查询误差随窗口长度的变化曲线、对比直接方法与草图方法在相同窗口下的误差分布、或计算(estimate - true_size) / true_size得到相对误差指标注意constants.MIN_SIZE 4提示在计算 RMSRE 时应为极小切片设定分母下限避免小规模切片主导误差指标。小结privacy_sandbox/reach_whitepaper 目录提供了一套小而完整的误差估计实验框架通过 synthetic_dataset.py 生成幂律分布的合成切片经 capping 与时间窗口两阶段折损得到观测基数再分别套用直接方法、逐点贡献机制与草图方法叠加差分隐私噪声最终以 CSV 输出可供对比分析的误差样本。无论你是希望复现白皮书中的实验结论还是想评估不同 cap、窗口长度、切片粒度组合下的 reach 查询误差都可以直接基于这四个脚本快速搭建自己的基准实验。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐coturn技术白皮书架构设计与实现原理coturn技术白皮书架构设计与实现原理 引言 在实时通信领域NAT网络地址转换穿越一直是开发者面临的主要挑战之一。coturn作为一款开源的TURN网络通信后端Reach UI 状态管理解析深入理解 Machine 组件的实现原理Reach UI 状态管理解析深入理解 Machine 组件的实现原理 Reach UI 状态管理是构建可访问 React 应用和设计系统的核心基础其中 M前端UI组件DDraceNetwork开发指南从源码到贡献的完整路径DDraceNetwork开发指南从源码到贡献的完整路径 DDraceNetwork是一款免费的合作平台游戏作为Teeworlds的模组开发而来。这个开源项游戏开发网络即时通讯创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
