算法工程师修仙之路:吴恩达深度学习(四)

神经网络和深度学习

神经网络基础


logistic 回归

  • 对于二元分类问题来讲,给定一个输入特征向量 X X X,它可能对应一张图片,你想识别这张图片看它是否是一只猫或者不是一只猫,你想要一个算法能够输出预测,你只能称之为 y ^ \hat{y} y^,也就是你对实际值 y y y 的估计。

  • X X X 是一个 n x n_x nx 维的向量(相当于有 n x n_x nx 个特征的特征向量)。我们用 w w w 来表示逻辑回归的参数,这也是一个 n x n_x nx 维向量(因为 w w w 实际上是特征权重,维度与特征向量相同),参数里面还有 b b b,这是一个实数(表示偏差)。

  • 这时候我们得到的是一个关于输入 x x x 的线性函数,实际上这是你在做线性回归时所用到的,但是这对于二元分类问题来讲不是一个非常好的算法,因为你想让 y ^ \hat{y} y^ 表示实际值 y y y 等于1的机率的话, y ^ \hat{y} y^ 应该在0到1之间。这是一个需要解决的问题,因为 w T x + b w^Tx+b wTx+b 可能比1要大得多,或者甚至为一个负值。

  • 在逻辑回归中,我们的输出应该是 y ^ \hat{y} y^ 等于由 w T x + b w^Tx+b wTx+b 作为自变量的 sigmoid函数,将线性函数转换为非线性函数。
    算法工程师修仙之路:吴恩达深度学习(四)_第1张图片

    • z z z 很大的话那么关于 z z z 的 sigmoid 函数会非常接近1,如果 z z z 非常小或者说是一个绝对值很大的负数,这个就接近于0。
    • 当你实现逻辑回归时,你的工作就是去让机器学习参数 w w w 以及 b b b 使得 y ^ \hat{y} y^ 成为对 y = 1 y=1 y=1 这一情况的概率是一个很好的估计。

logistic 回归损失函数

  • 为了训练逻辑回归模型的参数参数 w w w 和参数 b b b,我们需要一个代价函数,通过训练代价函数来得到参数 w w w 和参数 b b b

  • 先看一下逻辑回归的输出函数:
    算法工程师修仙之路:吴恩达深度学习(四)_第2张图片

    • 为了让模型通过学习调整参数,你需要给予一个 m m m 样本的训练集,这会让你在训练集上找到参数 w w w 和参数 b b b,来得到你的输出;
    • 对训练集的预测值,我们将它写成 y ^ \hat{y} y^,我们更希望它会接近于训练集中的 y y y 值,这种形式也适用于每个训练样本;
    • 我们使用这些带有圆括号的上标来区分索引和样本,训练样本 i i i 所对应的预测值是 y ( i ) y^{(i)} y(i),是用训练样本的 w T x ( i ) + b w^{T}x^{(i)}+b wTx(i)+b 然后通过 sigmoid 函数来得到;
    • 可以把 z z z 定义为 z ( i ) = w T x ( i ) + b z^{(i)}=w^Tx^{(i)}+b z(i)=wTx(i)+b,我们将使用上标 ( i ) (i) (i) 来指明数据表示 x x x 或者 y y y 或者 z z z 或者其他数据的第 i i i 个训练样本。
  • 损失函数又叫做误差函数,用来衡量算法的运行情况,Loss function: L ( y ^ , y ) L(\hat{y}, y) L(y^,y)

  • 我们通过这个损失函数,来衡量预测输出值和实际值有多接近。

  • 一般我们用预测值和实际值的平方差或者它们平方差的一半,但是通常在逻辑回归中我们不这么做,当我们在学习逻辑回归参数的时候,会发现我们的优化目标不是凸优化,只能找到多个局部最优值,梯度下降法很可能找不到全局最优值,虽然平方差是一个不错的损失函数,但是我们在逻辑回归模型中会定义另外一个损失函数。

  • 我们在逻辑回归中用到的损失函数是: L ( y ^ , y ) = − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) L(\hat{y}, y)=−ylog(\hat{y})−(1−y)log(1−\hat{y}) L(y^,y)=ylog(y^)(1y)log(1y^)

    • 当我们使用平方误差作为损失函数的时候,你会想要让这个误差尽可能地小,对于这个逻辑回归损失函数,我们也想让它尽可能地小;
    • y = 1 y=1 y=1 时损失函数 L = − l o g ( y ^ ) L=-log(\hat{y}) L=log(y^),如果想要损失函数 L L L 尽可能得小,那么 y ^ \hat{y} y^ 就要尽可能大,因为 sigmoid 函数取值[0, 1],所以 y ^ \hat{y} y^ 会无限接近于1;
    • y = 0 y=0 y=0 时损失函数 L = − l o g ( 1 − y ^ ) L=-log(1-\hat{y}) L=log(1y^),要损失函数 L L L 尽可能得小,那么 y ^ \hat{y} y^ 就要尽可能小,因为 sigmoid 函数取值[0, 1],所以 y ^ \hat{y} y^ 会无限接近于0。
  • 损失函数是在单个训练样本中定义的,它衡量的是算法在单个训练样本中表现如何,为了衡量算法在全部训练样本上的表现如何,我们需要定义一个算法的代价函数,算法的代价函数是对 m m m 个样本的损失函数求和然后除以 m m m J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) = 1 m ∑ i = 1 m ( − y ( i ) l o g y ^ ( i ) − ( 1 − y ( i ) ) l o g ( 1 − y ^ ( i ) ) ) J(w, b)=\frac{1}{m}\sum_{i=1}^{m}L(\hat{y}^{(i)}, y^{(i)})=\frac{1}{m}\sum_{i=1}^{m}(-y^{(i)}log\hat{y}^{(i)}-(1-y^{(i)})log(1-\hat{y}^{(i)})) J(w,b)=m1i=1mL(y^(i),y(i))=m1i=1m(y(i)logy^(i)(1y(i))log(1y^(i)))

  • 损失函数只适用于单个训练样本,而代价函数是参数的总代价,所以在训练逻辑回归模型时候,我们需要找到合适的 w w w b b b,来让代价函数 J J J 的总代价降到最低。根据我们对逻辑回归算法的推导及对单个样本的损失函数的推导和针对算法所选用参数的总代价函数的推导,结果表明逻辑回归可以看做是一个非常小的神经网络。

你可能感兴趣的:(笔,记)