吴恩达神经网络和深度学习第三周--浅层神经网络--白话理解
1、神经网络概览
最上面的是只有三个神经元的输出层和单个神经元的输入层的神经网络,下面是三个神经元的输入层,三个神经元的隐藏层以及一个神经元的输出层。最下面是神经网络的计算过程,包括前向传播,和反向传播。(详细过程后面会提)
2、神经网络表示和神经网络的输出
我认为这一小节中,这张图最有用,我们先以只输入一个样本来理解。这是一个单隐藏层的神经网络,也是我们编程作业中需要构造的神经网络。简单的介绍一下,x1,x2,x3为某个事物的三个特征值,我们通过一个四行三列的权重矩阵W1与三个特征相乘,为什么是四行三列,因为隐藏层有四个神经元,而输入层输入了三个特征。接着对应输出的就是一个四行一列的值,再加上一个四行一列的b1矩阵就是Z1,最后将Z1带入一个激活函数,的出来的矩阵A1就是该隐藏层各自对应的值,输出层跟前面的过程相似,只不过其权重矩阵W2是一行四列的矩阵,b2矩阵就是一行一列,W2与A1相乘得出的就是Z2(一行一列),通过将Z2激活函数计算出来的值就是最后所要输出的值A2,也就是y hat(预测值)。
3、多个例子的向量实现以及解释
首先上面我们是以只输入一个样本来理解下面,我们用m个样本来理解。
这是m个样本完成输入层到隐藏层的具体计算(向量化计算)
输入层–>隐藏层
隐藏层–>输出层
4、激活函数
课程中具体介绍了这四种激活函数
本周的编程作业中,用的是上面两种,tanh用在隐藏层,sigmoid用在输出层。tanh函数的值在-1到1之间,解决了sigmoid函数收敛变慢的问题,相对于sigmoid提高了收敛速度。而最后一层应用sigmoid函数是因为sigmoid的值在[0,1]之间,方便输出预测值。
5、为什么需要非线性激活函数
我将吴恩达的幻灯片稍微整理了一下,可以看到如果我们采用线性激活函数,a[1] = Z[1],a[2] = Z[2],使得有无隐藏层都是一样的结果(隐藏层无意义)。
下面是详细证明。
6、激活函数的导数
ReLU 和 Leaky ReLU激活函数
Sigmoid 函数求导过程
Tanh激活函数求导过程
7、神经网络下的梯度下降
下图的左边为向前传播(Forward propagation)的计算公式,右边为反向传播(Back propagation)的计算公式。
8、直观理解反向传播
这是课程中吴恩达的直观图理解。
这是我自己用神经网络图直观理解的图。
具体计算公式在上一节已给出。
9、随机初始化
该小节开始讨论的是当我们将W和b都初始化为0时导致的情况。
这是我列出的一种情况,输入一个样本且该样本真实值为0,所有的权重矩阵为0。最后会发现,经过一轮前向传播和反向传播后,权重矩阵还是全为0,所以为避免类似情况,我们需将权重矩阵随机初始化。
以下是初始化矩阵的方法:
// Random initialization
np.random.random((3,3))
array([[0.2131937 , 0.99476852, 0.12470957],
[0.57641785, 0.00268608, 0.13124108],
[0.0626813 , 0.73013671, 0.72995278]])
本人刚开始写博客不久,若有错误,欢迎指出!