Math 我能为等于一的两个向量的点积创建一个成本函数吗

Math 我能为等于一的两个向量的点积创建一个成本函数吗,math,optimization,deep-learning,Math,Optimization,Deep Learning,我有两个向量x和y,每个向量的大小是256x1,这两个向量的点积是常数,等于1。也就是说x*y'=1 这些向量受任何噪声的影响,我需要创建x*y'=1的代价函数,然后对其进行优化。可能吗?如何优化成本函数 谢谢您希望“成本”表示dot产品x.y距离1多远。一个简单的可微成本函数是点积和1之间的平方差: def dot_产品(x,y): 返回值(a*b表示a,b表示zip(x,y)) def成本(x,y): 退货(点积(x,y)-1)**2 如果您想实现梯度下降,从嘈杂的x,y开始获得低成本的x

我有两个向量x和y,每个向量的大小是256x1,这两个向量的点积是常数,等于1。也就是说x*y'=1

这些向量受任何噪声的影响,我需要创建x*y'=1的代价函数,然后对其进行优化。可能吗?如何优化成本函数

谢谢

您希望“成本”表示dot产品
x.y
距离
1
多远。一个简单的可微成本函数是点积和
1
之间的平方差:

def dot_产品(x,y):
返回值(a*b表示a,b表示zip(x,y))
def成本(x,y):
退货(点积(x,y)-1)**2
如果您想实现梯度下降,从嘈杂的
x,y
开始获得低成本的
x,y
,您需要为
成本
函数的梯度编写一个公式。如果你对这种计算感到满意,你可以用手来做;或者,您可以依赖于类似于
pytorch
的工具,该工具可以实现自动差异化

def成本梯度(x,y):
k=2*(点积(x,y)-1)
dx=(k*yi代表y中的yi)
Dy=(x中的k*席席x)
返回(dx,dy)
然后你可以写一个简单的循环;在每次迭代中,在损失函数梯度的相反方向上轻轻推动
x
y
。新矢量
x
y
的成本将略低于以前的矢量,这意味着它们的点积将略接近
1

def微移(xy、渐变、学习速率):
x、 y=xy
dx,dy=梯度
席席= Xi,Xi,Xi,DXI,ZIP(X,DX)中的XI
y=[yi-学习率*yi的dyi,zip中的dyi(y,dy)]
返回(x,y)
最后,我们可以在python REPL中进行测试。我生成了带有256个坐标的随机向量
x
y
,然后我将
y
的每个坐标除以
x
y
的点积

点积(x,y) 1 >X= = [Xi+No..x.]加噪声中席席的随机(均匀)(-0.01,0.01) >>>y=[yi+random.uniform(-0.01,0.01)表示y中的yi]#添加噪声 >>>点积(x,y) 0.8757084508696101 >>>对于范围(100)内的n: ... x、 y=微移((x,y),成本梯度(x,y),0.001) ... >>>点积(x,y) 0.9999999992383757
我建议读一本关于pytorch的梯度下降教程

当然有可能。由于您标记了“深度学习”,这完全可以通过反向传播实现。你的代价函数可能是(x*y'-1)^2。非常感谢,,,能不能给我一个在MATLAB而不是paython中实现的方法。我的意思是一样的,但如果可能的话,用MATLAB。我已经很多年没用过MATLAB了。翻译代码应该不会太难。Matlab已经实现了点积,所以你不必像我那样编写自己的函数,Matlab也处理很多“坐标明智”的操作,所以代替Python的<代码> x=席席[X-LealSnxyReal**DXI,Zip(x,dx)] /<代码>你可以编写一些更简单的东西,比如<代码> x= x学习-Real**dx。非常感谢,我知道了。如果成本函数是| x |-| y |=0;其中| x |是向量x的绝对值。我们也可以用它作为代价函数吗?一点词汇:
|x |
是向量x的范数。如果要执行梯度下降,则代价函数必须是可微的。根据经验,如果表达式使用符号
|
,则它是不可微的。相反,我们使用平方,这是可微的;这就是为什么我建议使用
(x.y-1)^2
,而不是
|x.y-1
@Gze,所以可以使用
x.x-y.y
而不是
。这很容易区分;但请注意,如果您使用此函数作为代价函数,那么梯度下降将帮助您找到两个向量
x
y
,从而
|x |=| y |
,这与您最初询问的
x.y=1
完全无关。