1.2.2 第一位代表第一门课,第二位代表第几周,第三位代表第几次视频。编号和视频顺序对应,有些章节视频内容较少进行了省略。对内容进行简单的总结,而不是全面的记录视频的每一个细节,详细可见[1]。
1.神经网络和深度学习
1.3 浅层神经网络
1.3.1 神经网络概述
上一周已经学过了逻辑回归,LR可以认为是简单的一层NN。假设我们有一个两层NN:

前向传播过程:
- 第一层NN:
xW[1]b[1]⎭⎬⎫⟹z[1]=W[1]x+b[1]⟹a[1]=σ(z[1])
- 第二层NN:
a[1]=σ(z[1])W[2]b[2]⎭⎬⎫⟹z[2]=W[2]a[1]+b[2]⟹a[2]=σ(z[2])⟹L(a[2],y)
反向传播过程:
da[1]=dσ(z[1])dW[2]db[2]⎭⎬⎫⟸dz[2]=d(W[2]α[1]+b[2])⟸da[2]=dσ(z[2])⟸dL(a[2],y)
1.3.2 神经网络的表示

我们通过上角标代表第几层神经网络:
-
输入层:[x1; x2; x3],也可用a[0]表示,
a[0]=⎣⎢⎢⎢⎡a1[0]a2[0]a3[0]a4[0]⎦⎥⎥⎥⎤
-
第一层隐藏层:四个隐藏单元
a[1]=⎣⎢⎢⎢⎡a1[1]a2[1]a3[1]a4[1]⎦⎥⎥⎥⎤
-
输出层:y^=a[2]
-
第一层参数:(W[1],b[1]),W[1]∈R4×3 ,b[1]∈R4×1
-
第二层参数:(W[2],b[2]),W[2]∈R1×4 ,b[2]∈R1×1
1.3.3 计算一个神经网络的输出
每一个神经元即可以认为是一个逻辑回归模块。

隐藏层的神经元计算过程:
a1[1]=σ(z1[1]),z1[1]=W1[1]Tx+b1[1]
a2[1]=σ(z2[1]),z2[1]=W2[1]Tx+b2[1]
a3[1]=σ(z3[1]),z3[1]=W3[1]Tx+b3[1]
a4[1]=σ(z4[1]),z4[1]=W4[1]Tx+b4[1]
计算过程向量化:
a[n]=σ(z[n]),z[n]=W[n]x+b[n]
详细计算过程:
a[1]=⎣⎢⎢⎢⎡a1[1]a2[1]a3[1]a4[1]⎦⎥⎥⎥⎤=σ(z[1])
⎣⎢⎢⎢⎡z1[1]z2[1]z3[1]z4[1]⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡...W1[1]T......W2[1]T......W3[1]T......W4[1]T...⎦⎥⎥⎥⎤W[1]∗⎣⎡x1x2x3⎦⎤input+⎣⎢⎢⎢⎡b1[1]b2[1]b3[1]b4[1]⎦⎥⎥⎥⎤b[1]
1.3.4 多样本向量化
重复上述单样本的计算过程即可,可通过循环实现,当然向量化才是最佳操作。
- 设输入为X,有m个样本,上角标(i)代表第i个样本:
X=⎣⎢⎢⎡⋮x(1)⋮⋮x(2)⋮⋮⋯⋮⋮x(m)⋮⎦⎥⎥⎤
- 中间变量Z[1]:
Z[1]=⎣⎢⎢⎡⋮z[1](1)⋮⋮z[1](2)⋮⋮⋯⋮⋮z[1](m)⋮⎦⎥⎥⎤
- 隐藏层A[1]:
A[1]=⎣⎢⎢⎡⋮α[1](1)⋮⋮α[1](2)⋮⋮⋯⋮⋮α[1](m)⋮⎦⎥⎥⎤
- 前向传播公式
z[1](i)=W[1](i)x(i)+b[1]α[1](i)=σ(z[1](i))z[2](i)=W[2](i)α[1](i)+b[2]α[2](i)=σ(z[2](i))⎭⎪⎪⎬⎪⎪⎫⟹⎩⎪⎪⎪⎨⎪⎪⎪⎧Z[1]=W[1]X+bA[1]=σ(Z[1])z[2]=W[2]A[1]+b[2]A[2]=σ(z[2])
这些数据,每一列代表不同的样本,每一行代表NN中的不同结点。
1.3.6 **函数
1.sigmoid:
σ(z)=1+e−z1
缺点:
- 梯度消失,即饱和问题;
- 非均值,输出不是以0为中心
- 解析式还有幂运算
优点:
导数:
dzdg(z)=1+e−z1(1−1+e−z1)=g(z)(1−g(z))
- 当z = 10或z=−10 ; dzdg(z)≈0
- 当z= 0 , dzdg(z)=g(z)(1-g(z))=1/4
- 神经网络中a=g(z); g(z)′=dzdg(z)=a(1−a)
2.tanh:
tanh(z)=ez+e−zez−e−z
缺点:
优点:
导数:
dzdg(z)=1−(tanh(z))2
- 当z = 10或z=−10 dzdg(z)≈0
- 当z = 0, dzdg(z)=1-(0)=1
- 在神经网络中:a=g(z); g(z)′=dzdg(z)=(1−a2)
3.Relu:f(z)=max(0,z)
优点:
- 仅需一个阈值,复杂度低;
- 单侧抑制,网络稀疏表达,控制过拟合
- 非饱和性,有效解决梯度消失问题
缺点:
- 非0均值(zero-centered)
- 负神经元梯度死亡-导致参数梯度无法更新
导数:
g(z)′=⎩⎪⎨⎪⎧01undefinedif z < 0if z > 0if z = 0
4.Leaky Relu:f(z)=max(αz,z)
优点:
导数:
g(z)′=⎩⎪⎨⎪⎧α1undefinedif z < 0if z > 0if z = 0
5.Softmax:
σ(zj)=∑k=1Kezkezj
和sigmoid相似,只是多分类输出的时候使用。sigmoid用于二分类输出概率。
1.3.10 直观理解反向传播
回顾逻辑回归公式:
dw=dz⋅x,db=dzxwb⎭⎬⎫⟸dz=da⋅g′(z),g(z)=σ(z),dzdL=dadL⋅dzda,dzdg(z)=g′(z)z=wTx+b⟸da=dadL(a,y)=(−ylogα−(1−y)log(1−a))′=−ay+1−a1−ya=σ(z)⟸L(a,y)
神经网络可以认为是多层的LR:
公式3.44:
L=m1i∑nL(y^,y),dZ[2]=A[2]−Y,
dW[2]=m1dZ[2]A[1]T,db[2]=m1np.sum(dZ[2],axis=1,keepdims=True)
(n[1],m)dZ[1]=(n[1],m)W[2]TdZ[2]∗(n[1],m)g[1]′(Z[1])
dW[1]=m1dZ[1]xT
db[1]=m1np.sum(dZ[1],axis=1,keepdims=True)
1.3.11 随机初始化
如果你把权重或者参数都初始化为0,那么梯度下降将不会起作用。将会使得每一层的权重都是相等的,同步更新没有其他变化。

- 对W进行随机初始化,有效避免这个问题,b不需要初始化;
-
W一般初始化为很小的随机数,b不需要初始化;eg.
W[1]=np.random.randn(2,2)∗0.01,b[1]=np.zeros((2,1))
W[2]=np.random.randn(2,2)∗0.01,b[2]=0
- 初始化为较小的数是因为,sigmoid/tanh在参数很大时,梯度很小甚至消失;