可以认为人造神经网络神经网络就是一个元功能,它能接收固定数目的数字输入并且生成固定数目 的数字输出。在大部分情况下,神经网络有一个隐藏神经元层,它里面的隐藏神经元和输入神经元以及 输出神经元完全连接。和每个单个隐层神经元以及每个单个输出神经元相关的是一组加权值和一个单个 的偏置值。权重和偏置决定了一组既定输入值的输出值。
在使用神经网络来对现有数据进行建 模以对新数据进行预测时,主要的挑战在于如何找到可以生成和现有数值最为匹配的输出值的一组权重 和偏置值。判断最佳神经网络的权重和偏置的最常见技术称作反向传播。虽然很多优秀的参考资料描述 了支撑反向传播的复杂数学应用,但是程序员可以使用的能清楚解释如何编程反向传播算法的参考指南 却寥寥无几。本文解释了如何实现反向传播。我使用了C# 语言,但您应该能够轻松使用其他语言重构 本文中的代码。
要想了解我所讲述的内容,最好是看一下图 1 所示演示程序的屏幕快照。该演 示程序将创建一个神经网络,它具有三个输入神经元、一个有四个神经元的隐藏层以及两个输出神经元 。带一个隐藏层的神经网络需要两个激活函数。然而,在很多情况下这两个激活函数是相同的,通常为 sigmoid函数。但是在该演示程序中,为了说明激活函数和反向传播的关系,我将使用不同的激活函数 : “输入到隐藏”计算的sigmoid函数,和“隐藏到输出”计算的tanh(双曲正切函数)函数。
图1 反向传播算法正在运行
时间: 2024-10-29 19:59:49