吴恩达-深度学习课程笔记:第一门课_第二周 神经网络编程基础

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
原文地址:https://www.cnblogs.com/Mike2019/p/11805946.html