diff --git a/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po b/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po index 515fd993b748..47a12f4437a4 100644 --- a/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po +++ b/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Flower main\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-23 18:31+0100\n" -"PO-Revision-Date: 2024-02-08 18:01+0000\n" +"PO-Revision-Date: 2024-02-09 14:19+0000\n" "Last-Translator: Yan Gao \n" "Language-Team: Chinese (Simplified) \n" @@ -3011,15 +3011,15 @@ msgid "" "using different subsets of CIFAR-10 on each client? How about adding more " "clients?" msgstr "" -"本示例的完整源代码:`PyTorch: 从集中到联合(代码) `_。当然,我" -"们的示例有些过于简单,因为两个客户端都加载了完全相同的数据集,这并不现实。现" -"在,您已经准备好进一步探讨这一主题了。在每个客户端使用不同的 CIFAR-10 子集如" -"何?增加更多客户端如何?" +"们的示例有些过于简单,因为两个客户端都加载了完全相同的数据集,这并不真实。现" +"在,您已经准备好进一步探讨这一主题了。比如在每个客户端使用不同的 CIFAR-10 " +"子集会如何?增加更多客户端会如何?" #: ../../source/example-walkthrough-pytorch-mnist.rst:2 msgid "Example: Walk-Through PyTorch & MNIST" -msgstr "实例: PyTorch 和 MNIST 演练" +msgstr "实例: PyTorch 和 MNIST 的演练" #: ../../source/example-walkthrough-pytorch-mnist.rst:4 msgid "" @@ -3047,26 +3047,24 @@ msgid "" "*server* sends this improved version of the model back to each *client*. A " "complete cycle of weight updates is called a *round*." msgstr "" -"*客户*负责根据其本地数据集为模型生成单独的权重更新。然后,这些更新会被发送到*" -"服务器,由*服务器汇总后生成一个更好的模型。最后,*服务器*将改进后的模型发送回" -"每个*客户端*。一个完整的权重更新周期称为一个*轮*。" +"*客户端*负责在其本地数据集上更新模型参数。然后,这些参数会被发送到*服务器*," +"由*服务器*聚合后生成一个更好的模型。最后,*服务器*将改进后的模型发送回每个*客" +"户端*。一个完整的模型参数更新周期称为一*轮*。" #: ../../source/example-walkthrough-pytorch-mnist.rst:12 #: ../../source/tutorial-quickstart-pytorch.rst:23 msgid "" "Now that we have a rough idea of what is going on, let's get started. We " "first need to install Flower. You can do this by running :" -msgstr "" -"现在,我们已经有了一个大致的概念,让我们开始吧。首先,我们需要安装 Flower。可" -"以通过运行 :" +msgstr "现在,我们已经有了一个大致的概念了,那就让我们开始吧。首先,我们需要安装 " +"Flower。可以通过运行 :" #: ../../source/example-walkthrough-pytorch-mnist.rst:18 msgid "" "Since we want to use PyTorch to solve a computer vision task, let's go ahead " "an install PyTorch and the **torchvision** library:" -msgstr "" -"既然我们想用 PyTorch 解决计算机视觉任务,那就先安装 PyTorch 和 " -"**torchvision** 库吧:" +msgstr "我们想用 PyTorch 来做计算机视觉任务,需要先安装 PyTorch 和 **torchvision** " +"库:" #: ../../source/example-walkthrough-pytorch-mnist.rst:26 msgid "Ready... Set... Train!" @@ -3083,11 +3081,11 @@ msgid "" "sh*, and *run-clients.sh*. Don't be afraid to look inside, they are simple " "enough =)." msgstr "" -"现在我们已经安装了所有的依赖项,让我们用两个客户端和一个服务器来运行一个简单" -"的分布式训练。我们的训练过程和网络架构基于 PyTorch 的 \"Basic MNIST Example " -"`_\"。这将让你看到用 " -"Flower 封装你的代码并以联合方式开始训练是多么容易。我们为您提供了两个辅助脚" -"本,即 *run-server.sh* 和 *run-clients.sh*。别害怕,它们很简单 =)。" +"现在我们已经安装了所有的依赖包,让我们用两个客户端和一个服务器来运行一个简单" +"的分布式训练。我们的训练过程和网络架构基于 PyTorch 的 `Basic MNIST Example " +"`_。您会发现用 Flower " +"来封装您的代码并进行联邦学习训练是多么容易。我们为您提供了两个辅助脚本,即 " +"*run-server.sh* 和 *run-clients.sh*。别害怕,它们很简单 =)。" #: ../../source/example-walkthrough-pytorch-mnist.rst:31 msgid "" @@ -3103,8 +3101,7 @@ msgstr "现在服务器已经启动并运行,请继续启动客户端。" msgid "" "Et voilà! You should be seeing the training procedure and, after a few " "iterations, the test accuracy for each client." -msgstr "" -"然后就可以了!你应该能看到训练过程,以及经过几次反复后,每个客户的测试准确" +msgstr "然后就可以了!您应该能看到训练过程,以及经过几次反复后,每个客户端的测试准确" "率。" #: ../../source/example-walkthrough-pytorch-mnist.rst:66 @@ -3137,10 +3134,11 @@ msgid "" "the :ref:`start_server ` function and leave " "all the configuration possibilities at their default values, as seen below." msgstr "" -"我们可以再深入一点,看到 :code:`server.py` 只是启动了一个服务器,该服务器将协" -"调三轮训练。Flower 服务器是非常可定制的,但对于简单的工作负载,我们可以使用 :" -"ref:`start_server `函数启动服务器,并将所有" -"可能的配置保留为默认值,如下所示。" +"我们可以再深入一点,:code:`server.py` " +"只是启动了一个服务器,该服务器将协调三轮训练。Flower " +"服务器是非常容易修改的,但对于简单的工作,我们可以使用 :ref:`start_server " +"`函数启动服务器,并将所有可能的配置保留为默认值,如下所示。" #: ../../source/example-walkthrough-pytorch-mnist.rst:89 #: ../../source/tutorial-quickstart-ios.rst:34 @@ -3156,9 +3154,8 @@ msgstr "Flower 客户端" msgid "" "Next, let's take a look at the *run-clients.sh* file. You will see that it " "contains the main loop that starts a set of *clients*." -msgstr "" -"接下来,让我们看看 *run-clients.sh* 文件。你会看到它包含了启动一组 *clients* " -"的主循环。" +msgstr "接下来,让我们看看 *run-clients.sh* 文件。您会看到它包含了用来启动多个 " +"*客户端* 的代码。" #: ../../source/example-walkthrough-pytorch-mnist.rst:100 msgid "" @@ -3177,9 +3174,9 @@ msgid "" "original MNIST dataset to make sure that every client is working on unique " "subsets of both *training* and *test* sets." msgstr "" -"**nb_clients**: 这定义了正在创建的客户端数量。客户端并不需要这一信息,但它有" -"助于我们对原始 MNIST 数据集进行分区,以确保每个客户端都在 *training* 和 " -"*test* 集的独特子集上工作。" +"**nb_clients**: 这定义了正在创建的客户端数量。客户端并不需要这一信息," +"但它有助于我们对原始 MNIST 数据集进行划分,以确保每个客户端都在 *training* " +"和 *test* 数据集上有独立的数据。" #: ../../source/example-walkthrough-pytorch-mnist.rst:104 msgid "" @@ -3193,12 +3190,12 @@ msgid "" "of epochs in each round, and which device we want to use for training (CPU " "or GPU)." msgstr "" -"我们可以再次深入 :code:`flwr_example/quickstart-pytorch/client.py`。查看 :" -"code:`main` 函数开头的参数解析代码后,你会发现一个对 :code:`mnist.load_data` " -"的调用。该函数负责分割原始 MNIST 数据集(*training* 和 *test*),并为每个数据" -"集返回一个 :code:`torch.utils.data.DataLoader` s。然后,我们实例化一个 :code:" -"`PytorchMNISTClient` 对象,其中包含我们的客户端 ID、我们的 DataLoader、每一轮" -"中的历时数,以及我们希望用于训练的设备(CPU 或 GPU)。" +"我们可以深入看一下 :code:`flwr_example/quickstart-pytorch/client.py`。查看 " +":code:`main` 函数开头的参数解析代码后,你会发现一个对 :code:`mnist.load_data`" +" 的调用。该函数负责分割原始 MNIST 数据集(*training* 和 *test*)," +"并为每个数据集返回一个 :code:`torch.utils.data.DataLoader` 。然后," +"我们实例化一个 :code:`PytorchMNISTClient` 对象,其中包含我们的客户端 ID、 " +"DataLoader、每一轮中的遍历数,以及我们希望用于训练的设备(CPU 或 GPU)。" #: ../../source/example-walkthrough-pytorch-mnist.rst:119 msgid "" @@ -3206,12 +3203,12 @@ msgid "" "client.start_client` along with the server's address as the training process " "begins." msgstr "" -"当训练过程开始时,:code:`PytorchMNISTClient` 对象会连同服务器地址一起最终传递" -"给 :code:`fl.client.start_client`。" +"当训练过程开始时,:code:`PytorchMNISTClient` 对象会连同服务器地址一起传递给 " +":code:`fl.client.start_client`。" #: ../../source/example-walkthrough-pytorch-mnist.rst:123 msgid "A Closer Look" -msgstr "近距离观察" +msgstr "仔细看一下" #: ../../source/example-walkthrough-pytorch-mnist.rst:125 msgid "" @@ -3234,9 +3231,9 @@ msgid "" "it is reproduced below. It is the same network found in `Basic MNIST Example " "`_." msgstr "" -"CNN 的代码可在 :code:`quickstart-pytorch.mnist` 下找到,现复制如下。它与 " -"\"Basic MNIST Example `_\"中的网络相同。" +"CNN 的代码可在 :code:`quickstart-pytorch.mnist` 下找到,现复制如下。它与 `" +"Basic MNIST Example `_中的网络相同。" #: ../../source/example-walkthrough-pytorch-mnist.rst:290 msgid "" @@ -3289,8 +3286,8 @@ msgid "" "things you could try on your own and get more experience with Flower:" msgstr "" "通过上面的快速入门代码描述,你将对 Flower 中*客户端*和*服务器*的工作方式、如" -"何运行一个简单的实验以及客户端封装器的内部结构有一个很好的了解。下面是一些你" -"可以自己尝试的东西,以获得更多使用 Flower 的经验:" +"何运行一个简单的实验以及客户端封装器的内部结构有一个很好的了解。您可以自己尝" +"试以下内容,以获得更多使用 Flower 的经验:" #: ../../source/example-walkthrough-pytorch-mnist.rst:448 msgid "" @@ -3307,21 +3304,19 @@ msgstr "修改 :code:`train` 函数,使其接受不同的优化器" msgid "" "Modify the :code:`test` function so that it proves not only the top-1 " "(regular accuracy) but also the top-5 accuracy?" -msgstr "" -"修改 :code:`test` 函数,使其不仅能证明前 1 名(常规精确度),还能证明前 5 名" -"的精确度?" +msgstr "修改 :code:`test` 函数,使其不仅能输出前 1 名(常规精确度),还能证明前 5 " +"名的精确度?" #: ../../source/example-walkthrough-pytorch-mnist.rst:451 msgid "" "Go larger! Try to adapt the code to larger images and datasets. Why not try " "training on ImageNet with a ResNet-50?" -msgstr "" -"变大!尝试让代码适应更大的图像和数据集。为什么不尝试使用 ResNet-50 在 " +msgstr "让我们尝试让代码适应更大的图像和数据集。为什么不尝试使用 ResNet-50 在 " "ImageNet 上进行训练呢?" #: ../../source/example-walkthrough-pytorch-mnist.rst:453 msgid "You are ready now. Enjoy learning in a federated way!" -msgstr "您现在已经准备就绪。享受联合学习的乐趣!" +msgstr "您现在已经准备就绪。尽情享受联邦学习的乐趣吧!" #: ../../source/explanation-differential-privacy.rst:2 msgid "Differential privacy" @@ -3334,8 +3329,8 @@ msgid "" "pipelines defined in any of the various ML frameworks that Flower is " "compatible with." msgstr "" -"Flower 提供了差分隐私 (DP) 封装类,可将 DP-FedAvg 提供的核心 DP 保证轻松集成" -"到 Flower 兼容的各种 ML 框架中定义的训练管道中。" +"Flower 提供了差分隐私 (DP) 封装类,可将 DP-FedAvg 提供的核心 DP 轻松集成到 " +"Flower 兼容的各种 ML 框架中定义的训练模式中。" #: ../../source/explanation-differential-privacy.rst:7 msgid "" @@ -3363,25 +3358,22 @@ msgid "" "DP-FedAvg, originally proposed by McMahan et al. [mcmahan]_ and extended by " "Andrew et al. [andrew]_, is essentially FedAvg with the following " "modifications." -msgstr "" -"DP-FedAvg 最初由麦克马汉等人[mcmahan]_提出,并由安德鲁等人[andrew]_加以扩展。" +msgstr "DP-FedAvg 最初由McMahan等人提出,并由Andrew等人加以扩展。" #: ../../source/explanation-differential-privacy.rst:17 msgid "" "**Clipping** : The influence of each client's update is bounded by clipping " "it. This is achieved by enforcing a cap on the L2 norm of the update, " "scaling it down if needed." -msgstr "" -"**裁剪** : 每个客户端更新的影响力都会受到限制。具体做法是对更新的 L2 准则设" -"置上限,必要时将其缩减。" +msgstr "**裁剪** : 裁剪会影响到每个客户端的模型参数。具体做法是对参数的 L2 " +"准则设置上限,必要时将其缩减。" #: ../../source/explanation-differential-privacy.rst:18 msgid "" "**Noising** : Gaussian noise, calibrated to the clipping threshold, is " "added to the average computed at the server." -msgstr "" -"**噪声** : 在服务器计算出的平均值中加入高斯噪声,该噪声根据剪切阈值进行校" -"准。" +msgstr "**噪声** : " +"在服务器计算出的平均值中加入高斯噪声,该噪声根据剪切阈值进行校准。" #: ../../source/explanation-differential-privacy.rst:20 msgid "" @@ -3390,9 +3382,9 @@ msgid "" "[andrew]_ that continuously adjusts the clipping threshold to track a " "prespecified quantile of the update norm distribution." msgstr "" -"事实证明,更新准则的分布会随着任务的不同而变化,并随着训练的进展而演变。因" -"此,我们采用了一种自适应方法 [andrew]_,该方法会不断调整剪切阈值,以跟踪更新" -"准则分布的预设量化值。" +"事实证明,参数更新准则的分布会随着任务的不同而变化,并随着训练的进展而演变。" +"因此,我们采用了一种自适应方法,该方法会不断调整剪切阈值,以跟踪参数更新准则" +"分布的预设量化值。" #: ../../source/explanation-differential-privacy.rst:23 msgid "Simplifying Assumptions" @@ -3405,16 +3397,15 @@ msgid "" "`(\\epsilon, \\delta)` guarantees the user has in mind when configuring the " "setup." msgstr "" -"我们提出(并试图执行)了一系列必须满足的假设,以确保训练过程真正实现用户在配" -"置设置时所想到的 :math:`(\\epsilon,\\delta)` 保证。" +"我们提出(并试图执行)了一系列必须满足的假设," +"以确保训练过程真正实现用户在配置设置时所定的 :math:`(\\epsilon,\\delta)` 。" #: ../../source/explanation-differential-privacy.rst:27 msgid "" "**Fixed-size subsampling** :Fixed-size subsamples of the clients must be " "taken at each round, as opposed to variable-sized Poisson subsamples." -msgstr "" -"** 固定大小的子样本** :与可变大小的泊松子样本相比,每轮必须抽取固定大小的客户" -"子样本。" +msgstr "** 固定大小的子样本** " +":与可变大小的泊松分布子样本相比,每轮必须抽取固定大小的客户端子样本。" #: ../../source/explanation-differential-privacy.rst:28 msgid "" @@ -3422,18 +3413,16 @@ msgid "" "weighted equally in the aggregate to eliminate the requirement for the " "server to know in advance the sum of the weights of all clients available " "for selection." -msgstr "" -"**非加权平均**: 所有客户的贡献必须加权相等,这样服务器就不需要事先知道所有客" -"户的权重总和。" +msgstr "**非加权平均**: " +"所有客户端的贡献必须加权相等,这样服务器就不需要事先知道所有客户的权重总和。" #: ../../source/explanation-differential-privacy.rst:29 msgid "" "**No client failures** : The set of available clients must stay constant " "across all rounds of training. In other words, clients cannot drop out or " "fail." -msgstr "" -"**没有客户失败** : 在各轮培训中,可用客户的数量必须保持不变。换句话说,客户" -"不能退出或失败。" +msgstr "**没有失败的客户端** : " +"在各轮训练中,可用客户端的数量必须保持不变。换句话说,客户端不能退出或失败。" #: ../../source/explanation-differential-privacy.rst:31 msgid "" @@ -3448,11 +3437,11 @@ msgstr "" msgid "" "These restrictions are in line with constraints imposed by Andrew et al. " "[andrew]_." -msgstr "这些限制与 Andrew 等人[andrew]_所施加的限制一致。" +msgstr "这些限制与 Andrew 等人所施加的限制一致。" #: ../../source/explanation-differential-privacy.rst:37 msgid "Customizable Responsibility for Noise injection" -msgstr "可定制的噪声注入责任" +msgstr "可定制的噪声注入" #: ../../source/explanation-differential-privacy.rst:38 msgid "" @@ -3466,8 +3455,8 @@ msgid "" msgstr "" "与其他在服务器上添加噪声的实现方法不同,您可以配置噪声注入的位置,以便更好地" "匹配您的威胁模型。我们为用户提供了设置训练的灵活性,使每个客户端都能独立地为" -"剪切更新添加少量噪声,这样,只需聚合噪声更新,就相当于在服务器上为非噪声聚合" -"明确添加噪声。" +"剪切参数更新添加少量噪声,这样,只需聚合噪声更新,就相当于在服务器上为非噪声" +"聚合添加噪声了。" #: ../../source/explanation-differential-privacy.rst:41 msgid "" @@ -3477,10 +3466,9 @@ msgid "" "maths to show that this is equivalent to each client adding noise with " "scale :math:`\\sigma_\\Delta/\\sqrt{m}`." msgstr "" -"准确地说,如果我们让 :math:`m` 为每轮采样的客户端数量,:math:" -"`\\sigma_\\Delta` 为需要添加到模型更新总和中的总高斯噪声的规模,我们就可以用" -"简单的数学方法证明,这相当于每个客户端都添加了规模为 :math:`\\sigma_\\Delta/" -"\\sqrt{m}` 的噪声。" +"准确地说,我们假设每轮采样的客户端数量为:math:`m`,:math:`\\sigma_\\Delta` 为" +"需要添加到模型更新总和中的总高斯噪声的规模,我们就可以用简单的数学方法证明了" +",这相当于每个客户端都添加了规模为 :math:`\\sigma_\\Delta/\\sqrt{m}` 的噪声。" #: ../../source/explanation-differential-privacy.rst:44 msgid "Wrapper-based approach" @@ -3499,12 +3487,13 @@ msgid "" "would require the creation of new sub- classes every time a new class " "implementing :code:`Strategy` or :code:`NumPyClient` is defined." msgstr "" -"在现有工作负载中引入 DP 可以被认为是在其周围增加了一层额外的安全性。受此启" -"发,我们提供了额外的服务器端和客户端逻辑,分别作为 :code:`Strategy` 和 :code:" -"`NumPyClient` 抽象类实例的封装器,使训练过程具有不同的私有性。这种基于封装器" -"的方法的优点是可以很容易地与将来可能会有人贡献给 Flower 库的其他封装器(例如" -"用于安全聚合的封装器)进行组合。使用继承可能会比较繁琐,因为每次定义实现 :" -"code:`Strategy` 或 :code:`NumPyClient` 的新类时,都需要创建新的子类。" +"在现有工作负载中引入 DP 可以被认为是在其周围增加了一层额外的安全性。受此启发" +",我们提供了额外的服务器端和客户端逻辑,分别作为 :code:`Strategy` 和 " +":code:`NumPyClient` 抽象类实例的封装器,使训练过程具有不同的隐私性。" +"这种基于封装器的方法的优点是可以很容易地与将来有人贡献给 Flower " +"的其他封装器(例如用于安全聚合的封装器)进行组合。使用继承可能会比较繁琐," +"因为每次定义实现 :code:`Strategy` 或 :code:`NumPyClient` " +"的新类时,都需要创建新的子类。" #: ../../source/explanation-differential-privacy.rst:49 msgid "Server-side logic" @@ -3527,10 +3516,10 @@ msgstr "" "我们的第一版解决方案是定义一个装饰器,其构造函数接受一个布尔值变量,表示是否" "启用自适应剪裁。我们很快意识到,这样会使其 :code:`__init__()` 函数中与自适应" "裁剪超参数相对应的变量变得杂乱无章,而这些变量在自适应裁剪被禁用时将保持未使" -"用状态。要实现更简洁的功能,可以将该功能拆分为两个装饰器,即 :code:" -"`DPFedAvgFixed` 和 :code:`DPFedAvgAdaptive`,后者是前者的子类。这两个类的构造" -"函数都接受一个布尔参数 :code:`server_side_noising`,顾名思义,它决定在哪里执" -"行噪声。" +"用状态。要实现更简洁的功能,可以将该功能拆分为两个装饰器,即 " +":code:`DPFedAvgFixed` 和 :code:`DPFedAvgAdaptive`,后者是前者的子类。" +"这两个类的构造函数都接受一个布尔参数 " +":code:`server_side_noising`,顾名思义,它决定了在哪里加噪声。" #: ../../source/explanation-differential-privacy.rst:54 msgid "DPFedAvgFixed" @@ -3543,8 +3532,8 @@ msgid "" "with the help of wrapper logic for just the following two methods of the :" "code:`Strategy` abstract class." msgstr "" -"只需对 :code:`Strategy` 抽象类的以下两个方法进行封装逻辑,就能完全捕获 DP-" -"FedAvg 原始版本(即执行固定剪裁的版本)所需的服务器端功能。" +"只需对 :code:`Strategy` 抽象类的以下两个方法进行封装,就能完全捕获 DP-FedAvg " +"原始版本(即执行固定剪裁的版本)所需的服务器端功能。" #: ../../source/explanation-differential-privacy.rst:58 msgid "" @@ -3557,12 +3546,12 @@ msgid "" "processing of the results returned by the wrappee's implementation of :code:" "`configure_fit()`." msgstr "" -":code:`configure_fit()`:由封装的 :code:`Strategy` 发送给每个客户端的配置字典" -"需要增加一个等于剪切阈值的附加值(在 .NET Framework 2.0 中键入),如果 :code:" -"`server_side_noising=true`,还需要增加一个等于高斯噪声比例的附加值: 如果 :" -"code:`server_side_noising=true`,则需要在客户端添加另一个与高斯噪声规模相等的" -"数值(关键字为 :code:`dpfedavg_noise_stddev`)。这就需要对被包装者实现 :code:" -"`configure_fit()` 时返回的结果进行*后*处理。" +":code:`configure_fit()` :由封装的 :code:`Strategy` " +"发送到每个客户端的配置字典需要使用等于裁剪阈值的附加值(在 " +":code:`dpfedavg_clip_norm` 下键入)进行扩充。并且,如果 " +"server_side_noising=true,则另一个值等于需要在客户端添加的高斯噪声的大小(在 " +"dpfedavg_noise_stddev 下键入)。这需要对封装后的configure_fit() " +"所返回的结果进行后处理。" #: ../../source/explanation-differential-privacy.rst:59 msgid "" @@ -3579,13 +3568,14 @@ msgid "" "arguments to this method before passing them on to the wrappee's " "implementation of :code:`aggregate_fit()`." msgstr "" -"代码:\"aggregate_fit()\": 我们会检查是否有任何取样客户端在本轮超时前退出或" -"未能上传更新。在这种情况下,我们需要中止当前一轮,丢弃已收到的任何成功更新," -"然后继续下一轮。另一方面,如果所有客户端都成功响应,我们就必须通过拦截 :code:" -"`FitRes` 的 :code:`parameters` 字段并将其设置为 1,强制以不加权的方式平均更" -"新。此外,如果 :code:`server_side_noising=true`,每次更新都会受到一定量的噪声" -"扰动,其扰动量相当于启用客户端噪声时的扰动量。 这就需要在将本方法的参数传递给" -"被包装者的 :code:`aggregate_fit()` 实现之前,对参数进行*预*处理。" +":code:`aggregate_fit()`: 我们会检查是否有任何客户端在本轮超时前退出或未能上" +"传参数更新。在这种情况下,我们需要中止当前一轮,丢弃已收到的所有参数更新,然" +"后继续下一轮。另一方面,如果所有客户端都成功响应,我们就必须通过拦截 " +":code:`FitRes` 的 :code:`parameters` 字段并将其设置为 " +"1,强制以不加权的方式平均更新。此外,如果 :code:`server_side_noising=true`," +"每次更新都会受到一定量的噪声扰动,其扰动量相当于启用客户端噪声时的扰动量。 " +"这就需要在将本方法的参数传递给封装的 :code:`aggregate_fit()` " +"之前,对参数进行*预*处理。" #: ../../source/explanation-differential-privacy.rst:62 msgid "" @@ -3609,9 +3599,9 @@ msgid "" "or the clients." msgstr "" "这些变化被整合到一个名为 :code:`DPFedAvgFixed` 的类中,其构造函数接受被装饰的" -"策略、剪切阈值和每轮采样的客户数作为必选参数。用户需要指定剪切阈值,因为更新" -"规范的数量级在很大程度上取决于正在训练的模型,提供默认值会产生误导。每轮采样" -"的客户数是计算服务器或客户在每次更新时必须添加的噪音量所必需的。" +"策略、剪切阈值和每轮采样的客户数作为必选参数。用户需要指定剪切阈值,因为参数" +"更新规范的数量级在很大程度上取决于正在训练的模型,提供默认值会产生误导。每轮" +"采样的客户端数量是计算服务器或客户在每次参数更新时添加的噪音量所必需的。" #: ../../source/explanation-differential-privacy.rst:67 msgid "DPFedAvgAdaptive" @@ -3624,8 +3614,8 @@ msgid "" "`DPFedAvgFixed`. It overrides the above-mentioned methods to do the " "following." msgstr "" -"自适应剪裁所需的附加功能在 :code:`DPFedAvgAdaptive` 中提供,它是 :code:" -"`DPFedAvgFixed` 的子类。它重写了上述方法,以实现以下功能。" +"自适应剪裁所需的附加功能在 :code:`DPFedAvgAdaptive` 中提供,其是 " +":code:`DPFedAvgFixed` 的子类。它重写了上述方法,以实现以下功能。" #: ../../source/explanation-differential-privacy.rst:71 msgid "" @@ -3636,9 +3626,9 @@ msgid "" "threshold, 0 otherwise) in the results returned by it." msgstr "" ":code:`configure_fit()`:它截取由 :code:`super.configure_fit()` 返回的 " -"config dict,并在其中添加键值对 :code:`dpfedavg_adaptive_clip_enabled:" -"True\",客户端将其解释为在返回结果中包含一个指示位(如果更新规范 <= 剪裁阈" -"值,则为 1,否则为 0)的指令。" +"config 字典,并在其中添加键-值对 :code:`dpfedavg_adaptive_clip_enabled:True\"" +",客户端将其解释为在返回结果中包含一个指示位(如果参数更新范式 <= 剪裁阈值," +"则为 1,否则为 0)的指令。" #: ../../source/explanation-differential-privacy.rst:73 msgid "" @@ -3647,8 +3637,8 @@ msgid "" "clipping threshold on the basis of the indicator bits received from the " "sampled clients." msgstr "" -":code:`aggregate_fit()`:在调用:code:`super.aggregate_fit()`后,再调用:code:" -"`__update_clip_norm__()`,该过程根据从采样客户端接收到的指示位调整削波阈值。" +":code:`aggregate_fit()`:在调用:code:`super.aggregate_fit()`后,再调用:code:`" +"__update_clip_norm__()`,该过程根据从采样客户端接收到的指示位调整裁剪阈值。" #: ../../source/explanation-differential-privacy.rst:77 msgid "Client-side logic" @@ -3665,15 +3655,15 @@ msgid "" "following keys are also present in the dict." msgstr "" "客户端所需的功能完全可以通过 :code:`NumPyClient` 抽象类的 :code:`fit()` 方法" -"的封装逻辑来实现。准确地说,我们需要对封装客户端计算的更新进行*后处理,以便在" -"必要时将其剪切到服务器作为配置字典的一部分提供的阈值。除此之外,如果配置字典" -"中还存在以下任一(或两个)键,客户端可能还需要执行一些额外的工作。" +"的封装逻辑来实现。准确地说,我们需要对封装客户端计算的参数更新进行处理,以便" +"在必要时将其剪切到服务器作为配置字典的一部分提供的阈值。除此之外,如果配置字" +"典中还存在以下任一(或两个)键,客户端可能还需要执行一些额外的工作。" #: ../../source/explanation-differential-privacy.rst:81 msgid "" ":code:`dpfedavg_noise_stddev` : Generate and add the specified amount of " "noise to the clipped update." -msgstr "code:`dpfedavg_noise_stddev`:生成并在剪切更新中添加指定数量的噪声。" +msgstr "code:`dpfedavg_noise_stddev`:生成并在剪切参数更新中添加指定数量的噪声。" #: ../../source/explanation-differential-privacy.rst:82 msgid "" @@ -3681,8 +3671,8 @@ msgid "" "code:`FitRes` object being returned to the server with an indicator bit, " "calculated as described earlier." msgstr "" -":code:`dpfedavg_adaptive_clip_enabled`:在返回给服务器的 :code:`FitRes` 对象" -"中的度量值 dict 中增加一个指标位,计算方法如前所述。" +":code:`dpfedavg_adaptive_clip_enabled`:在返回给服务器的 :code:`FitRes` " +"对象中的度量值字典中增加一个指标位,计算方法如前所述。" #: ../../source/explanation-differential-privacy.rst:86 msgid "Performing the :math:`(\\epsilon, \\delta)` analysis" @@ -3695,16 +3685,16 @@ msgid "" "`\\epsilon` value this would result in for a particular :math:`\\delta`, the " "following script may be used." msgstr "" -"假设您已经训练了 :math:`n` 轮,采样分数为 :math:`q`,噪声乘数为 :math:`z`。为" -"了计算特定 :math:`\\delta` 的 :math:`epsilon` 值,可以使用下面的脚本。" +"假设您已经训练了 :math:`n` 轮,采样比例为 :math:`q`,噪声乘数为 :math:`z`。" +"为了计算特定 :math:`\\delta` 的 :math:`epsilon` 值,可以使用下面的脚本。" #: ../../source/explanation-differential-privacy.rst:98 msgid "" "McMahan, H. Brendan, et al. \"Learning differentially private recurrent " "language models.\" arXiv preprint arXiv:1710.06963 (2017)." msgstr "" -"McMahan, H. Brendan, et al. \"Learning differentially private recurrent " -"language models.\" arXiv preprint arXiv:1710.06963 (2017)." +"McMahan, H. Brendan等. \"Learning differentially private recurrent language " +"models.\" arXiv preprint arXiv:1710.06963 (2017)." #: ../../source/explanation-differential-privacy.rst:100 msgid "" @@ -3712,22 +3702,20 @@ msgid "" "clipping.\" Advances in Neural Information Processing Systems 34 (2021): " "17455-17466." msgstr "" -"Andrew, Galen, et al. \"Differentially private learning with adaptive " -"clipping.\" Advances in Neural Information Processing Systems 34 (2021): " -"17455-17466." +"Andrew, Galen等. \"Differentially private learning with adaptive clipping.\" " +"Advances in Neural Information Processing Systems 34 (2021): 17455-17466." #: ../../source/explanation-federated-evaluation.rst:2 #: ../../source/tutorial-series-what-is-federated-learning.ipynb:292 msgid "Federated evaluation" -msgstr "联邦评估" +msgstr "联邦学习评估" #: ../../source/explanation-federated-evaluation.rst:4 msgid "" "There are two main approaches to evaluating models in federated learning " "systems: centralized (or server-side) evaluation and federated (or client-" "side) evaluation." -msgstr "" -"评估联合学习系统中的模型主要有两种方法:集中(或服务器端)评估和联合(或客户" +msgstr "评估联合学习系统中的模型主要有两种方法:集中(或服务器端)评估和联邦(或客户" "端)评估。" #: ../../source/explanation-federated-evaluation.rst:8 @@ -3759,9 +3747,9 @@ msgid "" "The current server implementation calls :code:`evaluate` after parameter " "aggregation and before federated evaluation (see next paragraph)." msgstr "" -":code:`Strategy` 抽象提供了一个名为 :code:`evaluate` 的方法,可直接用于评估当" -"前的全局模型参数。当前的服务器实现在参数聚合后和联合评估前调用 :code:" -"`evaluate`(见下段)。" +":code:`Strategy` 抽象提供了一个名为 :code:`evaluate` " +"的方法,可直接用于评估当前的全局模型参数。" +"服务器会在参数聚合后和联邦评估前调用 :code:`evaluate`(见下段)。" #: ../../source/explanation-federated-evaluation.rst:65 msgid "Federated Evaluation" @@ -3769,7 +3757,7 @@ msgstr "联邦评估" #: ../../source/explanation-federated-evaluation.rst:68 msgid "Implementing Federated Evaluation" -msgstr "实施联邦评估" +msgstr "实现联邦评估" #: ../../source/explanation-federated-evaluation.rst:70 msgid ""