学习内容
2.7 计算图
1.神经网络的计算由前向传播计算神经网络的输出,紧接着由反向传播计算梯度或导数。计算图解释了为什么用这种形式组织计算。如下是一个用于计算输出的计算图。
2.8 计算图求导数
1.如下是一个求导数的计算图,计算过程从右往左(这也是最高效的方式去计算导数)。
*在代码中,我们用dvar表示变量var的导数
*从J求出dv的过程,我们称为反向传播中的一步
2.9 逻辑回归梯度下降
1.如图是计算单一样本的损失函数的计算过程。
2.如图是计算单一样本损失函数的求导过程。我们用反向传播的方式,一步步计算出需要调整的参数w和b的导数。
2.10 m个样本上的梯度下降
1.
2.
2.11 向量化 vectorization
1.内置函数的向量化计算往往会比for循环快上几百倍,因为它能使python充分利用并行计算。CPU和GPU内部都有SIMD(单独指令多维数据)指令,但GPU往往能对并行计算处理的更好,而我们的内置函数的向量化计算往往就会调取这些SIMD指令去加速代码。
2.12 更多向量化示例
1.
2.如图是常见的内置函数(进行并行化计算)API
2.13 向量化逻辑回归
1.我们通过Z=np.dot(W.T,X)+b
得到了中间变量Z,通过A=sigmoid(Z)
并行计算得到预测值A=[a1,a2,...,am]
。
2.14 向量化逻辑回归的梯度输出
1.
2.
2.15 python中的广播
1.常见广播机制
2.16 关于numpy/python向量的提示
1.一般我们使用(m,1)
,而不使用(m,)
,避免造成错误。
2.可以用reshape
将(m,)
转化为(m,1)
。
3.可以用断言语句帮助确定
2.18 逻辑回归损失函数的解释
1.我们通过sigmoid函数得到的概率值是在给定x的情况下,预测y=1的概率。如果要预测y=0的概率,那么预测表达式为p(0|x)=1-y^hat
。如果将y=1和y=0的预测整合起来,得到在给定x的情况下,预测y为?
的概率,那么表达式为p(y|x)=y_hat^y*(1-y_hat)^(1-y)
。
2.由于log函数是单调递增的,因此可以将p(y|x)
取对数,保持原幅度,得到log p(y|x) =-L(a,y)
。
3.求在m个样本上面的cost function,我们可以通过以下的思路。
*首先,考虑如何使p(label in training set)
最大p(label in training set)=p(y_1|x_1)*p(y_2|x_2)*...p(y_m|x_m)
。
*而求p相乘,可以考虑为求log p
相加,转化为log p(...)=log p(y_1|x_1)+ log p(y_2|x_2)+...log p(y_m|x_m)
,也即我们loss function的负值相加,使其最大。
*但考虑需要使用梯度下降法,因此我们需要求最小值,去除loss function的负号,从而得到cost function为各loss function的和。
3.1 神经网络概览
1.这节的知识我认为讲解的没有machine learning中的那节的好,所以我的笔记是用machine learning中的,但我也标注一下这节内容中相关的需要注意的知识点。
*上标[m]对应第几层神经网络,(i)表示第几个训练样本
3.2 神经网络的表现形式
1.
3.3 计算神经网络的输出(单样本)
1.在每一个节点中进行的计算
2.
3.
3.4 多样本向量化
1.如图是for循环的实现
2.
*我们的输出和输入,在水平方向上,是不同的训练样本按照列堆叠;在垂直方向上,是不同的节点按照行堆叠(神经网络将神经元堆叠起来,按照行堆叠)。
3.5 向量化的解释
1.
*W是同一层的节点的按行堆叠(每一行都是w列向量的转置)
*b是同一层节点的按行堆叠(广播机制计算)
2.总结
*输入输出,样本按列堆叠,每行为对应的节点
*参数w、b等,按行堆叠,每行是对应节点的参数