对于多层神经网络,理论上,如果有足够多的隐藏层和足够多的训练样本,可以拟合出任意方程。
所以现在神经网络才那么火啦~
下面我们来看如何设计神经网络的结构
设计神经网络结构
- 输入层
特征向量在被传入输入层之前要进行标准化(normalize)到0-1间,为了加速训练过程 - 隐藏层
包括确定网络层数,每层的节点个数。没有明确的规则来确定隐藏层的个数和节点的个数,一般是通过交叉验证的方法确定 - 输出层
神经网络既可以用来解决分类问题,也可以解决回归问题。如果是分类问题,则输出层的单元数是类别的个数
接下来我们看一个ANN中很火的算法——Backpropagation算法,看ANN具体是怎么实现的
Backpropagation算法
算法思想
•通过迭代处理训练集中的样本
•对比经过神经网络后输出层的预测值和真实值
•从输出层经过隐藏层反向传播到输入层,以最小化误差更新连接权重
算法过程
1.初始化权重(weights)和偏置(bias): 随机初始化在-1到1的值,每个节点有 一个偏向
2.每个训练样本执行以下步骤:
2.1 由输入层前向传播,根据初始化的参数及激活函数,计算出节点的输出, 直到输出层
2.2 反向传播计算误差,更新权重和偏置
3.终止条件
•1) 权重的更新低于某个阈值,
•2) 预测的错误率低于某个阈值
•3) 达到预设的循环次数
通过例子介绍人工神经网络训练过程
1.初始化权重(w)和偏置(b),提供输入(i)输出(o)
通过下图我们看到已经红色的数字为我们随机初始化的权重w,黄色的数字为随机初始化的权重b。左边的蓝色数字为输入i,右边的蓝色数字为输出o。
2.每个训练样本执行以下步骤:
2.1 前向计算
由输入层前向传播,根据初始化的参数及激活函数,计算出节点的输出, 直到输出层
2.1.1 隐含层
我的上一篇文章已经介绍了隐含层每个结点的输入(结点的左半球)为上一层结点的权重和,输出(结点的右半球)为通过激活函数将线性函数转成非线性的结果。
这里我们可以通过公式直观的看一下
①结点的输入(结点左半球)——权重和
②结点的输出(结点右半球)——激活函数
<