能不能用梯度下降法求平方根或者立方根?面试题卷56里提到了一下,但是没有具体解答。
向各位请教,谢谢!
2个回答
求立方根就是等价于求$f(x)=x^3-a$的根,也就等价于求$g(x)=f^2(x)=(x^3-a)^2$的最小值。梯度下降法要求$g(x)$是凸函数,但是显然它并不是凸函数。
上面是$g(x)=(x^3-1)^2$的图像,也有可能会收敛到0点。一般不用梯度下降,如果用的话要多试几个初始点,并且最后结果要代回原式子验算一遍。
SofaSofa数据科学社区DS面试题库 DS面经先建立等式,再建立convex函数,最后用梯度下降解。
$$x^2=y$$
$$L=(x^2-y)^2$$
$$g(x)=dL/dx=4x^3-4xy=4x(x^2-y)$$
$$x_{n+1}=x_n-ag(x_n)$$
------------------------------------------------
根据xiaosu的回答,$(x^2-y)^2$只在局部是convex函数。$d^2L/dx^2=4(3x^2-y)>0=>|x|>\sqrt{y/3}$。所以x的初始值范围是$y$的函数。
import numpy as np
import matplotlib.pyplot as plt
y=10.
n=200
xn=np.zeros(n)
def grad(x,y):
return 4.*np.power(x,3)-4.*x*y
xn[0]=y
a=0.001 # step size
for i in range(1,n):
xn[i]=xn[i-1]-a*grad(xn[i-1],y)
plt.figure()
plt.plot(xn)
plt.plot([0,n],np.ones(2)*np.sqrt(y),'--')
plt.show()