2017-08-29 11 views
1

私はcs224nへの最初の割り当てでスタンフォードによって与えられた足場に基づいてSGDを実装しようとしています。実装はPythonで行われます。私はexpcostのない使用を持っていない私の目的のために確率勾配降下にexpcostを追加する目的は何ですか

def sgd(f, x0, step, iterations, postprocessing=None, useSaved=False, 
    PRINT_EVERY=10): 
""" Stochastic Gradient Descent 

Implement the stochastic gradient descent method in this function. 

Arguments: 
f -- the function to optimize, it should take a single 
    argument and yield two outputs, a cost and the gradient 
    with respect to the arguments 
x0 -- the initial point to start SGD from 
step -- the step size for SGD 
iterations -- total iterations to run SGD for 
postprocessing -- postprocessing function for the parameters 
        if necessary. In the case of word2vec we will need to 
        normalize the word vectors to have unit length. 
PRINT_EVERY -- specifies how many iterations to output loss 

Return: 
x -- the parameter value after SGD finishes 
""" 

# Anneal learning rate every several iterations 
ANNEAL_EVERY = 20000 

if useSaved: 
    start_iter, oldx, state = load_saved_params() 
    if start_iter > 0: 
     x0 = oldx 
     step *= 0.5 ** (start_iter/ANNEAL_EVERY) 

    if state: 
     random.setstate(state) 
else: 
    start_iter = 0 

x = x0 

if not postprocessing: 
    postprocessing = lambda x: x 

expcost = None ###################################################### 

for iter in xrange(start_iter + 1, iterations + 1): 
    # Don't forget to apply the postprocessing after every iteration! 
    # You might want to print the progress every few iterations. 

    cost = None 

    ### END YOUR CODE 

    if iter % PRINT_EVERY == 0: 
     if not expcost: 
      expcost = cost 
     else: 
      expcost = .95 * expcost + .05 * cost ######################## 
     print "iter %d: %f" % (iter, expcost) 

    if iter % SAVE_PARAMS_EVERY == 0 and useSaved: 
     save_params(iter, x) 

    if iter % ANNEAL_EVERY == 0: 
     step *= 0.5 

return x 

def load_saved_params(): 
'''A helper function that loads previously saved parameters and resets 
iteration start.''' 
return st, params, state #st = starting iteration 

def save_params(iter, params): 
'''saves the parameters''' 

を、現在主な機能(私は複数のハッシュ記号と関心の文が続いています):次のように足場があります。コード内のexpcostの目的は何か。どのような状況で使用される可能性がありますか?なぜコスト関数によって計算されたコストを変更するのに使われますか?

答えて

1

気付いた場合は、expcostは費用の印刷にのみ使用されます。モデルの改善にもかかわらず、バッチ間で顕著に飛躍することができるので、コスト関数をスムーズにする方法です。

+1

完全に意味があります。ありがとうございました。私が明日の答えを持っていなければ、他のより密かな使用を指摘しても、答えを受け入れることができない – Nitin

関連する問題