反向传播回顾
背景
模型 | |
SVM损失/softmax损失 |
|
整体损失函数 | |
目标 | 找到使得L最小的W。为了找到W,需要求L在W方向上的梯度。 |
反向传播
反向传播是指在神经网络中,将上层节点的梯度值进行反向地传播,进而求解整个网络节点上的梯度,可以递归地调用链式法则,来计算图中每个变量的梯度。
整个网络的输出节点的梯度值为1。对于中间节点来说,它的输出部分会接收来自上层节点的梯度值。该节点中所有的输入都有对应的局部梯度函数。对于某个输入来说,上层节点梯度值*该输入的局部梯度函数值=该输入的梯度值。在编写代码时,forward()进行计算操作,并将梯度计算所需的中间值保存在内存中。backward()应用链式法则计算损失函数相对于该节点输入的梯度。
神经网络(Neural Networks)
神经网络是由简单函数构成的一组函数,这些函数以层次化的方式进行堆叠,从而形成一个更复杂的非线性函数。一个简单的三层神经网络(或称为双隐层神经网络)由两个全连接的隐层,如下图所示:
该网络的前向传播代码如下(代码来自视频):
# forward-pass of a 3-layer neural network:
f = lambda x: 1.0/(1.0+np.exp(-x)) # activation function (use sigmoid)
x = np.random.randn(3,1) # random input vector of three numbers (3*1)
h1 = f(np.dot(W1,x) + b1) # calculate first hidden layer activations (4*1)
h2 = f(np.dot(W2,h1) + b2) # calculate second hidden layer activations (4*1)
h3 = np.dot(W3,h2) + b3 # output neuron (1*1)
激活函数
这里列出神经网络中常用的非线性激活函数,如图所示。