🚀Write In Front🚀
📝个人主页:令夏二十三
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:深度学习
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
文章目录
目录
2.1 二分类
前言
第二周的主题是学习神经网络的基础知识。
实现神经网络需要用到一些重要的技术和技巧,比如怎样处理包含大量样本的训练集,我们不用 for 循环来处理,而是使用线性代数中的矩阵来做。
在神经网络的计算中,还会有前向暂停、前向传播、反向暂停和反向传播等步骤,本周会对它们进行详细的介绍。
本周课程中会使用逻辑回归这个算法来帮助大家理解这些概念。
正题
逻辑回归算法一般用于二分类问题,下面这个问题就是一个典型的二分类问题。
题目
输入一张图片,若识别这张图片里有猫,则输出标签 1 作为结果,否则输出标签 0 作为结果。
分析
图片在计算机中的表示方法
计算机中有红、绿、蓝三种色块,三种色块按照不同的深浅度叠加就是一个像素,一张图片就由许多像素组成。
我们用三个矩阵来表示三种色块,矩阵中的元素值就是像素的强度值,这里用三个5x4的矩阵来表示一张图片:
为了将图片输入到计算机中,我们需要将像素值放到一个特征向量里,这是一个列向量,从上到下地存放像素值,先存放第一个矩阵的第一行,再存放第一个矩阵的第二行,......,最后存放第三个矩阵的最后一行。
这个特征向量的行数就是所有像素的数量(注意不是像素值的和),我们通常用x来表示特征向量,用n来表示特征向量的维度(即行数)。
所以,在二元分类问题中,我们的目标就是构建一个分类器,它以图片的特征向量作为输入,然后输出结果y(1或0),也就是预测图片中是否有猫。
符号定义
接下来我们说明一些在下面的课程中会用到的符号。
- x
表示一个输入的n维的数据(向量),在这道猫图识别题目中可以想象成一个只有一列的矩阵,但是有 n 行,也就是列向量。
- y
表示输出结果,取值范围为{1,0}。
- (x(i),y(i))
表示第i组数据,(i)为上标,可以是训练数据,也可以是测试数据,这里默认为训练数据。
- X=[x(1),x(2),⋯,x(m)]
大写的X表示所有训练数据集的输入值,放在一个n行m列的矩阵中,其中m表示样本个数。
有时候会出现训练样本按行堆叠起来的矩阵,这时候要将其转置,这样处理起来才更简单。
其实每列都代表一个数据样本,有 m 列就说明有 m 个数据样本。
- Y=[y(1),y(2),⋯,y(m)]
大写的Y表示所有训练数据集的输出值,放在一个1行m列的矩阵中,也就是一个行向量。
在python中,输出X的命令是:X.shape;输出Y的命令是:Y.shape。
2.2 逻辑回归
这一小节我们将学习逻辑回归算法,用于二分类问题,而主要内容是介绍逻辑回归的假设函数(Hypothesis Function)。
前一篇文章提到,给定一个特征向量x作为输入,x对应着一张图片,我们需要一个算法来预测图片里是否有猫,这里注意,我们的输出是预测,所以只是对实际值y的预测,用y^来表示。
y^是预测值,也就是y=1的概率,其取值范围为[0,1],如果预测值为0,说明图片里没有猫,如果为1,则图片里面一定有猫,至于预测值在0和1之间的情况,则代表图片中有猫的概率。
此时,再给出两个参数,n维向量w是逻辑回归的参数(因为x是n维的,也就是有n行,n个特征),b是偏差,利用公式y^=w(T)x+b可以粗略地得出一个预测值,但是不能保证这个值处于0和1之间。
上面的这个公式其实只是一个线性回归公式,但仅仅靠这个公式是无法解决二分类问题的,需要再使用Sigmoid函数。这个函数能将线性回归公式的结果转化为介于0和1之间的概率。
下面就是套用了Sigmoid函数的公式,以及所画出的图:
综上,逻辑回归的公式如下:
如果z很大,那么结果会很接近1;如果z很小,那么结果会很接近0,这便是Sigmoid函数的功能,线性回归套上这个公式,也就变成了逻辑回归,这里的逻辑应该指的就是0和1吧,给出了一个非黑即白的逻辑判断准则。
2.3 逻辑回归的成本函数
为什么需要成本函数(Cost Function)
为了得到逻辑回归函数的两个参数 w 和 b ,我们需要训练成本函数。
成本函数,本质上是预测值和真实值的绝对差,是整个训练集中所有样本的单个误差的平均值。
损失函数
损失函数是训练集中单个样本的误差,也就是样本预测值与真实值之差。
对于损失函数,我们想要它尽可能地小,这样得到的预测值就和真实值十分接近。
2.4 梯度下降法(Gradient Descent)
梯度下降法是一种方法,可以用来在测试集上,通过最小化成本函数来训练出最准确的参数w和b。
假设成本为J,J是一个由w和b决定的值,那么三者可以在立体空间中确定一个点(当然维度可以更高,这里用三维空间更好理解),成本处于一个曲面上,如下图所示:
这个曲面是凹凸不平的,我们需要找到曲面的最低点,也就是成本J的最小值所在处,取得那里的w和b作为参数,这就需要不停地进行梯度下降,每次寻找一个梯度最低的方向进行移动,这样到最后就一定能到达一个局部最低点,也有希望到达全局最低点,每次下降后就更新参数,迭代下降的公式如下所示:
2.9 逻辑回归中的梯度下降
这里弄清楚前向传播和反向传播即可:
前向传播(Forward Propagation)是指在网络中传递输入信号,直到产生输出的过程。在前向传播阶段,信息从输入层开始,逐层通过隐藏层,最终到达输出层。每层神经元都会处理前一层的信息,并产生输出传递到下一层。这个过程涉及到计算神经元的加权输入和激活函数的输出。
反向传播(Back Propagation)是一种用于训练神经网络的算法,它基于梯度下降法。反向传播的过程中,网络根据预测误差来更新权重。具体来说,算法计算输出层产生的误差,并将这个误差按权重的比例分配到各层的每个神经元,从而更新网络中的每一条连接权重。这样,网络可以逐步减少预测误差,提高模型的性能。
总而言之,下图中从左往右计算就是前向传播,从右往左逐步计算导数和偏导,最终得到L关于x1,w1,x2,w2以及b的偏导,接着使用原来值减去步长乘偏导的值得到调整后的参数,这就是梯度下降。
后面的章节涉及到向量化和python中的传播技术,已经在动手学深度学习中接触过了,就不过多解释,涉及到代码的在补完理论知识后再进行实战巩固。