700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【深度学习】logistic回归模型

【深度学习】logistic回归模型

时间:2019-12-31 19:55:51

相关推荐

【深度学习】logistic回归模型

目录

神经网络

数据、符号准备:

logistic回归:

损失函数和代价函数:

梯度下降法:

向量化:

神经网络

我们学习深度学习的目的就是用于去训练神经网络,而神经网络是什么呢?我们先来看下面一个基础的生物上的神经元的图片。

通常来说,神经元就是处理信息的基础单位,神经元一端传来电信号,经历中间的处理后会输出新的信号,所以总的来说神经元一个信号处理中心。而神经网络就是多个神经元组成的网络,它可以接收不仅一个输入,它也可以不只有一个输出,并且它们还可以堆叠,这样大大增强数据处理能力。而我们深度学习的神经网络系统就起到相似的作用:接收我们输入的数据,在我们预设的系统下执行完输出结果,而这个神经系统也不是一开始就存在的,它需要我们给予它一些数据去训练它,拟合出一套最适合的映射系统。

数据、符号:

在深度学习中,我们需要输入数据才能去训练输出数据,而我们需要先去处理这些输入的数据与符号。下面与如何表示一张三通道图片为例(事实上三通道图可以涵盖我们日常中的很多图片)。

对于三通道图片中的三个矩阵,我们可以用一个x的特征向量来表示:这个特征向量x就能包含里面的所有像素点。它的大小即n,在这里就是5 x 4 x 3。5表示5行、4表示4列、3表示三个通道。而我们的训练集中不只有一张图(例如三张图),所以我们还需要用一个X的矩阵来代表所有的图。这个矩阵的列数就是训练集x的个数,即图片的个数m。而对于输出,例如我们需要做的是一个二分类问题,此时我们的输出就是0或1的标志。那么我们需要的输出y对应的就是一个m列的矩阵。

logistic回归:

回到之前的二分类例子,我们有m张图片,并且获取了这些图片的特征向量的矩阵,我们需要判断这些图片中是否满足我们某个要求,如是否含有猫🐱这种动物。那么此时我们的每张图片传进模型后的输出就是一个概率。因为概率的大小都是趋于0到1之间的,此时我们就不能利用简单的线性回归来作为输出。我们可以考虑使用logistic回归。logistic回归函数的参数也是一个大小为n的向量,它可以看成是对应每个像素的权重,并且还含有一个b的标量表示偏移。而要实现逻辑回归就需要控制y的输出位于0到1之间,这里利用的方法是实验sigmoid函数,它可以将输出y控制到0-1之间,sigmoid函数如下:

它的函数表达式是:,我们可以看到这个函数将输出控制在0-1之间。此时我们的logistic回归的表达式就是:。

损失函数和代价函数:

上面我们讨论了logistic回归,我们的目的是要使用这个回归来得到预测输出y,但是我们知道,我们需要一个标准来衡量我们的输出是否好,即训练值中的输出和预测是否一致。而这个衡量标准就是损失函数。对于单个样本,我们定义一个函数loss来计算真实值和预测值的误差:。

而我们需要统计的是对应于整个数据集中对应所有数据的损失函数,我们利用符号J来表示这个函数,这个函数叫做代价函数。J就直接与我们需要训练的W和b相关:

梯度下降法:

之前我们看了代价函数J,我们的目的是需要让它能够变得最少。我们采用的方法就是梯度下降法,即通过求导数的方式将其一步步变化以达到最优解。而我们对于两个变量w和b的处理方式是

上面的两条式子就是用于计算最符合条件(J最小)时的w和b。我们需要变化w和b,使其不断接近最优解,其中式子中的是代表学习率,它的意义是控制w每次变化时变化的步长,而偏导就是控制每次变化的方向。

关于梯度下降我们常用得到求导方法是链式法则

例如我们的训练参数只有W1,W2,输入量是X1和X2。我们需要的是J对b、W1和W2进行求导,而这个过程无疑是一个循序渐进的求导过程,因为输出结果到输入结果之间隔着很多中间量,所以我们求导的时候一般都需要使用到链式法则。

我们先从一个样本开始:先算出这个样本的预测值(a),我们知道:,跟据我们可以得到损失函数,,之后我们可以根据链式法则倒过来求出,而b和W2也类似。具体过程如下:

过程

在得到损失函数后我们就可以进一步求出

向量化:

我们知道,在我们进行深度学习时,我们需要使用的数据往往是大量的,就如我们需要计算的损失函数一样,我们需要有m个数据进行处理,并且每个数据可能都有n个特征值,所以我们遍历这些数据时就不能使用for循环这种低效率的方法,我们需要使用到新的方法:向量化。向量化的意思是我们将这些数据变成矩阵运算(例如numpy和Pytorch中的矩阵运算),这样数据运算处理就可以提高效率。

以我们数据集里有m个图片,每个数据的特征向量为n为例,对于单个图片的线性预测方程的解是。并且我们还要计算m个z的数值,这里利用for循环计算的效率不高,所以采用矩阵的计算方式。具体是将所有的x放到一个矩阵中:X=。这个矩阵大小为m x n,这也就代表着一列代表一张图片的特征向量,列数就代表着图片的个数。然后我们将w设计为一个nx 1的向量:,那么就可以表示为:Z =:。后面只需要再设计一个b的大小为1 x m的向量与之前的相加即可。这样就可以得到回归预测函数的输出向量Z,后面我们将其带入到激活函数sigmoid后就可以得到预测的输出a。值得注意的是,对于我们之前设计的对于m个样本每个都使用for循环进行一次计算的方法我们也可以将其转换为向量化计算:对于,我们由上面的链式法则知道是,这也就代表着我们还有一个循环需要向量化,遍历整个数据集。这里我们可以使用向量化的操作:即使用Pytorch里的矩阵求和求和操作来计算。同理w也可以化为:,这里的Z转置是为了计算。我们可以大致看看结果:X是一个n行m列n x m的矩阵,Z我们求出来是一个1 x m的行向量。这两个相乘就可以得到一个n x 1的矩阵,它的每一行就代表在这m个样本中的累计值。

参考资料:

[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。