《吴恩达深度学习》01神经网络和深度学习(第2周神经网络基础)

01. 神经网络和深度学习

第二周 神经网络基础

2.1 二分分类

  1. 图片在计算机中的保存:三通道(红,绿,蓝)
  2. X=[x(1),x(2),,x(m)]X=[x^{(1)},x^{(2)},\cdots,x^{(m)}],每个列向量为一个样本。

2.2 logistic回归

  1. 给定xx,目的是求y^=P(y=1x)\hat{y}=P(y=1|x)
  2. sigmoid函数
    σ(z)=11+ez\sigma(z)=\frac{1}{1+e^{-z}}
    《吴恩达深度学习》01神经网络和深度学习(第2周神经网络基础)
  3. logistic回归
    y^=σ(wT+b)\hat{y} = \sigma(w^{T}+b)

2.3 logistic回归损失函数

  1. 平方损失函数(在logistic中不常用,因为会导致非凸)
    L(y^,y)=12(y^y)2L(\hat{y}, y) = \frac{1}{2}(\hat{y}-y)^2
  2. 熵损失函数
    L(y^,y)=(ylogy^+(1y)log(1y^))L(\hat{y}, y)=-(y log \hat{y}+ (1-y)log(1-\hat{y}))
  3. 成本函数
    Jj(w,b)=1mi=1mL(y^(i),y(i))Jj(w, b)=\frac{1}{m}\sum_{i=1}^{m}L(\hat{y}^{(i)}, y^{(i)})

2.4 梯度下降法

  1. 流程
    w:=wαJ(w,b)ww:= w-\alpha \frac{\partial J(w, b)}{\partial w}
    b:=bαJ(w,b)bb:= b-\alpha \frac{\partial J(w,b)}{\partial b}

2.5 导数

2.6 更多导数的例子

2.7 计算图

  1. 举例:J(a,b,c)=3(a+bc)J(a,b,c)=3(a+bc)
    《吴恩达深度学习》01神经网络和深度学习(第2周神经网络基础)

2.8 计算图的导数计算

  1. 计算图
    《吴恩达深度学习》01神经网络和深度学习(第2周神经网络基础)
  2. 链式法则
  3. 代码中常用变量:dvar,最终关心的输出变量的导数

2.9 logistic回归中的梯度下降法

  1. 计算图
    《吴恩达深度学习》01神经网络和深度学习(第2周神经网络基础)

2.10 m个样本的梯度下降

J=0;dw1=0;dw2=0;db=0fori=1tomz(i)=wTx(i)+ba(i)=σ(z(i))J+=[y(i)loga(i)+(1y(i))log(1a(i))]dz(i)=a(i)y(i)dw1+=x1(i)dz(i)dw2+=x2(i)dz(i)db+=dz(i)J/=mdw1/=m,dw2/=m,db/=m; J=0; dw_1 =0; dw_2=0;db=0\\ for i =1 to m\\ z^{(i)} = w^T x^{(i)} +b\\ a^{(i)} = \sigma (z^{(i)})\\ J += -[y^{(i)}loga^{(i)}+ (1-y^{(i)})log(1-a^{(i)})]\\ dz^{(i)} = a^{(i)}-y^{(i)}\\ dw_1 += x_1^{(i)}dz^{(i)}\\ dw_2 += x_2^{(i)}dz^{(i)}\\ db += dz^{(i)}\\ J /= m\\ dw_1 /=m, dw_2 /=m, db/=m;
2. 问题:两次for循环,较为低效
3. 解决方法:向量化

2.11 向量化

  1. 什么是向量化
    z=wTx+bz=w^T x+b
  2. 非向量化代码
    z=0foriinrange(nx):z+=w[i]x[i]z+=b z=0 \\ for i in range(n-x): z += w[i]*x[i] z+= b
  3. 向量化代码
    z=np.dot(w,x)z=np.dot(w,x)

2.12 向量化的更多例子

  1. 神经网络编程指南
    (1) 只要可能,尽量少用for循环;
  2. numpy常用函数:log, abs, maximum,**
  3. 向量化logistic梯度下降

2.13 向量化logistic回归

  1. Z=wTX+bZ=w^T X+b
  2. Z=np.dot(w.T,X)+bZ = np.dot(w.T, X)+b
  3. A=σ(Z)A = \sigma(Z)

2.14 向量化logistic回归的梯度输出

  1. dz=[dz(1),dz(2),,(m)]dz = [dz^{(1)}, dz^{(2)}, \cdots, ^{(m)}]
  2. dz=AYdz = A-Y
  3. db=1mnp.sum(dZ)db = \frac{1}{m}np.sum(dZ)
  4. dw=1mXdzTdw = \frac{1}{m}Xdz^T

2.15 Python中的广播

  1. 广播可以使python运行更搞笑
  2. 例子(求每种食物中热量占比)
    《吴恩达深度学习》01神经网络和深度学习(第2周神经网络基础)
  3. 代码
    cal=A.sum(axis=0)cal =A.sum(axis = 0)
    percentage=100A/(cal.reshape(1,4))percentage = 100*A/(cal.reshape(1,4))
    增加reshape确保矩阵维度正确
  4. 广播举例
    《吴恩达深度学习》01神经网络和深度学习(第2周神经网络基础)
  5. 广播通用规则
    (m,n)+/(1,n)(m,n)(m,n) +-*/ (1,n) \rightarrow (m,n)
    (m,n)+/(m,1)(m,n)(m,n) +-*/ (m,1) \rightarrow (m,n)
    (m,1)+(1,1)(m,1)(m,1) + (1,1) \rightarrow (m,1)
    (1,n)+(1,1)(1,n)(1,n) + (1,1) \rightarrow (1,n)

2.16 关于python numpy向量的说明

  1. 不要使用(n,)(n,)形式的数据结构
    例子:a=np.random.rand(5)a=np.random.randn(5,1)a=np.random.rand(5) \rightarrow a=np.random.randn(5,1)
  2. 使用声明
    例子:assert(a.shape==(5,1))assert(a.shape == (5,1))
  3. 重塑矩阵
    例子:a=a.reshape((5,1))a = a.reshape((5,1))

2.17 Jupyter ipython笔记本的快速指南

2.18 logistic损失函数的解释