
从0开始:神经网络分类器
原文作者:Anson Wong
原文链接:https://towardsdatascience.com/coding-up-a-neural-network-classifier-from-scratch-977d235d8a24
翻译:周期
A single-layer fully-connected neural network used for classification
我们的目标只是提供一个从头开始编写的隐藏层完全连接的神经网络分类器(没有深度学习库),以帮助消除神经网络中神秘的黑匣子感觉。该项目的Githubrepo是:
https://github.com/ankonzoid/NN-from-scratch
所提供的神经网络对描述属于三类小麦的内核的几何属性的数据集进行分类(你可以轻松地将其替换为你自己的自定义数据集)。假设一个L2丢失函数(lossfunction),并且在隐藏和输出层中的每个节点上使用S形传递函数(sigmoidtransfer function)。权重更新方法使用具有L2范数的梯度下降(gradient descent)的增量规则(deltarule)。
对于本文的其余部分,我们概述了我们的代码为构建和训练神经网络进行类预测所采取的一般步骤。关于深入学习和加强学习的博客,教程和项目,请查看我的Medium和我的Github。
对于我们的n倍交叉验证,我们随机排列所有N个示例索引,然后将大小为N / n的连续块作为折叠。每个折叠用作许多交叉验证实验之一的测试集,补体指数用作训练集。
我们有2个完全连接的权重层:一个连接输入层节点与隐藏层节点,一个连接隐藏层节点与输出层节点。没有任何偏差条件,这应该总共在网络中的(n_input* n_hidden + n_hidden * n_output)权重数量。我们通过采样正态分布来初始化每个权重。
每个节点(神经元)具有存储到存储器的3个属性(attributes):连接到其输入节点的权重列表,从前向传递一些输入计算出的输出值,以及在输出端的反向传播(backward-propagating)分类不匹配中表示其误差的增量值层。这3个属性是相互交织的,并通过以下三个过程循环进行更新:
(A)给出我们当前节点权重,向前传递训练集来更新节点输出。每个节点输出被计算为其先前的层输入(无偏置项)的加权和,后跟S形传递函数。
(B)给定我们当前节点权重的向后分类误差更新节点增量。要了解更多关于这些增量(deltas)的信息,我们建议您阅读https://en.wikipedia.org/wiki/Delta_rule,因为我们使用从L2损失函数应用梯度下降导出的相同的增量(delta)规则方程。
(A)→(B)→(C)的训练周期过程对每个训练样本的每个训练示例进行。
在训练之后,我们可以简单地使用这个模型来对我们的测试例子进行分类预测,方法是将接收到的输出的argmax从文本示例转发到训练有素的神经网络中。精确度分数是正确分类的数量除以总数(在n次交叉验证的训练和测试集合中)的示例数量的直观分数。