在变压器网络(Vaswani等人,2017年年)中,前馈网络有方程:
x \in \mathbb{R}^{n \times d_\mathrm{model}},W_1 \in\mathbb{R}^{d_\mathrm{model} \times d_{ff}},W_2 \in\mathbb{R}^{d_{ff} \times d_\mathrm{model}}。我们知道,偏差b_1和b_2是向量。但是,要使方程有效,b_1和b_2的形状必须一致,即b_1 \in\mathbb{R}^{n \times d_{ff}}和b_2 \in\mathbb{R}^{n \times d_\mathrm{model}}。我的问题是:
b_1 = \begin{bmatrix} (b_1)_{1} & (b_1)_{2} & \dots & (b_1)_{d_{ff}}\\ (b_1)_{1} & (b_1)_{2} & \dots & (b_1)_{d_{ff}} \\ \vdots & \vdots & & \vdots \\ (b_1)_{1} & (b_1)_{2} & \dots & (b_1)_{d_{ff}} \end{bmatrix}和
?
发布于 2023-05-15 09:22:24
好吧,是和不是。
这是一个位置方向的前馈网络.x \in \mathbb{R}^{n\times d_{model}},其中n是序列长度。当我们应用矩阵乘法和偏差加法时,我们对每个单独的位置都这样做。因此,实际乘法是1\times d_{model}矩阵维数W_1的一个向量。
在实际的实现条件下,我们得到了单矩阵乘法n向量的结果。偏置是在加法运算中广播的单一矢量。广播被numpy引入,然后被深度学习框架所采用。它被定义为为:
广播一词描述了在算术运算期间NumPy如何处理不同形状的数组。在某些约束条件下,较小的数组在较大的数组中被“广播”,以便它们具有兼容的形状。广播提供了一种将数组操作向量化的方法,以便在C中而不是在Python中进行循环。这样做并不需要对数据进行不必要的复制,而且通常会导致高效的算法实现。
在这种情况下,广播相当于重复偏置向量n时间。
这并不意味着实际的向量是n \times d_{ff},而是我们将加法应用于每个n位置。
发布于 2023-05-15 08:39:01
我不这样认为。第一个矩阵W1是形状D_模型,dff,因此它将输入向量1×d_模型转换为大小为1的向量。第一个偏置向量是1。第二个矩阵W2是反方向的,所以它是形状Dff,d_模型,它接受一个输入形状1并产生一个输出1×d_模型,所以第二个偏置应该是形状1×d_模型的矢量。偏倚b1和b2只是向量(忽略批处理)。hth。
https://datascience.stackexchange.com/questions/121542
复制相似问题