我正在研究优化问题。我的函数是这样的:C=-σ(wx+b)+σ(wθz+b)
其中σ
是一个sigmoid函数。我在这里做的是找到w
和b
的最佳值,以便我的费用C
可以保持最接近零的最小值。
我假设x,θ和z为常数值,基于梯度算法,首先初始化w和b并计算成本,然后从反向传播更新w,b以获得更小的成本值(成本可以为负值) ,但我认为只有接近0才重要。)
我很困惑,因为我不断增加成本,我认为渐变有些不对劲。任何人都可以提供一些建议吗?
import numpy as np
import matplotlib.pyplot as plt
def sigmoid_prime(x):
""" sigmoid derivative """
return x * (1.0-x)
def sigmoid(x):
return 1/(1 + np.exp(-x))
cost_list = []
x = 1
z = 7.5
w = 0.001
b = 0.01
theta = 0.002
lrt = 0.01
for i in range(50):
y = sigmoid(w*x+b)
fake = sigmoid(w*theta*z + b)
cost = -y+fake
#calculate gradient descent to update w,b
dw = - sigmoid_prime(y) * x + sigmoid_prime(fake) * theta*z
db = - sigmoid_prime(y) + sigmoid_prime(fake)
w += lrt * dw
b += lrt * db
cost_list.append(cost)
plt.plot(cost_list)
plt.show()