Lec5 Backpropagation and Neural Networks反向传播与神经网络
1. 反向传播Backpropagation
解析梯度与数值梯度
用计算图表示函数,注意节点。有时候表达式过于复杂以致于不想用微积分计算出表达式型的梯度,将复杂的表达式分解成一些节点计算,这样就可以使用一些很简单的值计算出梯度。
反向传播
使用链式法则,将上游梯度和本地梯度相乘,计算节点的梯度。 接收从上游传回来的梯度值乘以本地的梯度值,再往直接相连的下游节点传递,不考虑直接相连节点之外的东西。问题在于求解这个本地梯度。
同样也可以将一些小节点聚合起来组成一个相对大一点的复杂节点,只要你能够写出这个复杂节点的本地梯度。
加法门将upstream梯度平均回传;max们将upstream梯度回传为一个变量为1另一个变量为0;而乘法门( x∗y x ∗ y )基本上是一个梯度交换作用, x x 的梯度值是,反之,也可以理解成一个尺度缩放器,对这一个分支根据另一个分支的值对其进行缩放。
计算某个梯度有问题的时候就考虑一下计算图,然后按节点进行计算。
向量化计算
Jacobian matrix(?)会是一个对角矩阵。 向量的梯度和原向量一样大小,其中每个元素的梯度代表着这个元素对最终函数影响的大小。一旦计算出梯度后要检查是不是和原向量一样大小。
前向后向模块化
做成forward()/backward() API
正向计算的结果需要保存下来,用于反向计算。
2.神经网络
是一个非线性函数。虽然有多个线性函数堆叠但一定有一个非线性函数,所以带来了非线性性质。
Relu函数 正区间内的线性函数
神经网络层数的叫法:
向量计算的高效性体现在在一层隐藏层里面我们通过一次矩阵乘法来得到所有神经元的值。
一个简单基本的神经网络结构示意: