zoukankan      html  css  js  c++  java
  • 吴恩达-深度学习课程笔记:第一门课_第二周 神经网络编程基础

    2.1 二分类Binary Classification

        

       

        图1                         图2

       一张64*64像素的图片如图1,在计算机中保存形式如图2所示。三个64*64的矩阵,分别对应图片中红、黄、蓝三种像素的强度值。我们把这些像素值提取出来放到一个特征向量x,而x的总维度nx将是64*64*3=12288。二分类问题中,我们的目标就是以图片的特征向量作为输入,然后预测输出结果y是1还是0,即图片中有猫还是没猫。

    nx输入特征向量的维度,有时直接用n表示;

    m:表示训练样本数,有时用Mtarin:表示训练集样本数,Mtest表示测试集样本数;

    x:表示一个nx维数据,为输入数据,维度(nx, 1);

    y:表示输出结果,取值(0, 1);

    (x(i), y(i)):表示第i组训练数据;

    X = [x(1), x(2),  ... ,x(m)]:1*m的矩阵,表示所有训练数据集的输入值;

    Y = [y(1), y(2),  ... ,y(m)]:1*m的矩阵,表示所有训练数据集的输出值;

     

     2.2逻辑回归函数

       对于上面的二分类问题,你想要一个算法能够输出预测,表示为z,也就是对实际值y的估计,或者说表示实际值y等于1的概率。我们很容易想到用线性回归模型得到这个算法

     

    但是这个函数的输出z不在{0,1}。这时候我们需要一个算法来归一化z值,使得z满足

     

     然而该函数不连续,我们希望有一个单调可微的函数来供我们使用,于是便找到了Sigmoid 函数来替代。

    两个函数的曲线图如下所示

     

     2.3 逻辑回归的损失函数

      损失函数又称误差函数,用来衡量预测输出值和实际值有多接近。Loss function:L(y^, y)。

      从上节我们得到逻辑回归的输出函数

      

      上标(i)用来区分索引和样本,y^或者ϕ(z(i))表示训练样本i对应的预测值。

      得到上面的两个函数,接下来要根据给定的训练集,把参数w和b给求出来。要找参数w和b,首先就是得把代价函数(cost function)给定义出来,也就是损失函数。 
      我们第一个想到的自然是模仿线性回归的做法,利用误差平方和来当损失函数。

       

      i表示第i个样本点,y(i)表示第i个样本的真实值,ϕ(z(i))表示第i个样本的预测值。 

       但是该函数是一个非凸函数,这就意味着代价函数有着许多的局部最小值,这不利于我们的求解。 

     

      逻辑回归中用到的损失函数是:

      

      当y=1时,y^会无限接近于1;当y=0时,y^会无限接近于0。

       算法的代价函数是对于m个样本的损失函数求和然后除以m:

       

     2.4 梯度下降

       梯度下降可以在你的测试集上,通过最小化代价函数(成本函数)J(w, b)来训练参数w和b。上面这个图中,横轴表示空间参数w和b,代价函数J(w, b)是在水平轴w和b上的曲面,因此曲面高度就是J(w, b)在某一点的函数值。我们要做的就是找到使得代价函数J(w, b)函数值最小时,对应参数w和b。

      w和b的运算公式:

      

       :=  表示更新参数

       :就是函数J(w, b)对w求导,代码中用dw表示;

      :就是函数J(w, b)对b求导,代码中用db表示;

      a:表示学习率,用来控制步长。

     2.9 逻辑回归中的梯度下降

      逻辑回归公式:

      损失函数公式:

      m个样本的代价函数公式:

      单个样本的代价函数:,

       参数w、b的更新公式:

       a.根据损失函数计算L(y^, y)关于y^的导数:

      

      b..根据损失函数计算L(y^, y)关于z的导数:

       

       c.根据损失函数计算L(y^, y)关于w的导数:

      

      d.根据损失函数计算L(y^, y)关于b的导数:

      “db” = "dz" = a-y

      e.更新参数w和b

      w = w - a * “dw”  (a:学习率)

      b = b - a * “db”

     2.10 m个样本的梯度下降

    J=0; dw1=0; dw2=0; db=0;
    
    //计算累加和
    for i=1 to m:
      z(i)=wT * x(i)+b;
      a(i)=δ(z(i)) = 1/1+e^-z(i)
      J+= -[ y(i) * log a(i) + (1-y(i)) * log (1-a(i)) ]
      dz(i) = a(i) - y(i)
      dw1 += x1(i) * dz(i)
      dw2 += x2(i) * dz(i) 
      db += dz(i)
    
    //平均
    J/=m;
    dw1/=m;
    dw2/=m;
    db/=m;
    
    //参数更新
    w1 := w1 - α * dw1
    w2 := w2 - α * dw2
    b := b - α * db
  • 相关阅读:
    Geometry
    后缀数组dc3算法模版(待补)
    CodeForces 467D(267Div2-D)Fedor and Essay (排序+dfs)
    HDU 3572 Task Schedule (最大流)
    Acdream手速赛7
    hdu2732 Leapin' Lizards (网络流dinic)
    HDU 3549 Flow Problem (最大流ISAP)
    HDU 1532 Drainage Ditches (网络流)
    [容易]合并排序数组 II
    [容易]搜索插入位置
  • 原文地址:https://www.cnblogs.com/Mike2019/p/11805946.html
Copyright © 2011-2022 走看看