提交 100ae00d 编写于 作者: 绝不原创的飞龙's avatar 绝不原创的飞龙

2024-02-06 16:05:38

上级 01fbe66e
......@@ -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} $$
......
......@@ -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$$
注意
......
......@@ -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):
......
......@@ -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}$)。
一旦标签到达开头,转换就完成了。
......
......@@ -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.")]。 |
......
......@@ -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$是一个向量,$*)表示逐元素乘法;$.$表示点操作。
参数:
......
......@@ -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)$
注意:具有超过三个维度的查询/键/值输入是可选的(用于广播目的)。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册