从0开始学习机器学习--Day14--如何优化神经网络的代价函数

在上一篇文章中,解析了神经网络处理分类问题的过程,类似的,在处理多元分类问题时,神经网络会按照类型分成多个输出层的神经元来表示,如下:

处理4个分类问题时的神经网络

我们可以看到,相较于之前的分类问题,,这里用的输出是以向量的方式来区分行人、汽车、摩托车还有卡车四种图片,即输出四维向量与原始数据去对比是否预测成功。

神经网络的代价函数(Cost function of Neural Networks)

在学习代价函数之前,让我们先了解一些基本知识。在神经网络中,我们把记为神经网络的层数, 则是对应层数的神经元个数。通常我们将神经网络的分类问题分为二元和多元,当学习问题是二元分类问题时,我们只有一个输出单元,其值为0或1,此时,也记作;如果是多元分类,则输出的是维向量。

神经网络对分类问题的代价函数

如图,神经网络的代价函数跟之前在逻辑回归里讲的一样,采用一般形式。不同的是,由于神经网络的输出不止一个,在形式上相应地有些许改变,我们可以看到和原来的相比多了求和符号,其实这是代表了把每个输出和每个函数值的损失都加在一起,这也是这个求和符号写在了里面,就是为了说明其跟也有关系,后面正则项的求和符号则是因为我们前文讲过的神经网络里参数项的矩阵维度发生了改变,注意这里参数的下标都是从1开始,这主要是为了忽略偏置单元,在逻辑回归里我们也正是这样做的。

反向传播算法(Backpropagation algorithm)

跟梯度下降一样,反向传播算法的用途也是用来优化代价函数,让我们先回顾只有一个训练样本时神经网络正常的计算过程:

神经网络正向传播时的计算过程

如图,神经网络正向传播时是从输入层开始,逐层计算知道最后输出层输出

而反向传播算法,顾名思义,就是从输出层逐层往前计算。不同的是,这里计算的是每个神经元的误差。初始的误差,后续第三、第二层的误差为,这里的其实等于。之所以没有计算第一层的误差是因为第一层是输入层,是神经网络观察训练集得出的直观数据。而如果忽略正则项,那么对代价函数求偏导的式子则可以写成,联系到之前所说对g函数求偏导的变形,其实能看出这里的式子就是将几个式子做了联立而已。

而对于有m个数据的训练集,神经网络将两个算法结合起来计算就是:

神经网络结合两个算法的计算过程

如图,我们可以看到,对于一般的数据集,神经网络先是走正向传播算法,计算出输出层的每个神经元的激活项(注意,这里的实际上就是上幅图提到的,只是写成了大写,从1开始则是因为不计算偏置单元),然后再走反向传播算法,将每个神经元的误差计算出来,乘在一起后再加上正则项,就形成了我们的:

学习内容来自于b站吴恩达大佬课程:https://www.bilibili.com/video/BV1By4y1J7A5?spm_id_from=333.788.player.switch&vd_source=867b8ecbd62561f6cb9b4a83a368f691&p=1

相关推荐
爱上好庆祝36 分钟前
学习js的第七天(wed APIs的开始)
前端·javascript·css·学习·html·css3
风兮雨露2 小时前
VMware虚拟机(安装/绿色版)
学习
zl_dfq3 小时前
python学习8 之 【集合、datetime模块、字典】
学习
kdxiaojie4 小时前
U-Boot分析【学习笔记】(3)
linux·笔记·学习
多年小白4 小时前
【周末消息面汇总】2026年5月10日(周日)
人工智能·科技·机器学习·ai·金融
MediaTea4 小时前
Scikit-learn:从数据到结构——无监督学习的最小闭环
人工智能·学习·算法·机器学习·scikit-learn
@杰克成4 小时前
Java学习26
java·学习·idea
qeen875 小时前
【数据结构】二叉树相关经典函数C语言实现
c语言·数据结构·c++·笔记·学习·算法·二叉树
Honey Ro5 小时前
深度学习中的参数更新方法
深度学习·神经网络·自然语言处理·cnn