2016-09-25 1 views
0

필자는 내 비용 f (x, y) 및 그래디언트 dx와 dy를 계산할 때 사용하는 특정 분석 그래디언트가 있습니다. 실행되지만 그래디언트 디센트가 손상되었는지 알 수 없습니다. 내 부분 파생 상품 x와 y를 그릴 필요가 있습니까?코드 바닐라 그래디언트 하강

import math 

gamma = 0.00001 # learning rate 
iterations = 10000 #steps 
theta = np.array([0,5]) #starting value 
thetas = [] 
costs = [] 

# calculate cost of any point 
def cost(theta): 
    x = theta[0] 
    y = theta[1] 
    return 100*x*math.exp(-0.5*x*x+0.5*x-0.5*y*y-y+math.pi) 

def gradient(theta): 
    x = theta[0] 
    y = theta[1] 
    dx = 100*math.exp(-0.5*x*x+0.5*x-0.0035*y*y-y+math.pi)*(1+x*(-x + 0.5)) 
    dy = 100*x*math.exp(-0.5*x*x+0.5*x-0.05*y*y-y+math.pi)*(-y-1) 
    gradients = np.array([dx,dy]) 
    return gradients 

#for 2 features 
for step in range(iterations): 
    theta = theta - gamma*gradient(theta) 
    value = cost(theta) 
    thetas.append(theta) 
    costs.append(value) 

thetas = np.array(thetas) 
X = thetas[:,0] 
Y = thetas[:,1] 
Z = np.array(costs) 

iterations = [num for num in range(iterations)] 

plt.plot(Z) 
plt.xlabel("num. iteration") 
plt.ylabel("cost") 
+0

최소값을 찾으려는 것처럼 보입니다.하지만이 함수는 x -> neg inf와 같이 모든 행 y = c 아래에서 제한이 없습니다. –

답변

2

나는 강력하게 분석 그라데이션 먼저 숫자 그라데이션에 대해 그것을 평가하여 correcly 작동하는지 여부를 확인할 것을 권장합니다. .e 약간 작은 h를 위해 f '(x) = (f (x + h) - f (x))/h를 확인하십시오.

그런 다음 x 또는 y가 감소해야하는 지점을 선택하고 그래디언트 함수 출력의 부호를 확인하여 업데이트가 실제로 올바른 방향인지 확인하십시오.

물론 목표가 실제로 최소화와 비교되는지 확인하십시오.