课时9 拟合神经网络的参数
9.1 代价函数
此处重点讲解神经网络在分类问题中的应用。
假设有一个与左图类似的神经网络结构,再假设右边这些是训练集。
用L表示神经网络的总层数即L=4。
用sl来表示第l层的单元数(神经元的数量),其中不包括偏置单元,比如s1=3,s2=5,s4=sL=4
我们将会考虑两种分类问题:
第一种是二元分类问题,在图中左下角,最终结果y只能取0和1。二元分类问题只有一个输出单元,我们可以认为输出层的单元K=1。
第二种是多类别分类问题,也就是说会有K个不同的类,那么就有K个输出单元,输出K维向量。注意,一般K≥3,因为如果只有两个类,属于二元分类问题,则是上一种情况,上一种情况的K=1。
我们在神经网络中使用的代价函数是逻辑回归代价函数的一般形式,对于逻辑回归(上面一行),我们通常使代价函数最小化。而对于神经网络的代价函数,是这个式子更一般的形式。其中h(x) 是一个K维向量,h(x)i表示向量中的第i个元素。
这个式子中前一项实际上还是一个逻辑回归的代价函数,只不过里面需要嵌套一层K维向量的K个元素,分别与最终的y对比,求它的代价。后一项对应逻辑回归中正则化项。(这里我不大明白,正则化项是惩罚参数的,但是从逻辑回归到神经网络参数从一维变成二维,但为什么神经网络的正则化项嵌套了三层求和,l表示神经网络的层,那么ij分别是什么?)
9.2**反向传播
这是一个拟合神经网络参数的算法。
为了找到θ,使得代价函数取得最小值,我们需要做的就是获得输入参数θ并计算J(θ)以及一些偏导数项,以能够使用梯度下降算法或一些更高级的算法。那么如何计算偏导项?
假设训练集只包含一个训练样本,记为(x , y),我们用前向传播就可以计算出这个神经网络最终的输出h(x),在这里我们实现了把前向传播向量化。接下来,为了计算导数项,我们将采用一种叫做反向传播(Backpropagation)的算法。
反向传播算法从直观上说,就是对每一个节点计算δj(l)(与a的上下标意义相同,a表示单元的激活值),代表了第l层第j个节点的误差。所以δ项就捕捉到了在这个神经节点的激活值的误差,所以我们可能希望这个节点的激活值稍微不一样。
具体地讲,上图右边这个四层的神经网络。对于每一个输入单元,我们计算δ项,从右往左看,
。最后一层的δ就等于这个单元的激活值减去训练样本里的真实值。这里的a可以换成h(x)输出值,且式中的三个项都可以看作四维向量。
下一步第三层的δ的计算需要图中的那个公式,公式中相乘的两项都是向量,所以点乘就是向量元素之间对应的乘法操作,注意后一项是一个导数(弹幕说这里是一个链式求导法则,如果想搞清楚公式推导,需要再看)。然后计算完两个隐藏层的δ就结束了,因为输入层输入的数据是训练集直接拿来的没有误差。
当我们有一个非常大的有m个样本的训练集,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!