![自动驾驶:感知原理与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/804/47793804/b_47793804.jpg)
1.1.2 神经网络
1.1.1节简单地讨论了感知机的话题,但是感知机只能解决一些简单的二分类问题,面对更复杂的多分类问题就束手无策了,于是,需要提升网络的复杂度,使用多层感知机网络来解决问题,这里的多层感知机网络便是神经网络模型。
神经网络的结构如图1.2所示。通常一个神经网络主要包含输入层、隐层和输出层。图1.2中的每个圆圈均可看作一个简单的神经元(感知机)。
![](https://epubservercos.yuewen.com/886D6B/27210482804701706/epubprivate/OEBPS/Images/45738_15_1.jpg?sign=1738891510-BWbRIOaSkei6WgMLZSL4OH738hmj9yM3-0-62004682144cd444b631a24941dc5645)
图1.2 神经网络的结构
其实,设计神经网络的重要工作主要体现在隐层的设计和神经元之间的权重上。
理论上,只要在隐层神经元数量足够的情况下,单隐层神经网络就可以拟合和逼近任何连续函数。但是,很多人还是会选择设计多隐层神经网络。虽然从数学原理上说,这与单隐层神经网络的数学表达是一致的,但是,多隐层神经网络的效果会比单隐层神经网络的效果好很多。
但是,这里的层数设计和隐层神经元数量不能盲目地增加,因为过多的层数或神经元会带来严重的过拟合和巨大的参数量等问题。
简单了解神经网络的概念后,这里简要说明一下神经网络的工作原理。神经网络在工作过程中主要涉及以下几方面:前向传播、反向传播和损失函数。对于前向传播,即前面所说的神经网络正向计算的过程(感知机的计算),这里不再复述。下面主要针对反向传播和损失函数进行分析。
对于多分类任务,神经网络经常使用的损失函数为交叉熵损失函数:
![](https://epubservercos.yuewen.com/886D6B/27210482804701706/epubprivate/OEBPS/Images/45738_15_2.jpg?sign=1738891510-h6YUBLYnPyCOUe5NhW7ZGlvduyfILgEU-0-f21c53c69d5f75adfb3c880093ba2a8a)
式中,x(i)为神经网络的输入数据;hθ(x(i) )为神经网络预测的结果;y(i)为x(i)对应的标签;θ为神经元参数;SL为所有神经网络层的数量。
在神经网络训练过程中,交叉熵损失函数需要进行反向传播。这里的反向传播是一种用于神经网络求解参数梯度的方法。下面仅简单举例来说明反向传播的过程。在计算梯度时,需要多次采用链式法则:
![](https://epubservercos.yuewen.com/886D6B/27210482804701706/epubprivate/OEBPS/Images/45738_15_3.jpg?sign=1738891510-PCeoi2Ae9TXcZZls7jDUlwv6KNFcN0yL-0-0968de46543552f396eafd513de54cdc)
如式(1.4)和图1.3所示,不难看出,只要求出和
,就能算出损失函数对θ1的梯度。除顺序使用递归求解外,如果从输出层开始反向逐层计算梯度,则可直接求解,这便是反向传播的过程。
这里总结一下神经网络的训练过程。
第1步,数据集的收集和标注,了解输入数据和标签。
第2步,设计神经网络模型。
第3步,选择损失函数,并反复训练,直至模型收敛(满足要求即可)。
![](https://epubservercos.yuewen.com/886D6B/27210482804701706/epubprivate/OEBPS/Images/45738_16_1.jpg?sign=1738891510-lLV1NnjYkyaClKdquIMrq988ChxLP1uh-0-82ba8190393bd6f62027ff7e7cc28eeb)
![](https://epubservercos.yuewen.com/886D6B/27210482804701706/epubprivate/OEBPS/Images/45738_16_2.jpg?sign=1738891510-yp0FtJyZQMPCW9wUJgURstXrNBV3tFQ8-0-eab2a6aaa8f80132b29515b6a296ce81)
图1.3 神经元的反向传播