diff --git a/docs/todo/aud_2.2/aud22_25.md b/docs/todo/aud_2.2/aud22_25.md index d6fc06550ca9a62f875dc584e74116494b8a0168..f528116d8ea6b317e15fd0eb71434335a185920e 100644 --- a/docs/todo/aud_2.2/aud22_25.md +++ b/docs/todo/aud_2.2/aud22_25.md @@ -125,7 +125,7 @@ Audio([SPEECH_WAVEFORM](https://pytorch.org/docs/stable/tensors.html#torch.Tenso ### `n_fft` 参数的影响 -频谱图计算的核心是(短时)傅立叶变换,`n_fft` 参数对应于以下离散傅立叶变换定义中的 \(N\)。 +频谱图计算的核心是(短时)傅立叶变换,`n_fft` 参数对应于以下离散傅立叶变换定义中的 $N$。 $$ X_k = \sum_{n=0}^{N-1} x_n e^{-\frac{2\pi i}{N} nk} $$ diff --git a/docs/todo/aud_2.2/aud22_28.md b/docs/todo/aud_2.2/aud22_28.md index 272f71b015480f12b897b99c1e8160d00bde24ba..7865361601d9ee2ac837dd4c30dfc9fdc4fbd45e 100644 --- a/docs/todo/aud_2.2/aud22_28.md +++ b/docs/todo/aud_2.2/aud22_28.md @@ -59,11 +59,11 @@ from IPython.display import Audio 正弦振荡器从给定的振幅和频率生成正弦波形。 -\[x_t = A_t \sin \theta_t\] +$$x_t = A_t \sin \theta_t$$ -其中相位 \(\theta_t\) 是通过积分瞬时频率 \(f_t\) 找到的。 +其中相位 $\theta_t$ 是通过积分瞬时频率 $f_t$ 找到的。 -\[\theta_t = \sum_{k=1}^{t} f_k\] +$$\theta_t = \sum_{k=1}^{t} f_k$$ 注意 diff --git a/docs/todo/aud_2.2/aud22_29.md b/docs/todo/aud_2.2/aud22_29.md index 19ed839c042e7b5e9bc78656036eb56d7a33fd33..b5f313b50cdd2834ad88c74dc397e9705b4b775b 100644 --- a/docs/todo/aud_2.2/aud22_29.md +++ b/docs/todo/aud_2.2/aud22_29.md @@ -121,7 +121,7 @@ def plot([freq](https://pytorch.org/docs/stable/tensors.html#torch.Tensor "torch [锯齿波](https://en.wikipedia.org/wiki/Sawtooth_wave) 可以表示为以下形式。它包含所有整数谐波,因此在减法合成中常被使用。 -\[\begin{align*} y_t &= \sum_{k=1}^{K} A_k \sin ( 2 \pi f_k t ) \\ \text{其中} \\ f_k &= k f_0 \\ A_k &= -\frac{ (-1) ^k }{k \pi} \end{align*}\] +$$\begin{align*} y_t &= \sum_{k=1}^{K} A_k \sin ( 2 \pi f_k t ) \\ \text{其中} \\ f_k &= k f_0 \\ A_k &= -\frac{ (-1) ^k }{k \pi} \end{align*}$$ 以下函数接受基频和振幅,并根据上述公式添加扩展音高。 @@ -179,7 +179,7 @@ plot([freq](https://pytorch.org/docs/stable/tensors.html#torch.Tensor "torch.Ten [方波](https://en.wikipedia.org/wiki/Square_wave) 仅包含奇整数谐波。 -\[\begin{align*} y_t &= \sum_{k=0}^{K-1} A_k \sin ( 2 \pi f_k t ) \\ \text{其中} \\ f_k &= n f_0 \\ A_k &= \frac{ 4 }{n \pi} \\ n &= 2k + 1 \end{align*}\] +$$\begin{align*} y_t &= \sum_{k=0}^{K-1} A_k \sin ( 2 \pi f_k t ) \\ \text{其中} \\ f_k &= n f_0 \\ A_k &= \frac{ 4 }{n \pi} \\ n &= 2k + 1 \end{align*}$$ ```py def square_wave([freq0](https://pytorch.org/docs/stable/tensors.html#torch.Tensor "torch.Tensor"), [amp0](https://pytorch.org/docs/stable/tensors.html#torch.Tensor "torch.Tensor"), num_pitches, sample_rate): @@ -213,7 +213,7 @@ plot([freq](https://pytorch.org/docs/stable/tensors.html#torch.Tensor "torch.Ten [三角波](https://en.wikipedia.org/wiki/Triangle_wave) 也仅包含奇整数谐波。 -\[\begin{align*} y_t &= \sum_{k=0}^{K-1} A_k \sin ( 2 \pi f_k t ) \\ \text{其中} \\ f_k &= n f_0 \\ A_k &= (-1) ^ k \frac{8}{(n\pi) ^ 2} \\ n &= 2k + 1 \end{align*}\] +$$\begin{align*} y_t &= \sum_{k=0}^{K-1} A_k \sin ( 2 \pi f_k t ) \\ \text{其中} \\ f_k &= n f_0 \\ A_k &= (-1) ^ k \frac{8}{(n\pi) ^ 2} \\ n &= 2k + 1 \end{align*}$$ ```py def triangle_wave([freq0](https://pytorch.org/docs/stable/tensors.html#torch.Tensor "torch.Tensor"), [amp0](https://pytorch.org/docs/stable/tensors.html#torch.Tensor "torch.Tensor"), num_pitches, sample_rate): diff --git a/docs/todo/aud_2.2/aud22_40.md b/docs/todo/aud_2.2/aud22_40.md index 30025fd3f6b11ce55e93414f54b912f6c00f123d..46198bd55ccbbcaa3cc862d4321dd1b9f3d8bea6 100644 --- a/docs/todo/aud_2.2/aud22_40.md +++ b/docs/todo/aud_2.2/aud22_40.md @@ -116,19 +116,19 @@ plot() 从发射矩阵中,接下来我们生成表示每个时间帧发生转录标签概率的状态图。 -状态图是一个二维矩阵,具有时间轴和标签轴。标签轴表示我们正在对齐的转录。在下文中,我们使用\(t\)表示时间轴中的索引,使用\(j\)表示标签轴中的索引。\(c_j\)表示标签索引\(j\)处的标签。 +状态图是一个二维矩阵,具有时间轴和标签轴。标签轴表示我们正在对齐的转录。在下文中,我们使用$t$表示时间轴中的索引,使用$j$表示标签轴中的索引。$c_j$表示标签索引$j$处的标签。 -为了生成时间步长\(t+1\)的概率,我们查看从时间步长\(t\)到时间步长\(t+1\)的格子和发射。有两种路径可以到达时间步长\(t+1\),标签为\(c_{j+1}\)。第一种情况是标签在\(t\)时为\(c_{j+1}\),从\(t\)到\(t+1\)没有标签变化。另一种情况是标签在\(t\)时为\(c_j\),在\(t+1\)转换为下一个标签\(c_{j+1}\)。 +为了生成时间步长$t+1$的概率,我们查看从时间步长$t$到时间步长$t+1$的格子和发射。有两种路径可以到达时间步长$t+1$,标签为$c_{j+1}$。第一种情况是标签在$t$时为$c_{j+1}$,从$t$到$t+1$没有标签变化。另一种情况是标签在$t$时为$c_j$,在$t+1$转换为下一个标签$c_{j+1}$。 以下图表说明了这种转变。 !`download.pytorch.org/torchaudio/tutorial-assets/ctc-forward.png` -由于我们正在寻找最可能的转换,因此我们为\(k_{(t+1, j+1)}\)的更可能路径取更可能的路径,即 +由于我们正在寻找最可能的转换,因此我们为$k_{(t+1, j+1)}$的更可能路径取更可能的路径,即 -\(k_{(t+1, j+1)} = max( k_{(t, j)} p(t+1, c_{j+1}), k_{(t, j+1)} p(t+1, repeat) )\) +$k_{(t+1, j+1)} = max( k_{(t, j)} p(t+1, c_{j+1}), k_{(t, j+1)} p(t+1, repeat) )$ -其中\(k\)代表格子矩阵,\(p(t, c_j)\)代表时间步长\(t\)处标签\(c_j\)的概率。\(repeat\)代表 CTC 公式中的空白标记。(有关 CTC 算法的详细信息,请参阅*使用 CTC 进行序列建模*[[distill.pub](https://distill.pub/2017/ctc/)) +其中$k$代表格子矩阵,$p(t, c_j)$代表时间步长$t$处标签$c_j$的概率。$repeat$代表 CTC 公式中的空白标记。(有关 CTC 算法的详细信息,请参阅*使用 CTC 进行序列建模*[[distill.pub](https://distill.pub/2017/ctc/)) ```py # We enclose the transcript with space tokens, which represent SOS and EOS. @@ -185,7 +185,7 @@ plot() 生成了格子后,我们将沿着具有高概率元素的路径遍历它。 -我们将从具有最高概率时间步长的最后标签索引开始,然后,我们向后遍历时间,根据过渡后概率\(k_{t, j} p(t+1, c_{j+1})\)或\(k_{t, j+1} p(t+1, repeat)\)选择停留(\(c_j \rightarrow c_j\))或过渡(\(c_j \rightarrow c_{j+1}\))。 +我们将从具有最高概率时间步长的最后标签索引开始,然后,我们向后遍历时间,根据过渡后概率$k_{t, j} p(t+1, c_{j+1})$或$k_{t, j+1} p(t+1, repeat)$选择停留($c_j \rightarrow c_j$)或过渡($c_j \rightarrow c_{j+1}$)。 一旦标签到达开头,转换就完成了。 diff --git a/docs/todo/aud_2.2/aud22_50.md b/docs/todo/aud_2.2/aud22_50.md index 06080feeae9a3d71f0ff9acb1e4daf9ae3c88cfd..76812fce75a197c40c8d7bef3a371b5c5ddba7a7 100644 --- a/docs/todo/aud_2.2/aud22_50.md +++ b/docs/todo/aud_2.2/aud22_50.md @@ -27,7 +27,7 @@ | `convolve` | 使用直接方法沿着它们的最后一个维度对输入进行卷积。 | | `fftconvolve` | 使用 FFT 沿着它们的最后一个维度对输入进行卷积。 | | `add_noise` | 根据信噪比对波形进行缩放和添加噪音。 | -| `preemphasis` | 预强调波形的最后一个维度,即对于`waveform`中的每个信号\(x\),计算输出\(y\)为。 | +| `preemphasis` | 预强调波形的最后一个维度,即对于`waveform`中的每个信号$x$,计算输出$y$为。 | | `deemphasis` | 沿着其最后一个维度减弱波形。 | | `speed` | 调整波形速度。 | | `frechet_distance` | 计算两个多元正态分布之间的 Fréchet 距离[Dowson and Landau, 1982:450–455, 1982.")]。 | diff --git a/docs/todo/rec/rec_10.md b/docs/todo/rec/rec_10.md index db0ed8c4c7990fe1275c2b49bd0e1f2998bd0118..cda8b7625cfccbaa28c7f4fd2aa19dce6e750a96 100644 --- a/docs/todo/rec/rec_10.md +++ b/docs/todo/rec/rec_10.md @@ -77,13 +77,13 @@ class torchrec.modules.crossnet.CrossNet(in_features: int, num_layers: int) [交叉网络](https://arxiv.org/abs/1708.05123): -Cross Net 是对形状为\((*, N)\)的张量进行一系列“交叉”操作,使其形状相同,有效地创建\(N\)个可学习的多项式函数。 +Cross Net 是对形状为$(*, N)$的张量进行一系列“交叉”操作,使其形状相同,有效地创建$N$个可学习的多项式函数。 在这个模块中,交叉操作是基于一个满秩矩阵(NxN)定义的,这样交叉效应可以覆盖每一层上的所有位。在每一层 l 上,张量被转换为: -\[x_{l+1} = x_0 * (W_l \cdot x_l + b_l) + x_l\] +$$x_{l+1} = x_0 * (W_l \cdot x_l + b_l) + x_l$$ -其中\(W_l\)是一个方阵\((NxN)\),\(*)表示逐元素乘法,\(\cdot\)表示矩阵乘法。 +其中$W_l$是一个方阵$(NxN)$,$*)表示逐元素乘法,$\cdot$表示矩阵乘法。 参数: @@ -128,17 +128,17 @@ class torchrec.modules.crossnet.LowRankCrossNet(in_features: int, num_layers: in 基类:`Module` -低秩交叉网络是一个高效的交叉网络。它不是在每一层使用满秩交叉矩阵(NxN),而是使用两个核\(W (N x r)\)和\(V (r x N)\),其中 r << N,以简化矩阵乘法。 +低秩交叉网络是一个高效的交叉网络。它不是在每一层使用满秩交叉矩阵(NxN),而是使用两个核$W (N x r)$和$V (r x N)$,其中 r << N,以简化矩阵乘法。 在每一层 l 上,张量被转换为: -\[x_{l+1} = x_0 * (W_l \cdot (V_l \cdot x_l) + b_l) + x_l\] +$$x_{l+1} = x_0 * (W_l \cdot (V_l \cdot x_l) + b_l) + x_l$$ -其中\(W_l\)可以是一个向量,\(*)表示逐元素乘法,\(\cdot\)表示矩阵乘法。 +其中$W_l$可以是一个向量,$*)表示逐元素乘法,$\cdot$表示矩阵乘法。 注意 -秩 r 应该被聪明地选择。通常,我们期望 r < N/2 以节省计算;我们应该期望\(r ~= N/4\)以保持完整秩交叉网络的准确性。 +秩 r 应该被聪明地选择。通常,我们期望 r < N/2 以节省计算;我们应该期望$r ~= N/4$以保持完整秩交叉网络的准确性。 参数: @@ -187,17 +187,17 @@ class torchrec.modules.crossnet.LowRankMixtureCrossNet(in_features: int, num_lay 低秩混合交叉网络是来自[论文](https://arxiv.org/pdf/2008.13535.pdf)的 DCN V2 实现: -LowRankMixtureCrossNet 将每层的可学习交叉参数定义为一个低秩矩阵\((N*r)\)以及专家混合。与 LowRankCrossNet 相比,这个模块不依赖于单个专家来学习特征交叉,而是利用这样的\(K\)专家;每个专家在不同子空间中学习特征交互,并通过依赖于输入\(x\)的门控机制自适应地组合学习到的交叉。 +LowRankMixtureCrossNet 将每层的可学习交叉参数定义为一个低秩矩阵$(N*r)$以及专家混合。与 LowRankCrossNet 相比,这个模块不依赖于单个专家来学习特征交叉,而是利用这样的$K$专家;每个专家在不同子空间中学习特征交互,并通过依赖于输入$x$的门控机制自适应地组合学习到的交叉。 在每一层 l 上,张量被转换为: -\[x_{l+1} = MoE({expert_i : i \in K_{experts}}) + x_l\] +$$x_{l+1} = MoE({expert_i : i \in K_{experts}}) + x_l$$ -每个\(expert_i\)被定义为: +每个$expert_i$被定义为: -\[expert_i = x_0 * (U_{li} \cdot g(C_{li} \cdot g(V_{li} \cdot x_l)) + b_l)\] +$$expert_i = x_0 * (U_{li} \cdot g(C_{li} \cdot g(V_{li} \cdot x_l)) + b_l)$$ -其中\(U_{li} (N, r)\),\(C_{li} (r, r)\)和\(V_{li} (r, N)\)是低秩矩阵,\(*)表示逐元素乘法,\(x\)表示矩阵乘法,\(g()\)是非线性激活函数。 +其中$U_{li} (N, r)$,$C_{li} (r, r)$和$V_{li} (r, N)$是低秩矩阵,$*)表示逐元素乘法,$x$表示矩阵乘法,$g()$是非线性激活函数。 当 num_expert 为 1 时,门控评估和 MOE 将被跳过以节省计算。 @@ -254,9 +254,9 @@ class torchrec.modules.crossnet.VectorCrossNet(in_features: int, num_layers: int 在每一层 l 上,张量被转换为 -\[x_{l+1} = x_0 * (W_l . x_l + b_l) + x_l\] +$$x_{l+1} = x_0 * (W_l . x_l + b_l) + x_l$$ -其中\(W_l\)是一个向量,\(*)表示逐元素乘法;\(.\)表示点操作。 +其中$W_l$是一个向量,$*)表示逐元素乘法;$.$表示点操作。 参数: diff --git a/docs/todo/txt_0.17/txt017_05.md b/docs/todo/txt_0.17/txt017_05.md index 481977a87f5ff10426ecc535175315c3ea6b89cb..8ce9510bd0f4abe299a4a0370961c58da9c914c6 100644 --- a/docs/todo/txt_0.17/txt017_05.md +++ b/docs/todo/txt_0.17/txt017_05.md @@ -73,19 +73,19 @@ forward(query: Tensor, key: Tensor, value: Tensor, attn_mask: Optional[Tensor] = > + 输入: > + -> > + 查询:\((...,L,N,E)\) +> > + 查询:$(...,L,N,E)$ > > + -> > + 键:\((...,S,N,E)\) +> > + 键:$(...,S,N,E)$ > > + -> > + 值:\((...,S,N,E)\) +> > + 值:$(...,S,N,E)$ > > + > > + attn_mask,bias_k 和 bias_v:与注意力层中相应参数的形状相同。 > > + > + 输出: > + -> > + attn_output:\((...,L,N,E)\) +> > + attn_output:$(...,L,N,E)$ > > + -> > + attn_output_weights:\((N * H,L,S)\) +> > + attn_output_weights:$(N * H,L,S)$ > > + > 注意:具有超过三个维度的查询/键/值输入是可选的(用于广播目的)。MultiheadAttentionContainer 模块将在最后三个维度上操作。 > @@ -193,19 +193,19 @@ forward(query: Tensor, key: Tensor, value: Tensor, attn_mask: Optional[Tensor] = 形状: -+ query:\((..., L, N * H, E / H)\) ++ query:$(..., L, N * H, E / H)$ -+ 键:\((..., S, N * H, E / H)\) ++ 键:$(..., S, N * H, E / H)$ -+ value:\((..., S, N * H, E / H)\) ++ value:$(..., S, N * H, E / H)$ -+ attn_mask:\((N * H, L, S)\),具有`True`的位置不允许参与 ++ attn_mask:$(N * H, L, S)$,具有`True`的位置不允许参与 当`False`值将保持不变。 -+ bias_k 和 bias_v:bias:\((1, N * H, E / H)\) ++ bias_k 和 bias_v:bias:$(1, N * H, E / H)$ -+ 输出:\((..., L, N * H, E / H)\),\((N * H, L, S)\) ++ 输出:$(..., L, N * H, E / H)$,$(N * H, L, S)$ 注意:具有超过三个维度的查询/键/值输入是可选的(用于广播目的)。