1. 程式人生 > >CS224n assignment1 Q2 Neural Network Basics

CS224n assignment1 Q2 Neural Network Basics

(a) 推導sigmoid的導數公式
y = 1/(1+exp(-x))

Answer:
y' = y*(1-y)
sigmoid的導數形式是十分簡潔的,這也是sigmoid函式使用廣泛的一個原因。


(b) 當使用交叉熵作為loss function時,推導其梯度公式,輸入的y是一個one-hot向量

Answer:
當我們有一個分值向量f,損失函式對這個分值向量求導的結果等於向量裡每個類別對應的概率值,但除了那個正確類別的概率值,它要再減去1。例如,我們的概率向量為p = [0.2, 0.3, 0.5],第二類為正確的類別,那麼的分值梯度就為df = [0.2, -0.7, 0.5]。
也是一個很重要的結論,在cs231n的作業已多次用到。


(c) 求一個單隱藏層的神經網路對於輸入x的梯度
即 h=sigmoid(xW1+b1),y=softmax(hW2+b2)求y關於x的梯度

Answer:
令z2 = hw2+b2,z1=xW1+b1
則可以用鏈式法則求解。


(d) 求上題中的網路中有多少引數
輸入為Dx維,輸出為Dy維,隱藏單元有H個

Answer:
輸入為Dx維,channel為1,隱藏層有H個單元,所以W1有DxH個引數,b1有H個引數
同理,W2有D
Dy個引數,b2有Dy個引數。


(e)sigmoid及其梯度求解

def sigmoid(x):
    """
    Compute the sigmoid function for the input here.

    Arguments:
    x -- A scalar or numpy array.

    Return:
    s -- sigmoid(x)
    """
    s = 1/(1+np.exp(-x))
    return s


def sigmoid_grad(s):
    """
    Compute the gradient for the sigmoid function here. Note that
    for this implementation, the input s should be the sigmoid
    function value of your original input x.

    Arguments:
    s -- A scalar or numpy array.

    Return:
    ds -- Your computed gradient.
    """
    ds = s*(1-s)
    return ds