我正在尝试使用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])));
答案 0 :(得分:1)
谢谢,丹尼尔 - 事实证明问题在于没有使用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)