反向传播解析

对于单个样本计算一次梯度:

                                            反向传播解析

                                       反向传播解析

在逻辑回归中,我们要做的就是修改参数w和b,来减少损失函数。因为我们要计算关于损失函数的导数,反向传播时,首先计算损失函数对于da的导数。

                                             da = dL/da = -y/a+(1-y)/(1-a) 。

继续往回,算出损失函数对z的导数:

                                           dz = dL/dz = (dL/da)*(da/dz) = da*a(1-a) = a-y

 其中 da/dz=a(1-a) 注:仅对于sigmoid函数成立。

现在可以计算当前L层的dw,db。

小结:

(1)以上为单个隐藏层时的梯度计算,扩展到多个隐藏层,只需继续往回走。

(2)可以注意到,每次往回计算(L-1)层的导数时,都会用到(L)层的导数——链式求导法则。

m个训练样例计算一次梯度:

                             反向传播解析

for循环遍历训练集 同时计算相应的每个 训练样本的微分并把它们加起来 
假设你只有 两个特征 所以n等于2 否则你需要对dw_1 dw_2 dw_3等等 
最终对所有的m个训练样本 都进行这个计算后 还需要 除以m 因为我们是在计算平均值
做完所有这些计算后 你已经计算了 代价函数J 对各个参数w_1 w_2 (即每一层的W,W包含w_1,w_2)和b的导数 。

 所以完成所有 这些计算后实现一步 梯度下降来更新w_1 即w_1减去学习率 乘上dw_1 而w_2更新为w_2减去 学习率乘上dw_2 
所以幻灯片上的所有东西 只实现了一步梯度下降,即一次迭代。

因此你需要 重复以上内容很多次 以完成多次梯度下降 
 如果按照这里的方法实现的话,逻辑回归时 你需要两个for循环 第一个for循环 是一个小循环用于遍历m个训练样本 第二个for循环是一个 遍历所有特征的for循环 这个例子中我们只有2个特征 所以n等于2并且n_x等于2 但如果你有更多特征 你需要编写dw_1 dw_2 以及类似地计算dw_3等等 直到dw_n 所以看来你 需要一个for循环遍历 
矢量化技术 它可以帮助你的代码摆脱for循环

神经网络流程:

反向传播解析

m表示训练样例的个数。

两层(一个隐藏层+一个输出层)神经网络实现细节:

                                 反向传播解析

 前向传播:

                         反向传播解析

计算Loss函数:

                     反向传播解析

反向计算梯度: 

                           反向传播解析