吴恩达Deeplearning.ai专项课程笔记(一)-- 神经网络基础

  吴恩达深度学习专项课程Deeplearning.ai共开设五门课,目前已经学了大半,想起来忘了整理课程笔记,这几天抽空补上。

1.基础概念

  • 神经网络 :输入一些数据,经过隐藏层,最终得到输出,圆形节点为神经元。
     吴恩达Deeplearning.ai专项课程笔记(一)-- 神经网络基础_第1张图片

  • 神经网络样例 :(标准神经网络/卷积神经网络/循环神经网络)
      吴恩达Deeplearning.ai专项课程笔记(一)-- 神经网络基础_第2张图片 

  • 结构化数据与非结构化数据 :结构化数据通常指数据库数据(每个特征都有清晰定义),非结构化数据如音频、原始音频、图像、文本等。

2.Logistic回归(二分类)

  • 特征向量构建
    exm.图像特征向量的提取,把每个像素上的RGB数值(假设共 nx 个)提取出来排列入一个向量中,就得到一个 nx 维的特征向量;
      吴恩达Deeplearning.ai专项课程笔记(一)-- 神经网络基础_第3张图片
      
  • 深度学习符号约束
    1.样本:
      对 (x,y) 表示一个单独样本,其中 x nx 维特征向量, y { 0 1 } (二分分类)。
      
    2.训练集:
      对于训练集中的单个样本,用圆括号加上标进行标注,如: (x(1),y(1)) , (x(2),y(2)) ,… (x(m),y(m)) 其中m表示训练集样本个数,即: m = Mtrain
      
    3.矩阵符号约束:
      训练集矩阵X的约定形式,将样本横向排列,写成矩阵X的列,因此矩阵维度为 (nx,m) ,输出矩阵Y的约定形式,将样本对应标签依旧横向排列,写成矩阵Y的列,因此输出矩阵维度为 (1,m)
    吴恩达Deeplearning.ai专项课程笔记(一)-- 神经网络基础_第4张图片
     
  • logistic回归
      对于单个样本 x ,其正确标签值为 y ,通过 logistic 回归得到的预测值记为 y^ = P(y=1|x) (读作y hat或y帽),对应参数分别为 ω b 。其中 ω 维数同 x ,为一个 nx 维向量, b 为实数。
      给定样本 x(i) logistic 回归公式为:       
               y^(i)=σ(ωTx(i)+b)z(i)=ωTx(i)+b
      激发函数sigmoid函数控制 y^ 的值在0与1之间,函数公式为 σ(x)=11+ex ,函数图像如下图所示。
        吴恩达Deeplearning.ai专项课程笔记(一)-- 神经网络基础_第5张图片
      损失函数(也叫误差函数),用于衡量预测值与实际值间的接近程度,其定义方法有多种,如L2范数平方均值等,在 Logistic 回归中,定义损失函数L为:
               L(y^,y)=(ylog(y^)+(1y)log(1y^))
      损失函数 L 基于单个样本定义,衡量模型在单个训练样本上的表现,针对整个训练集,采用成本函数 J ( cost function )衡量基于参数的总成本。  
         1mmi=1L(y^(i),y(i))=1mmi=1[y(i)log(y^(i))+(1y(i))log(1y^(i))]
      目标:找到合适的参数 ω,b ,使成本函数值降到最低。
      
  • 梯度下降
      目标:学习使成本函数尽可能小的参数 ω,b
      方法:首先初始化 ω,b ,然后进行沿最陡的下坡方向下降,直至抵达最低点(收敛到全局最优解或接近全局最优解)
      公式: ωωαdJ(ω)dω , α 为学习率,也称为每次下降的步长,而梯度可以理解为函数曲线/曲面的方向。

     1.单个样本的梯度下降
      由于单个样本而言,损失函数为:
           l(y^(i),y(i))=y(i)log(y^(i))+(1y(i))log(1y^(i))
      其中: z(i)=ωTx(i)+b y^(i)=σ(z(i))
       dldz=(y(i)1σ(z)σ(z)(1σ(z))+(1y)11y^(i)σ(z)(σ(z)1))   
      化简结果为: σ(z)y(i)
      → dldω=dldzdzdω=(σ(z)y(i))x(i)
      → dldb=dldzdzdb=σ(z)y(i)=dldz
     2.m个样本的梯度下降
      对成本函数 L(ω,b)=1mmi=1l(y^(i),y(i))
      → dLdω=1mmi=1(σ(z)y(i))x(i)
      → dLdb=1mmi=1(σ(z)y(i))
      

3.向量化

  在实际编程过程中,由于在训练大数据集时,采用显式for循环导致程序运行时间复杂度过高。采用向量化的方法将消除显式for循环,加快代码运行速度。
  
  1、举例
  调用numpy包,实现逻辑回归的乘法部分: z=np.dot(ω.T,x)
  对向量v中每个元素做指数运算: np.exp(v)
  对向量v中每个元素做对数运算: np.log(v)]
  将向量v中每个元素变为绝对值: np.abs(v)
  求v中每个元素和0相比的最大值: np.maximum(v,0)
  对向量v中所有元素求和: np.sum(v)
  
  2、 logistic 回归中向量化的实现
  初始化:
    参数 ω 初始化: ω=np.random.rand((nx,1)) ,维度为 (nx,1)
    参数 b 初始化, b=0 ,numpy的广播机制将在计算时扩充b的维度为 (nx,1)
    训练集矩阵:X,大小为 (nx,m)  
    训练集样本标签: Y,大小为 (1,m)
  预测:
    定义矩阵Z,大小为 (1,m) z=np.dot(ω.T,x)+b
         Z=[ωTx(1)+b,...,ωTx(m)+b]=[z(1),z(2),...,z(m)]
    预测值: A ,大小同Y,为 (1,m) A=np.sigmoid(Z)
        =[σ(zx(1)),σ(z(2)),...,σ(z(m))]=[a(1),a(2),...,a(m)]
  梯度下降:
   由单样本梯度下降推导结果 dldz=σ(z)y(i) ,及m个样本推导结果

{dLdω=1mmi=1(σ(z)y(i))x(i)$  dLdb=1mmi=1(σ(z)y(i))

   有:
      
dz=AYdw=1mnp.dot(dz.T,X)db=1mnp.sum(dz)

   则→
{ω=ωαdω   b=bαdb


你可能感兴趣的:(深度学习,神经网络)