深度学习入门笔记(二):神经网络基础

  深度学习入门笔记(二):神经网络基础

  1、二分类

  下面要学习的是神经网络的基础知识,其中需要注意的是,当实现一个神经网络的时候,需要知道一些非常重要的技术和技巧,闲言少叙,直接开搞。

  逻辑回归(logistic regression) 是一个用于 二分类(binary classification) 的算法。首先从一个问题——猫咪识别开始说起,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。用字母 y yy 来表示输出的结果标签,如下图所示:

  如上图所示,一张图片在计算机中对应三个矩阵,分别对应图片中的红、绿、蓝三种颜色通道,且图片大小与三个矩阵相同,分别对应图片中红、绿、蓝三种像素的强度值。

  为了把这些像素值转换为 特征向量 x xx,需要定义特征向量表示图片,把像素都取出来,也就是矩阵中的数据,例如255、231等等,取完红色像素接着是绿色像素,最后是蓝色像素,直到得到特征向量,也就是图片中红、绿、蓝像素排列的值。如果图片的大小为64x64像素,那么 x xx 的总维度,是64 * 64 * 3,也即是三个像素矩阵中的像素总量(12288)。

  现在用 nx=12288 n_x=12288n

  x

  ​

  =12288 来表示输入特征向量的维度,有时为了简洁,直接用小写的 n nn 来表示。所以二分类问题中,最终的目标就是习得一个分类器,以图片特征向量作输入,预测输出结果 y yy 是1还是0,即预测图片中是否有猫。

  符号定义 :

  x xx:表示一个 nx n_xn

  x

  ​

  维数据,为输入数据,维度为 (nx,1) (n_x,1)(n

  x

  ​

  ,1);

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

  (x(i),y(i)) (x^{(i)},y^{(i)})(x

  (i)

  ,y

  (i)

  ):表示第 i ii 组数据,可能是训练数据,也可能是测试数据,此处默认为训练数据;

  X=[x(1),x(2),...,x(m)] X=[x^{(1)},x^{(2)},...,x^{(m)}]X=[x

  郑州妇科:http://www.zzrlyytj.com/

  郑州妇科医院:http://www.zzrlyytj.com/

  (1)

  ,x

  (2)

  ,...,x

  (m)

  ]:表示所有的训练数据集的输入值,放在一个 nx×m n_x×mn

  x

  ​

  ×m 的矩阵中,其中 m mm 表示样本数目;

  Y=[y(1),y(2),...,y(m)] Y=[y^{(1)},y^{(2)},...,y^{(m)}]Y=[y

  (1)

  ,y

  (2)

  ,...,y

  (m)

  ]:对应表示所有训练数据集的输出值,维度为 1×m 1×m1×m。

  2、逻辑回归

  对于二元分类问题,给定输入特征向量 X XX,它可能对应一张图片,如果想识别这张图片是否是猫的图片,怎么做?

  定义算法的输出预测为 yˆ \hat{y}

  y

  ^

  ​

  ,也就是对实际值 y yy 的估计。更正式地来说,yˆ \hat{y}

  y

  ^

  ​

  表示 y yy 等于1的一种可能性或者是几率,当然,前提条件是给定了输入特征 X XX。

  上面说过 X XX 是一个 nx n_xn

  x

  ​

  维的向量,相当于有 nx n_xn

  x

  ​

  个特征的特征向量。w ww 表示逻辑回归的参数,也是一个 nx n_xn

  x

  ​

  维向量,因为 w ww 实际上是 特征权重,维度与特征向量相同。参数里面还有 b bb,是一个实数,表示偏差。所以给出输入以及参数后,一个可以尝试却不可行的结果是 yˆ=wTx+b \hat{y}={{w}^{T}}x+b

  y

  ^

  ​

  =w

  T

  x+b。

  为什么说可以尝试,却不可行呢?注意,这时得到的实际上是线性回归时用到的一个关于输入 x xx 的线性函数,但这对二元分类问题来讲,却不是一个非常好的算法。因为 yˆ \hat{y}

  y

  ^

  ​

  表示实际值 y yy 等于1的几率,也就是说 yˆ \hat{y}

  y

  ^

  ​

  应该在0到1之间。

  这是一个需要解决的问题,因为 wTx+b {{w}^{T}}x+bw

  T

  x+b 可能比1要大得多,更有甚者,可能是一个负值,但是我们想要的是一个概率。因此,在逻辑回归中,输出是 yˆ \hat{y}

  y

  ^

  ​

  作为自变量的 sigmoid 函数的输出值。有点绕,其实简单来说, yˆ=sigmoid(y) \hat{y} = sigmoid(y)

  y

  ^

  ​

  =sigmoid(y)。

  如上图所示,就是 sigmoid 函数的图像,它平滑地从0走向1,这里的作用其实还是把线性函数转换为非线性函数。

  关于 sigmoid 函数的公式是这样的

  σ(z)=11+e−z \sigma \left( z \right)=\frac{1}{1+{{e}^{-z}}}

  σ(z)=

  1+e

  −z

  1

  ​

  这里要注意的是,从图像可以看出两点:

  如果 z zz 非常大,那么 e−z {{e}^{-z}}e

  −z

  将会接近于0,σ(z) \sigma \left( z \right)σ(z) 会非常接近1。

  相反地,如果z zz 非常小或者一个绝对值很大的负数,那么 e−z {{e}^{-z}}e

  −z

  会变得很大,σ(z) \sigma \left( z \right)σ(z) 就接近于0。

  因此当实现逻辑回归时,yˆ \hat{y}

  y

  ^

  ​

  在0到1之间,成为对 y=1 y=1y=1 概率的一个很好的估计。

  3、逻辑回归的代价函数

  为什么需要代价函数(也翻译作成本函数)?

  为了训练逻辑回归模型,得到参数 w ww和参数 b bb。

  看到这里你可能有点蒙逼,先来看一下损失函数吧,你可能会问那 什么是损失函数? 损失函数又叫做 误差函数,用来衡量算法的运行情况,Loss function:L(yˆ,y) L\left( \hat{y},y \right)L(

  y

  ^

  ​

  ,y).。通过这个 L LL,也就是损失函数,来衡量预测输出值和实际值有多接近。

  一般的损失函数有预测值和实际值的平方差或者它们平方差的一半,但是通常在逻辑回归中不这么做,为什么?因为在学习逻辑回归参数时,会发现优化目标不是 凸优化(在凸优化中局部最优值必定是全局最优值),只能找到多个局部最优值,很可能找不到全局最优值。所以虽然平方差是一个不错的损失函数,但在逻辑回归模型中定义的是另外一个损失函数,即

  L(yˆ,y)=−ylog(yˆ)−(1−y)log(1−yˆ) L\left( \hat{y},y \right)=-y\log(\hat{y})-(1-y)\log (1-\hat{y})

  L(

  y

  ^

  ​

  ,y)=−ylog(

  y

  ^

  ​

  )−(1−y)log(1−

  y

  ^

  ​

  )

  为什么要用这个函数作为逻辑损失函数?来举两个例子你就懂了,首先确定一件事,无论解决什么问题,你肯定想要误差尽可能地小。好了,现在来看例子吧:

  当 y=1 y=1y=1 时损失函数 L=−log(yˆ) L=-\log (\hat{y})L=−log(

  y

  ^

  ​

  ),如果想要损失函数 L LL 尽可能得小,那么 yˆ \hat{y}

  y

  ^

  ​

  就要尽可能大,因为 sigmoid 函数取值 [0,1] [0,1][0,1],所以 yˆ \hat{y}

  y

  ^

  ​

  会无限接近于1。

  当 y=0 y=0y=0 时损失函数 L=−log(1−yˆ) L=-\log (1-\hat{y})L=−log(1−

  y

  ^

  ​

  ),如果想要损失函数 L LL 尽可能得小,那么 yˆ \hat{y}

  y

  ^

  ​

  就要尽可能小,因为 sigmoid 函数取值 [0,1] [0,1][0,1],所以 yˆ \hat{y}

  y

  ^

  ​

  会无限接近于0。

  而在逻辑回归中,我们期待的输出就是1或者0,是不是这个损失函数更好呢?

上一篇:P1596 [USACO10OCT]Lake Counting S(八连通问题)


下一篇:4.22 省选模拟赛 三元组 manacher 回文自动机