/ 人工智能  

【深度学习笔记(一)】神经网络与深度学习

如果没有意外的话,我应该有学上了!

所以我又准备开始更新博客了。

这个深度学习专项是杨神推荐的,链接为https://www.coursera.org/specializations/deep-learning(可能需要挂梯子)。吴恩达老师的英语非常通俗易懂啊,基本上开着英文字幕就能听,不需要中文字幕😜。

这个专项课程一共五门,包括

  • Neural Networks and Deep Learning(神经网络与深度学习)
  • Improving Deep Neural Networks: Hyperparameter Tuning, Regularization and Optimization(改进深度神经网络:超参数、正则化和优化)
  • Structuring Machine Learning Projects(构建机器学习项目)
  • Convolution Neural Networks(卷积神经网络)
  • Sequence Model(序列模型)

目前我还在学第四门,我准备把每门课的内容在博客上梳理一下。

——3月25日

第四门学完啦,第五门第一周也学完啦。又来更新了!

——4月5日

Neural Networks and Deep Learning 学习笔记

第一门课的主体框架

  • Week 1: Introduction
  • Week 2: Programming
  • Week 3: Singal hidden layer NN
  • Week 4: Deep NN

Week 1

Welcome to the Deep learning Specilization主要就是五门课程的总体介绍,这里就不放了。

Introduction to Deep Learning

这个section主要介绍了神经网络和深度学习最基础的内容,并分析了为何深度学习会在当今take-off。

1. Neural Network

neural

2. Supervised learning with neural network

  • 监督学习:输入为x,输出为y。(即有标签)
  • 分不同类型神经网络的应用范围
    • 标准神经网络(Standard NN):房地产,网上广告
    • 卷积神经网络(Convolution NN, CNN):图像标语
    • 循环神经网络(Recurrent NN,RNN):语音识别,翻译
    • Hybrid:自动驾驶
  • 监督学习的对象主要有两种
    • Structured Data:类似于数据表
    • Unstructured Data:如音频、图像、文本

3. Why DL take-off? (Why now?)

Scale drives deep learning progress. (规模驱动深度学习的发展)

  • Data(近几年来数据收集量越来越大)
    • Large NN 需要大的网络、大量的数据
  • Computation
  • Algorithm

重要的循环

循环

Week 2

Logistic Regression as a NN

在这个section中,讲述的是Logistic回归的相关内容,主要包括Logistic回归的正向(cost function)和反向传播(梯度下降最小化cost function),并对Python、numpy、jupyter notebook的使用做了讲解。

1. Binary Classification

  • 二元分类(Binary Classification): xyx\to y
    • 例如处理一幅64×64像素猫的图像时,先将其分成RGB三个通道,再将其unroll成一个列向量,其维数为64×64×3=1228864 \times 64\times 3=12288。此时该图像即Binary Classification中的输入xx。标记(label)用于分类是否为猫,即为yy
  • 符号说明:
    • One training example: (x,y), xRnx,y{0,1}(x,y),\ x\in\mathbb{R}^{n_x},y\in\{0,1\}
    • mm training example: {(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))}\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots,(x^{(m)},y^{(m)})\}
      • 其中mm可以取为mtrain,mtestm_{\text{train}},m_{\text{test}}分别表示训练样本的个数和测试样本的数量
    • 训练集:X=[x(1)x(2)x(m)],XRnx×mX=\begin{bmatrix}|&|&\vdots&|\\ x^{(1)}&x^{(2)}&\cdots&x^{(m)}\\ |&|&\vdots&|\end{bmatrix}, X\in\mathbb{R}^{n_x\times m},是一个(nx,m)(n_x,m)维的矩阵。
    • 标签:Y=[y(1),y(2),,y(m)],YR1×mY=[y^{(1)},y^{(2)},\cdots,y^{(m)}], Y\in \mathbb{R}^{1\times m},是一个(1,m)(1,m)维的矩阵。

2. Logistic Regression & cost function

  1. 单个样本Logistic Regression的主要流程

    Given xRnxx\in\mathbb{R}^{n_x}, want y^=P(y=1x),0y^1\hat y=P(y=1|x),0\le \hat y \le 1(即希望y^\hat yy=1y=1的一个良好估计)

    Parameter: wRnx,bRw\in \mathbb{R}^{n_x},b\in\mathbb{R}

    Output: y^=wT+b\hat y=w^T+b (linear regression)

    y^=σ[wT+b]\hat y=\sigma[w^T+b](logistic regression,其中σ[]\sigma[\bullet]是sigmoid function)

    此外也可以表示为y^=ΘTx(x0=1,xRnx+1)\hat y=\Theta^Tx\quad(x_0=1, x\in\mathbb{R}^{n_x+1})

    其中ΘT=[θ0θ1θnx]bw\Theta^T=\begin{bmatrix}\theta_0\\ \theta_1\\ \vdots\\ \theta_{n_x}\end{bmatrix}\begin{matrix}\to b\\\rmoustache\quad\\ \to w\\\lmoustache\quad \end{matrix}

  2. sigmoid function

    sigmoid_function

    σ(z)=11ez\sigma(z)=\frac{1}{1-e^{-z}}

    其中,当zz\to -\infty时,11+=0\frac{1}{1+\infty}=0;当zz\to \infty时,11+0=1\frac{1}{1+0}=1

  3. 对于m个样本的Logistic regression

    y^=σ(wTx+b)\hat y=\sigma(w^Tx+b), where σ(z(i))=11+ez(i)\sigma(z^{(i)})=\frac{1}{1+e^{-z^{(i)}}}

    Given {(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))}\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots,(x^{(m)},y^{(m)})\}, want y^(i)=y(i)\hat y^{(i)}=y^{(i)}

    其中,上标(i)^{(i)}表示第ii个training example。

  4. Loss Function(损失函数,针对单个样本来说)

    L(y^,y)=(ylogy^+(1y)log(1y^))\mathscr{L}(\hat y, y)=-(y\log \hat y+ (1-y)\log(1-\hat y))

    • y=1y=1时,希望y^\hat y越大越好
    • y=0y=0时,希望y^\hat y越小越好
  5. Cost function(代价函数,针对全体样本来说,是cost of parameter)

    J(w,b)=1mi=1mL(y^(i),y(i))=1mi=1m(y(i)logy^(i)+(1y(i))log(1y^(i)))\begin{aligned} J(w,b)=&\frac 1m\sum_{i=1}^m\mathscr{L}(\hat y^{(i)}, y^{(i)})\\ =&-\frac 1m\sum_{i=1}^m(y^{(i)}\log \hat y^{(i)}+ (1-y^{(i)})\log(1-\hat y^{(i)})) \end{aligned}

3. Gradient Descent

  1. Gradient Descent基础

    gradient_descent

    • 梯度下降实际上就是沿着w,bw,b梯度(简记作J(w,b)w=dw,J(w,b)b=db\frac{\partial J(w,b)}{\partial w}=dw,\frac{\partial J(w,b)}{\partial b}=db)下降方向,即
      Repeat{
        w:=wαdww:=w-\alpha dw
        b:=bαdbb:=b-\alpha db
      }
      • 其中α\alpha是learning rate。
    • 计算J(w,b)w=dw,J(w,b)b=db\frac{\partial J(w,b)}{\partial w}=dw,\frac{\partial J(w,b)}{\partial b}=db的方式是利用计算图(Computation Graph),其实就是多元微分的内容,即“连线相乘,分线相加,一元全导,多元偏导”。但吴恩达也说在实际应用中,我们只需要考虑正向传播,而不需要考虑反向传播,框架可以自己处理反向传播。
  2. Logistic Regression Gradient descent on one example

    LogisticL Regression的步骤主要包括以下三步:

    • z=wTx+bz=w^Tx+b
    • y^=a=σ(z)\hat y=a=\sigma(z)
    • L(a,y)=(yloga+(1y)log(1a))\mathscr{L}(a,y)=-(y\log a+(1-y)\log (1-a))

    Logistic Regression Gradient descent

    计算得

    {Lw1=Laazzw1(ya+1y1a)a(1a)x1=(ay)x1Lw2=(ay)x2Lb=ay\left\{\begin{aligned} \frac{\partial \mathscr{L}}{\partial w_1}=&\frac{\partial \mathscr{L}}{\partial a}\cdot\frac az\cdot\frac{\partial z}{\partial w_1}\left(-\frac ya+\frac{1-y}{1-a}\right)\cdot a(1-a)\cdot x_1=(a-y)x_1\\ \frac{\partial \mathscr{L}}{\partial w_2}=&(a-y)x_2\\ \frac{\partial \mathscr{L}}{\partial b}=&a-y \end{aligned}\right.

    {w1:=w1αLw1w2:=w2αLw2b:=bαLb\Rightarrow \left\{\begin{aligned} w_1:=&w_1-\alpha \frac{\partial \mathscr{L}}{\partial w_1}\\ w_2:=&w_2-\alpha \frac{\partial \mathscr{L}}{\partial w_2}\\ b:=&b-\alpha \frac{\partial \mathscr{L}}{\partial b} \end{aligned}\right.

    其中σ(z)=11+ez\sigma(z)=\frac{1}{1+e^{-z}}的导数推导如下

    (11+ez)=(1+ez)2ez=ez(1+ez)2=ez+111+ez11+ez=(111+ez)11+ez=(1σ(z))σ(z)\begin{aligned} \left(\frac{1}{1+e^{-z}}\right)'&=\left(1+e^{-z}\right)^{-2}e^{-z}\\ &=\frac{e^{-z}}{(1+e^{-z})^2}\\ &=\frac{e^{-z}+1-1}{1+e^{-z}}\cdot \frac{1}{1+e^{-z}}\\ &=\left(1-\frac{1}{1+e^{-z}}\right)\cdot\frac{1}{1+e^{-z}}\\ &=(1-\sigma(z))\sigma(z) \end{aligned}

  3. Gradient descent on mm example

    • Cost function

      J(ω,b)=1mi=1mL(ai,y)a(i)=y^(i)=σ(z)=σ(ωx(i)+b)w1J(w,b)=1mi=1mw1L(a(i),y)\begin{gathered} J(\omega, b)=\frac{1}{m} \sum_{i=1}^{m} \mathcal{L}\left(a^{i}, y\right)\\ a^{(i)}=\hat{y}^{(i)}=\sigma(z)=\sigma\left(\omega^{\top} x^{(i)}+b\right)\\ \frac{\partial}{\partial w_{1}} J(w, b)= \frac{1}{m} \sum_{i=1}^{m} \frac{\partial}{\partial w_{1}} \mathcal{L}\left(a^{(i)}, y\right)\end{gathered}

    • 算法

      Gradient_descent_on_m_example

      可以注意到在上述算法中存在两个显式的for-loop,这对于加快运算是非常不利的。

    • 解决显式for-loop的方法:Vectorization(向量化)

Python and Vectorization

1. Vectorization

Whenever possible, avoid explicit for-loops.

  1. 举例

    • 【Example·01】z=wTx+bz=w^Tx+b,其中ww是一个列向量,xx也是一个列向量。

      ​ Vectorization:z = np.dot(w, x) + b

    • 【Example·02】u=Avu=Av

      ​ non-Vectorization: ui=jAijvju_i=\sum_jA_{ij}v_j(存在两重for-loop)

      ​ Vectorization: u = np.dot(A, v)

    • 【Example·03】

      v=[v1v2vn]u=[ev1ev2evn]v=\begin{bmatrix}v_1\\ v_2\\ \vdots\\ v_n\end{bmatrix}\Rightarrow u=\begin{bmatrix}e^{v_1}\\ e^{v_2}\\ \vdots\\ e^{v_n}\end{bmatrix}

      Vectorization: u = np.exp(v)

    • 另外还可以使用np.log(v), np.abs(v), np.maximum(v, 0), v ** 2, 1 / v

  2. 针对logistic regression derivatives的改进(改进第二个for-loop)

    J=0J = 0, dw=np.zeros([nx,1])\boldsymbol{dw = \mathtt{np.zeros([n_x, 1])}}, db=0db = 0
    For i=0i=0 to mm
      z(i)=wTx(i)+bz^{(i)}=w^Tx^{(i)}+b
      ai=σ(z(i))a^{i}=\sigma(z^{(i)})
      J+=[y(i)loga(i)+(1y(i))log(1a(i))]J_+=-[y^{(i)}\log a^{(i)}+ (1-y^{(i)})\log(1-a^{(i)})]
      dz(i)=a(i)y(i)dz^{(i)}=a^{(i)}-y^{(i)}
      dw+=x(i)dz(i)\boldsymbol{dw+=x^{(i)}dz^{(i)}}
      db+=dz(i)db+=dz^{(i)}
    J/=mJ/=m; dw/=m\boldsymbol{dw/=m}; db/=mdb/=m;

    注意其中加粗部分即为利用vectorization的部分。

2. Vectorizing Logistic Regression

  • 各参数的矩阵表示:

    X=[x(1)x(2)x(m)],XRnx×mZ=[z(1),z(2),,z(m)]1×m=wTX+[b,b,,b]1×m=[wTx(1)+b,wTx(2)+b,,wTx(m)+b]1×m=np.dot(w.T,X)+bdZ=[dz(1),dz(2),,dz(m)]1×m=[a(1)z(1),a(2)z(2),,a(m)z(m)]1×m=AYdb=1mi=1mdz(i)=np.sum(dZ)dw=1mXdZT=[x(1)x(2)x(m)][dz(1)dz(m)]\begin{aligned} X=&\begin{bmatrix}|&|&\vdots&|\\ x^{(1)}&x^{(2)}&\cdots&x^{(m)}\\ |&|&\vdots&|\end{bmatrix}, X\in\mathbb{R}^{n_x\times m}\\ Z=&[z^{(1)},z^{(2)},\cdots, z^{(m)}]_{1\times m}\\ =&w^TX+[b, b, \cdots, b]_{1\times m}=[w^Tx^{(1)}+b, w^Tx^{(2)}+b, \cdots, w^Tx^{(m)}+b]_{1\times m}\\ =& \mathtt{np.dot(w.T,X)+b}\\ dZ=&[dz^{(1)},dz^{(2)},\cdots, dz^{(m)}]_{1\times m}=[a^{(1)}-z^{(1)},a^{(2)}-z^{(2)},\cdots, a^{(m)}-z^{(m)}]_{1\times m}\\ =&A-Y\\ db=& \frac 1m\sum_{i=1}^mdz^{(i)}=\mathtt{np.sum(dZ)}\\ dw=& \frac 1m XdZ^{T}=\begin{bmatrix}|&|&\vdots&|\\ x^{(1)}&x^{(2)}&\cdots&x^{(m)}\\ |&|&\vdots&|\end{bmatrix}\begin{bmatrix}dz^{(1)}\\\vdots\\dz^{(m)}\end{bmatrix} \end{aligned}

  • 算法:

    Z=wTX+b=np.dot(w.T,X)+bA=σ(Z)dZ=AYdw=1mXdZTdb=1mnp.sum(dZ)w=wαdwb=bαdb\begin{aligned} Z=&w^TX+b\\ =&\mathtt{np.dot(w.T,X)+b}\\ A=&\sigma(Z)\\ dZ=&A-Y\\ dw=&\frac 1m XdZ^T\\ db=&\frac 1m \mathtt{np.sum(dZ)}\\ w=& w-\alpha dw\\ b=& b-\alpha db \end{aligned}

    即使对参数进行了vectorization,for-loop仍然是需要的。

3. Broadcasting in Python

Broadcasting

4. Notes & Tips on Python/numpy

note


Week 3

Shallow NN

NN short for Neural Network.

本section主要介绍单层的神经网络(Shallow NN),介绍了Shallow NN的正向传播(forward prop)和反向传播(Back prop)过程,并讲解了常见的激活函数(Activation Function)和随机初始化(Random Initialization)的相关内容。

1. NN overview

  1. NN的计算

    Shallow_NN_overview

  2. NN的表示

    NN_representation

    如图所示是一个2层的神经网络,因为输入层不计入。

    • 用上标[i]^{[i]}表示第ii
    • 每个矩阵的维数见图中。
    • 注意到我们把输入层xx也表示为a[0]a^{[0]}

2. Computing a NN’s Output & Vectorizing

  1. 取其中一个unit计算结果,左图显示了只有一个hidden layer,且只有一个unit的情况。

    Logistic_nn

    如左图所示,在神经元中的计算主要包括线性的z=wTx+bz=w^Tx+b和非线性激活函数a=σ(z)a=\sigma(z)两部分,最后输出的预测结果y^=a\hat y =a。从右图可以看到hidden layer的每一个都是这unit样两步。

    • 矩阵表示

      σ(z[1])=σ([w1[1]Tw2[1]Tw3[1]Tw4[1]T]4×3[x1x2x3]3×1+[b1[1]b2[1]b3[1]b4[1]]4×1)=σ([w1[1]Tx+b1[1]w2[1]Tx+b2[1]w3[1]Tx+b3[1]w4[1]Tx+b4[1]]4×1)=σ([z1[1]z2[1]z3[1]z4[1]])\begin{aligned} \sigma(z^{[1]})=&\sigma\left(\begin{bmatrix}-& w_1^{[1]T}&-\\-& w_2^{[1]T}&-\\-& w_3^{[1]T}&-\\-& w_4^{[1]T}&-\\\end{bmatrix}_{4\times 3}\begin{bmatrix}x_1\\ x_2\\ x_3\end{bmatrix}_{3\times 1}+\begin{bmatrix} b_1^{[1]}\\ b_2^{[1]}\\ b_3^{[1]}\\ b_4^{[1]}\\\end{bmatrix}_{4\times 1}\right)\\ =&\sigma\left(\begin{bmatrix} w_1^{[1]T}x+b_1^{[1]}\\w_2^{[1]T}x+b_2^{[1]}\\w_3^{[1]T}x+b_3^{[1]}\\w_4^{[1]T}x+b_4^{[1]}\\\end{bmatrix}_{4\times 1}\right)=\sigma\left(\begin{bmatrix} z_1^{[1]}\\ z_2^{[1]}\\ z_3^{[1]}\\ z_4^{[1]}\\\end{bmatrix}\right) \end{aligned}

    • 对于1个样本的算法:(右下角标注的是维数)
      Given input xx:

      z4×1[1]=W4×3[1]a3×1[0]+b4×1[1]a4×1[1]=σ(z4×1[1])}layer 1z1×1[2]=W1×4[2]a4×1[1]+b1×1[2]a1×1[2]=σ(z1×1[2])}layer 2\begin{gathered} \left.\begin{array}{l}z^{[1]}_{4\times 1}=W^{[1]}_{4\times 3} a^{[0]}_{3\times 1}+b^{[1]}_{4\times1}\\ a^{[1]}_{4\times1}=\sigma\left(z^{[1]}_{4\times1}\right) \end{array}\right\} &\text{layer 1}\\ \left.\begin{array}{l}z^{[2]}_{1\times 1}=W^{[2]}_{1\times 4} a^{[1]}_{4\times 1}+b^{[2]}_{1\times1}\\ a^{[2]}_{1\times1}=\sigma\left(z^{[2]}_{1\times1}\right) \end{array}\right\} &\text{layer 2} \end{gathered}

  2. Vectorizing across multiple examples(多个样本进行Vectorization)

    • 对于a[2](i)a^{[2](i)}

      • [2]表示Layer 2(第二层)
      • (i)表示第i个training example
    • 对于mm个样本的算法:
      for i=0i=0 to mm:

      z[1](i)=W[1]x(i)+b[1]a[1](i)=σ(z[1](i))z[2](i)=W[2]a[1](i)+b[2]a[2](i)=σ(z[2](i))\begin{aligned} z^{[1](i)}=&W^{[1]} x^{(i)}+b^{[1]}\\ a^{[1](i)}=&\sigma\left(z^{[1](i)}\right) \\ z^{[2](i)}=&W^{[2]} a^{[1](i)}+b^{[2]}\\ a^{[2](i)}=&\sigma\left(z^{[2](i)}\right) \end{aligned}

    • Vectorization

      Z[1]=W[1]X+b[1]A[1]=σ(Z[1])Z[2]=W[2]A[1]+b[2]A[2]=σ(Z[2])\begin{aligned} Z^{[1]}=&W^{[1]} X+b^{[1]}\\ A^{[1]}=&\sigma\left(Z^{[1]}\right) \\ Z^{[2]}=&W^{[2]} A^{[1]}+b^{[2]}\\ A^{[2]}=&\sigma\left(Z^{[2]}\right) \end{aligned}

      其中,X=[x(1)x(2)x(m)]nx×mX=\begin{bmatrix}|&|&\vdots&|\\ x^{(1)}&x^{(2)}&\cdots&x^{(m)}\\ |&|&\vdots&|\end{bmatrix}_{n_x\times m}, Z[1]=[z[1](1)z[1](2)z[1](m)]Z^{[1]}=\begin{bmatrix}|&|&\vdots&|\\ z^{[1](1)}&z^{[1](2)}&\cdots&z^{[1](m)}\\ |&|&\vdots&|\end{bmatrix}, A[1]=[a[1](1)a[1](2)a[1](m)]A^{[1]}=\begin{bmatrix}|&|&\vdots&|\\ a^{[1](1)}&a^{[1](2)}&\cdots&a^{[1](m)}\\ |&|&\vdots&|\end{bmatrix},其水平方向是training examples的数量,垂直方向是hidden unit的数量。

    • Explanation for vectorized Implementation

    Explanation_for_vectorized_Implementation

3. Activation Function

  1. 常用的activation function

    activation_function

  2. Why non-linear activation function?

    如果使用线性激活函数,则在重复进行线性计算。根据线性运算的齐次性和叠加性,易知该情况和无hidden layer的情况没有区别。即无法构建Deeper NN。

  3. Derivatives of activation function

    • sigmoid function

      g(z)=11+ezg(z)=g(z)(1g(z))\begin{gathered}g(z)=\frac{1}{1+e^{-z}}\\ g'(z)=g(z)(1-g(z))\end{gathered}

      • z(10)z\to \infty(10): g(z)=0g'(z)=0
      • z(10)z\to-\infty(10): g(z)=0g'(z)=0
      • z0z\to 0: g(z)=14g'(z)=\frac 14
    • tanh function

      g(z)=ezzzez+ezg(z)=1tanh2(z) \begin{gathered} g(z)=\frac{e^{z}-z^{-z}}{e^{z}+e^{-z}}\\ g'(z)=1-\tanh^2(z) \end{gathered}

      • z(10)z\to \infty(10): g(z)=0g'(z)=0
      • z(10)z\to-\infty(10): g(z)=0g'(z)=0
      • z0z\to 0: g(z)=1g'(z)=1
    • ReLU & leaky ReLU

      • ReLU:

        g(z)=max(0,z)g(z)={0, if z<01, if z>0\begin{gathered} g(z)=\max (0, z)\\ g^{\prime}(z)=\left\{\begin{array}{ll}0, & \text { if } z<0 \\ 1, & \text { if } z>0\end{array}\right. \end{gathered}

      • leaky ReLU:

        g(z)=max(0.01z,z)g(z)={0.01, if z<01, if z>0\begin{gathered} g(z)=\max (0.01 z, z)\\ g^{\prime}(z)=\left\{\begin{array}{ll}0.01, & \text { if } z<0 \\ 1, & \text { if } z>0\end{array}\right. \end{gathered}

4. Gradient Descent & Back propagation

  1. Gradient Descent for NN

    • 参数: wn[1]×n[0][1],bn[1]×1[1],wn[2]×n[1][2],wn[2]×1[2],nx=n[0],n[1],n[2]=1w^{[1]}_{n^{[1]}\times n^{[0]}},b^{[1]}_{n^{[1]}\times 1},w^{[2]}_{n^{[2]}\times n^{[1]}},w^{[2]}_{n^{[2]}\times 1},n_x=n^{[0]},n^{[1]},n^{[2]}=1

    • Cost function: J(w[1],b[1],w[2],w[2])=1mi=1mL(y^,y)J(w^{[1]},b^{[1]},w^{[2]},w^{[2]})=\frac 1m\sum_{i=1}^m\mathscr{L}(\hat y, y)

    • Gradient descent:
      Repeat{
        Compute predictions (y^(i),i=1,2,,m\hat y^{(i)},i=1,2,\cdots,m)
        dw[1]=Jw[1],db[1]=Jb[1],dw^{[1]}=\frac{\partial J}{\partial w^{[1]}},db^{[1]}=\frac{\partial J}{\partial b^{[1]}},\cdots
        w[1]:=w[1]αdw[1]w^{[1]}:=w^{[1]}-\alpha dw^{[1]}
        b[1]:=b[1]αdb[1]b^{[1]}:=b^{[1]}-\alpha db^{[1]}
        同理计算w[2],b[2]w^{[2]},b^{[2]}}

    • Formula for computing derivatives

      Forward propagation Back propagation
      Z[1]=W[1]X+b[1]A[1]=g[1](Z[1])Z[2]=W[2]A[1]+b[2]A[2]=g[2](Z[2])Z^{[1]}=W^{[1]} X+b^{[1]}\\ A^{[1]}=g^{[1]}\left(Z^{[1]}\right) \\Z^{[2]}=W^{[2]} A^{[1]}+b^{[2]}\\ A^{[2]}=g^{[2]}\left(Z^{[2]}\right) dZ[2]=A[2]YdW[2]=1mdZ[2]A[1]Tdb[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]g[1](z[1])dW[1]=1mdZ[1]XTdb[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)dZ^{[2]}=A^{[2]}-Y\\dW^{[2]}=\frac 1m dZ^{[2]}A^{[1]T}\\db^{[2]}=\frac 1m \mathtt{np.sum(dZ^{[2]}, axis = 1, keepdims = True)}\\ dZ^{[1]}=W^{[2]T}dZ^{[2]}*g^{[1]\prime}(z^{[1]})\\dW^{[1]}=\frac 1m dZ^{[1]}X^T\\ db^{[1]}=\frac 1m \mathtt{np.sum(dZ^{[1]}, axis = 1, keepdims = True)}
      • 其中axis = 1表示按行加
      • W[2]TdZ[2]W^{[2]T}dZ^{[2]}g[1]g^{[1]\prime}都是n[1]×mn^{[1]}\times m维的。*表示element wise
  2. Back propagation

    back_prop

    对于mm个examples,

    dZ[2]=A[2]YdW[2]=1mdZ[2]A[1]Tdb[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]g[1](z[1])dW[1]=1mdZ[1]XTdb[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)\begin{gathered} dZ^{[2]}=A^{[2]}-Y\\dW^{[2]}=\frac 1m dZ^{[2]}A^{[1]T}\\db^{[2]}=\frac 1m \mathtt{np.sum(dZ^{[2]}, axis = 1, keepdims = True)}\\ dZ^{[1]}=W^{[2]T}dZ^{[2]}*g^{[1]\prime}(z^{[1]})\\dW^{[1]}=\frac 1m dZ^{[1]}X^T\\ db^{[1]}=\frac 1m \mathtt{np.sum(dZ^{[1]}, axis = 1, keepdims = True)} \end{gathered}

5. Random Initialization

random_initialization
  • 为什么不能将初始的weight初始化为0?

    W[1]=[0000]W^{[1]}=\begin{bmatrix}0&0\\0&0\end{bmatrix},则两个unit算的结果是相同的,每一个hidden layer的unit多少就没有意义了。同时对其求gradient,dW[1]=[uvuv]dW^{[1]}=\begin{bmatrix}u&v\\u&v\end{bmatrix}

  • 恰当的初始化方式为:
    W[1]=np.random.randn((2,2))0.01W^{[1]}=\mathtt{np.random.randn((2,2))*0.01}(这步*0.01主要是为了获得一个比较小的靠近0的初始值,这是考虑到sigmoid function只在0附近的取值存在一定的线性,而过大趋于1,过小趋于0)
    b[1]=np.zeros((2,1))b^{[1]}=\mathtt{np.zeros((2,1))}(由于对于weight的取值已经随机了,bias是否随机不再重要)
    对于W[2],b[2]W^{[2]},b^{[2]}的取值和上述类似。


Week 4

Deep NN

1. DNN Overview

  1. 在week 3主要介绍的是Shallow NN,随着hidden layer越来越多,也就越来越deeper了。

    shallow-to-deep

  2. notations

    dnn_noatations

    根据上图介绍notations:

    • number of layer(#layer): L=4L=4
    • number of units of layer ll: n[l]n^{[l]}
    • activations of layer ll: a[l]=g[l](z[l])a^{[l]}=g^{[l]}(z^{[l]})
    • weight for z[l]z^{[l]}: w[l]w^{[l]}
    • bias for z[l]z^{[l]}: b[l]b^{[l]}

2. Forward Propagation in a Deep Network

  • 和Shallow NN类似,计算forward propagation的过程,如下表左侧。若对其进行vectorized,则变为右侧形式。

    Elements Vectorization
    z[1]=w[1]x+b[1]a[1]=g[1](z[1])z[2]=w[2]a[1]+b[2]a[2]=g[2](z[2])z[4]=w[4]a[3]+b[4]a[4]=g[4](z[4])\begin{gathered}z^{[1]}=w^{[1]}x+b^{[1]}\\a^{[1]}=g^{[1]}(z^{[1]})\\z^{[2]}=w^{[2]}a^{[1]}+b^{[2]}\\a^{[2]}=g^{[2]}(z^{[2]})\\\cdots\\ z^{[4]}=w^{[4]}a^{[3]}+b^{[4]}\\a^{[4]}=g^{[4]}(z^{[4]})\end{gathered} Z[1]=W[1]X+b[1]A[1]=g[1](Z[1])Z[2]=W[2]A[1]+b[2]A[2]=g[2](Z[2])Z[4]=W[4]A[3]+b[4]A[4]=g[4](Z[4])\begin{gathered}Z^{[1]}=W^{[1]} X+b^{[1]}\\ A^{[1]}=g^{[1]}\left(Z^{[1]}\right) \\Z^{[2]}=W^{[2]} A^{[1]}+b^{[2]}\\ A^{[2]}=g^{[2]}\left(Z^{[2]}\right)\\\cdots\\ Z^{[4]}=W^{[4]} A^{[3]}+b^{[4]}\\ A^{[4]}=g^{[4]}\left(Z^{[4]}\right) \end{gathered}

    更一般的可以写作

    Z[l]=W[l]A[l1]+b[l]A[l]=g[l](Z[l])\begin{gathered} Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}\\ A^{[l]}=g^{[l]}\left(Z^{[l]}\right) \end{gathered}

  • 在处理DNN的forward propagation时需要注意矩阵的维数是否正确。下面是一个例子

    dnn_demension

    下面归纳单个样本Deep NN中出现的各个参数的维度:

    • w[l],dw[l]:(n[l],n[n1])w^{[l]},dw^{[l]}:(n^{[l]},n^{[n-1]} )
    • b[l],db[l]:(n[l],1)b^{[l]},db^{[l]}:\left(n^{[l]},1 \right)
    • z[l],a[l]:(n[l],1)z^{[l]},a^{[l]}:(n^{[l]},1)

    针对mm个样本来说:

    • Z[l],A[l]:(n[l],m)Z^{[l]},A^{[l]}:(n^{[l]},m)(特别地,当l=0l=0时,A[0]=X:(n[0],m)A^{[0]}=X:(n^{[0]},m)
    • dZ[l],dA[l]:(n[l],m)dZ^{[l]},dA^{[l]}:(n^{[l]},m)
  • Why deep representation?为何“深度”的NN表现更好?

    • 在early layer,网络主要实现一些简单功能,例如边缘的检测;在对其进行组合后,即到了later layer时,网络将实现一些复杂的功能,例如分类器。
    • 类似于数字电路理论中的与、或、非门和与非门,层数越多可以减少每个隐层的units的数量

3. Backward Propagation

  1. Building blocks of DNN

    blocks可以表明在前向传播的过程中需要对应传递那些参数用于反向传播。

    • 假设针对NN中的layer ll构建如下图的block进行分析

      dnn_single_block
      • ll层的参数:w[l],b[l]w^{[l]},b^{[l]}

      • 在forward prop中,输入a[l1]a^{[l-1]},输出a[l]a^{[l]}

        z[l]=w[l]a[l1]+b[l]z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]}cache z[l]z^{[l]}

        a[l]=g[l](z[l])a^{[l]}=g^{[l]}(z^{[l]})

      • 在backward prop中,输入da[l]da^{[l]}和先前cache的z[l]z^{[l]},需要输出da[l1],dw[l],db[l]da^{[l-1]},dw^{[l]},db^{[l]}

    • 假设NN有L层,将上述block组合起来,有

      dnn_blocks

  2. Forward & Backward Propagation

    上面构建了block用于分析前向传播的过程中需要对应传递那些参数用于反向传播,下面利用传递的参数构建DNN的反向传播公式。DNN的正、反向传播公式如下:

    • FORWARD

      • 输入:a[l1]a^{[l-1]}
      • 输出:a[l],cache(z[l])a^{[l]},\text{cache}(z^{[l]})
      • Z[l]=W[l]A[l1]+b[l]Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}
        A[l]=g[l](Z[l])A^{[l]}=g^{[l]}(Z^[l])
    • BACKWARD

      • 输入:da[l]da^{[l]}和先前cache的z[l]z^{[l]}

      • 输出da[l1],dw[l],db[l]da^{[l-1]},dw^{[l]},db^{[l]}

        one example mm examples
        dz[l]=da[l]g[l](z[l])dw[l]=dz[l]a[l1]Tdb[l]=dz[l]da[l1]=w[l]Tdz[l]dzl=w[l+1]Tdz[l+a]g[l](z[l])\begin{aligned}dz^{[l]}=&da^{[l]}*g^{[l]\prime}(z^{[l]})\\dw^{[l]}=&dz^{[l]}\cdot a^{[l-1]T}\\ db^{[l]}=&dz^{[l]}\\da^{[l-1]}=&w^{[l]T}\cdot dz^{[l]}\\dz^{l}=&w^{[l+1]T}\cdot dz^{[l+a]}*g^{[l]\prime}(z^{[l]}) \end{aligned} dZ[l]=dA[l]g[l](z[l])dW[l]=1mdZ[l]A[l1]Tdb[l]=1mnp.sum(dZ[l],axis=1,keepdims=True)dA[l1]=W[l]TdZ[l]\begin{aligned}dZ^{[l]}=&dA^{[l]}*g^{[l]\prime}(z^{[l]})\\dW^{[l]}=&\frac 1m dZ^{[l]}A^{[l-1]T}\\ db^{[l]}=&\frac 1m \mathtt{np.sum(dZ^{[l]}, axis = 1, keepdims = True)}\\dA^{[l-1]}=&W^{[l]T}\cdot dZ^{[l]} \end{aligned}
    • 其结构如图
      dnn_prop

4. Parameters & Hyperparameters

Hyperparameters其实是Course 2主要研究的问题,在这里只是提了一下什么是超参数(Hyperparameters)。

  • 参数:W[1],b[1],W[2],b[2],W^{[1]},b^{[1]},W^{[2]},b^{[2]},\cdots
  • 超参数:(吴恩达用#表示number of …)
    • learning rate α\alpha
    • #iterations
    • #hidden layer LL
    • #hidden units n[1],n[2],n^{[1]},n^{[2]},\cdots
    • choice of activation function
    • 包括Course 2中将涉及的momentum, mini-batch, regulations, …
  • 参数根据超参数的改变是会有很大的变化的,即Hyperparameters control parameters.

Applied deep learning is a very empirical process.

5. Deep learning and brain

brain

  • 这个笔记主要是我看coursera课程是笔记的整理,所以文章里面肯定是很多疏漏,也存在很多错误的,欢迎在评论区批评指正。(求轻喷
  • 由于整理打公式还是非常麻烦的,也很容易出错,所以会有一些写的不太规范的地方,大家见谅。
  • 不知道为什么好好的表格到网页框线就没了,大家将就看吧。/(ㄒoㄒ)/~~

本文标题:【深度学习笔记(一)】神经网络与深度学习

文章作者:Levitate_

发布时间:2021年03月25日 - 23:58:22

原始链接:https://levitate-qian.github.io/2021/03/26/DL-Coursera-1-Neural-Networks-and-Deep-Learning/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。