浅(深)层神经网络-吴恩达学习笔记

目录

神经网络概览

前向传播的向量化

激活函数

反向传播向量化

随机初始化


 

神经网络概览

逻辑回归可以看成只有一个神经元的神经网络,浅层神经网络就是由多个神经元堆叠而成的。下图,浅层神经网络的神经元也是类似逻辑回归中的单元,计算z、a。

一些标记的约定:[1]右上角方括号里面的数字表示第几层(输入层是[0]),我们将下图的神经网络成为双层神经网络,由输入层、隐藏层、输出层组成,其中输入层不算做标准的神经网络层,故是双层。

前向传播的向量化

这边将m个样本堆叠,避免了显式的for♻️遍历样本。其中,n_i表示第i层的神经元数目,输入层是0,A^{[0]}表示输入层,m表示样本数。

\begin{aligned} Z^{[1]}_{(n_1, m)} &= W^{[1]}_{(n_1, l_0)}A^{[0]}_{(n_0, m)} + b^{[1]}_{(n_1,)} \\ A^{[1]}_{(n_1, m)} &= \sigma(Z^{[1]}_{(n_1, m)}) \\ Z^{[2]}_{(1, m)} &= W^{[2]}_{(1, n_1)}A^{[1]}_{(n_1, m)} + b^{[2]}_{(1,)} \\ A^{[2]}_{(1, m)} &= \sigma(Z^{[2]}_{(1, m)}) \\ \end{aligned}

激活函数

常见的传统激活函数

\begin{aligned} sigmoid: a &= \frac{1}{1 + e^{-z}} \\ tanh: a &= \frac{e^z - e^{-z}}{e^z + e^{-z}} \\ Relu: a &= max(0, z) \\ Leaky\ Relu: a &= max(\alpha z, z) \end{aligned}                   

导数 

     \begin{aligned} sigmoid &: a(1-a) \\ tanh &: 1-a^2 \\ Relu&: \left\{\begin{matrix} 1 & z > 0\\ 0 & z < 0 \end{matrix}\right. \\ Leky Relu&: \left\{\begin{matrix} 1 & z > 0\\ \alpha& z < 0 \end{matrix}\right. \end{aligned} 

反向传播向量化

\begin{aligned} Z^{[1]}_{(n_1, m)} &= W^{[1]}_{(n_1, n_0)}A^{[0]}_{(n_0, m)} + b^{[1]}_{(n_1,)} \\ A^{[1]}_{(n_1, m)} &= g(Z^{[1]}_{(l_1, m)}) \\ Z^{[2]}_{(1, m)} &= W^{[2]}_{(1,n_1)}A^{[1]}_{(n_1, m)} + b^{[2]}_{(1,)} \\ A^{[2]}_{(1, m)} &= \sigma(Z^{[2]}_{(1, m)}) \\ \end{aligned}

假设,输出层的激活函数是sigmoid函数,则我们可以非常容易的推出每一步的导数,可以借助矩阵形状来推一下。

\begin{aligned} dZ^{[2]}_{(1,m)} &= A^{[2]}_{(1,m)} - Y_{(1,m)} \\ dW^{[2]}_{(1,n_1)}&=dZ^{[2]}_{(1,m)}A^{[1]^T} \\ db^{[2]}_{(1,)} &= \frac{1}{m}np.sum(dZ^{[2]}_{(1,m)}, axis=1) \\ dZ^{[1]}_{(n_1,m)} &= W^{[2]^T}dZ^{[2]}_{(1, m)}*g^{[1]'}, \ * \ element \ product \\ dW^{[1]}_{(n_1, n_0)} &= dZ^{[1]}_{(n_1,m)}A^{[0]^T} \\ db^{[1]}_{(n_1,)} &= \frac{1}{m}np.sum(dZ^{[2]}_{(n_1,m)}, axis=1) \end{aligned}

一般化:

\begin{aligned} Z^{[1]}_{(n_1, m)} &= W^{[1]}_{(n_1, n_0)}A^{[0]}_{(n_0, m)} + b^{[1]}_{(n_1, m)} \\ A^{[1]}_{(n_1, m)} &= g^{[1]}(Z^{[1]}_{(n_1, m)}) \\ \vdots \\ Z^{[l]}_{(n_l, m)} &= W^{[l]}_{(n_l, n_{l-1})}A^{[l-1]}_{(n_{l-1}, m)} + b^{[l]}_{(n_l, m)} \\ A^{[l]}_{(n_l, m)} &= g^{[l]}(Z^{[l]}_{(n_l, m)}) \\ \vdots \\ Z^{[L]}_{(n_L m)} &= W^{[L]}_{(n_L, n_{L-1})}A^{[L-1]}_{(n_{L-1}, m)} + b^{[L]}_{(n_L, m)} \\ A^{[L]}_{(n_L, m)} &= g^{[L]}(Z^{[L]}_{(n_L, m)}) \\ \end{aligned}

假设,输出层的激活函数是sigmoid函数,则我们可以非常容易的推出每一步的导数,可以借助矩阵形状来推一下。

\begin{aligned} dZ^{[L]}_{(1,m)} &= A^{[L]}_{(1, m)} - Y_{(1,m)} \\ \vdots \\ dA^{[l]}_{(n_l, m)} &= W^{[l +1]T}dZ^{[l+1]}_{(n_{l+1,m})} \\ db^{[l]}_{(n_l,)} &= \frac{1}{m}np.sum(dZ^{[l]}_{(n_l, m)}, axis = 1) \\ dW^{[l]}_{(n_l, n_{l-1})} &= \frac{1}{m}dZ^{[l]}_{(n_l, m)}A^{[l-1]T} \\ dZ^{[l]}_{(n_l, m)} &= dA^{[l]} _{(n_l, m)}* g^{[l]'} (Z^{[l]}_{(n_l, m)}) = W^{[l+1]T}dZ^{[l + 1]}_{(n_{l+1}, m)} * g^{[l]'} (Z^{[l]}_{(n_l, m)}) \\ \end{aligned}

随机初始化

逻辑回归:可以将参数全部初始化为0,因为损失函数是凸函数,理论上无论初始化为什么值都能达到最优解。

但若神经网络中各参数数组全部初始化为0的话,再使用梯度下降算法,将会无效。

W^{[1]}全为0,则对于任何输入样本,a^{[1]}_1a^{[1]}_2都是一样的,第一层隐藏层单元的值全是一样的(因为该层所有的单元都是同样的初始化),也即第一层隐藏层的所有单元均在做完全一样的计算。在此基础上,做反向传播的时候,出于对称性dz^{[1]}_1dz^{[1]}_2也是相同的(这边需要假设后边的权重也是一样的例如W^{[2]}=[0,0]),多次迭代之后,第一层隐层所有单元依旧计算的是相同的函数,他们对输出单元的影响也一样。此时同一层有多个单元是毫无意义的,因为都在做相同的事

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值