我最近读了一篇关于公路神经网络的文章,发现了以下内容:
y=H(x,W_H) H通常是仿射变换,然后是非线性激活函数,但通常可以采用其他形式。
在谷歌上搜索了仿射变换之后,我不能说我完全理解它的含义。谁能详细解释一下吗?
发布于 2016-08-13 12:06:12
这是一个线性变换。例如,在转换之前平行的线仍然是平行的。缩放,旋转,反射等等。对于神经网络,通常只是输入矩阵乘以权矩阵。
发布于 2018-10-24 11:12:58
仿射变换是一种形式,
`g(\vec(v) = Av+b #qcStackCode#`其中,A是表示线性变换的矩阵,b是向量。
换言之,仿射变换是线性变换与平移的结合。
线性变换总是将源空间中的向量b =0携带到目标空间中的0。
E.g
y=3x + 4,在学校里我们称它为线性方程,但它不是严格地说线性变换,因为它有平移(+4),而线性变换不这样做。
因此,每一个线性变换都是仿射的(只是将b设为零向量)。然而,并不是每个仿射变换都是线性的。
现在,在机器学习的背景下,线性回归试图以一种最优的方式将一条线拟合到数据上,
行被定义为,y=mx+b。正如所解释的,它实际上不是线性函数,它是仿射函数。也许应该改名。正确使用术语是件好事。
同样,在一层神经网络中,通常用数学表示如下:
W是权矩阵,\vec{b}是偏置向量。这个函数通常也被称为线性函数,尽管它实际上是仿射函数。
发布于 2022-04-09 23:34:20
要从数学上理解线性和仿射变换是什么,请阅读Pratik_Katte的答案。
但是在机器学习中,所谓的线性层实际上是数学上的仿射变换,\mathbb{R}^n\rightarrow\mathbb{R}^m (即将特征转化为向量)。所谓仿射层实际上是n仿射变换\mathbb{R}\rightarrow\mathbb{R} (即特征坐标上的转换)。
class Affine(nn.Module):
def __init__(self, dim):
super().__init__()
self.alpha = nn.Parameter(torch.ones(dim))
self.beta = nn.Parameter(torch.zeros(dim))
def forward(self, x):
return self.alpha * x + self.betahttps://github.com/facebookresearch/deit/blob/main/resmlp_models.py
作为线性层的psudo代码可能会去哪里?
class Linear(Module):
def __init__(self, in_features: int, out_features: int):
super(Linear, self).__init__()
self.weight = Parameter(torch.rand((out_features, in_features))
self.bias = Parameter(torch.rand(out_features))https://datascience.stackexchange.com/questions/13405
复制相似问题