【问题标题】:Matlab gradient and hessian computation for symbolic vector function符号向量函数的Matlab梯度和hessian计算
【发布时间】:2015-06-17 22:25:21
【问题描述】:

我正在尝试使用 Matlab 的“梯度”和“hessian”函数来计算符号向量函数相对于向量的导数。下面是使用 sigmoid 函数 1/(1+e^(-a)) 的示例,其中 a 是特征向量乘以权重。以下版本均返回错误。我是 Matlab 的新手,非常感谢任何建议。 documentation 中的解决方案可能就在我的眼皮底下,但我无法解决这个问题。提前感谢您的帮助!

%version 1
syms y w x
x = sym('x', [1 3]);
w = sym('w', [1 3]);
f = (y-1)*w.*x + log(1/(1+exp(-w.*x)));
gradient(f, w)

%version 2
syms y w1 w2 w3 x1 x2 x3 x w
x = [x1,x2,x3];
w = [w1,w2,w3];
f = (y-1)*w.*x + log(1/(1+exp(-w.*x)));

%version 3
syms y w1 w2 w3 x1 x2 x3
f = (y-1)*[w1,w2,w3].*[x1,x2,x3] + log(1/(1+exp(-[w1,w2,w3].*[x1,x2,x3])));

【问题讨论】:

  • 您能解释一下为什么要使用符号数学然后应用数值方法吗?你不使用diff有什么原因吗?

标签: matlab gradient hessian-matrix


【解决方案1】:

谢谢,Daniel - 原来问题在于没有使用 dot() 来获取 w 和 x 的点积。 diff() 和 gradient() 都给出了相同的解决方案,如下所示:

syms y
x = sym('x', [1 3]);
w = sym('w', [1 3]);
f = (y-1)*dot(w,x) + log(1/(1+exp(dot(-w,x))));
diff(f, w(1))
gradient(f, w(1))

%ans =
%x1*(y - 1) + (x1*exp(- x1*conj(w1) - x2*conj(w2) - x3*conj(w3)))/
    (exp(-x1*conj(w1) - x2*conj(w2) - x3*conj(w3)) + 1)

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2020-05-26
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多