Overflow in python
オーバーフローのエラーです。
GDの中でxを更新しているときにderivで発生していると思われますが解決策がわかりません。よろしくお願いします。
OverflowError: (34, 'Result too large')
# y = x^4 - x^3
def function(x):
return x**4 - 2 * (x**3) + 1
# minimum: y = -11/16, x = 3/2
def deriv(x):
return 4 * (x**3) - 6 * (x**2)
def GD(deriv, init, eta, iter=100):
'''
:param deriv: derivative of the function you want to optimize
:param init: start point, initial value
:param eta: leaning rate, step size
:return: history
'''
eps = 1e-5
x = init
x_history = [init]
for i in range(iter):
x_ = x - eta * deriv(x)
if abs(x - x_) < eps: # convergence condition
break
x = x_
x_history.append(x)
return np.array(x_history)
etas = [ 0.1, 0.2, 0.4, 0.5]
'''
We check the behavior of Gradient Descent compared with the different eta
'''
for i, eta in enumerate(etas):
tracks = GD(deriv, 2.0, eta)
plt.subplot(2, 2, (i+1))
plt.title("eta: " + str(eta) + ", iter: " + str(len(tracks)))
x = np.arange(-0.3, 1.0, 0.01)
y = function(x)
plt.plot(x, y, linestyle="-", c="black")
plt.plot(tracks, function(tracks), 'x', c="r")
#plt.tight_layout()
plt.show()