深度学习初学者一定不能错过,从零开始建立神经网络

  • A+
所属分类:儿童英语培训

 

动机:为了更好的解释深度学习,作者决定从零开始建立一个神经网络,而不是像TensorFlow这样的深度学习库。相信理解神经网络的外部工作作为其他有抱负的数据科学家来说都是很重要的。

什么是神经网络?

大多数介绍神经网络的文章在阐述他们时会涉及到头脑逻辑,在不深入探究大脑逻辑的状况下,将神经网络简单叙述为将固定数值映射到希望输出的物理函数解释出来更容易。

神经网络由以上部分构成:

为每个隐藏层选择激活函数σ。在本步骤中,我们将使用Sigmoid激活函数。

下图提示了2层神经网络的体系结构(请注意,在判断神经网络中的层数时一般会排除输入层)

2层神经网络的体系结构

用Python创建一个神经网络类很容易。

神经网络训练

简单的2层神经网络的输出是:

您可能会注意到,在里面的等式中,权重W和差异b是制约?的唯一变量。

当然,权重和差异的正确度决定了分析的准确性。从输入数据中调整权值和差异的过程称为神经网络训练。

训练步骤的每天迭代包含以上方法:

计算分析输出?,称为前馈

更新权重和差异,称为反向传播

下图为步骤顺序图。

前馈

正如我们在里面的顺序图中发现的,前馈只是一个简单的推导,对于几乎的2层神经网络,神经网络的输出是:

可以在python类库中添加一个前馈函数来做到这一点。简单起见,使设想偏差为0。

然而,仍然必须一种方法来检测我们分析超过多大程度,损失函数可以做到这一点。

损失函数

损失函数有很多种学英语从零开始博客,问题的特点决定该选用哪种损失函数。在本步骤中,作者将选用一个简单的sqaures偏差作为损失函数。

也就是说,平方和偏差只能是每个分析值和实际值之差的平均值。因为数值被平方,所以要测量误差的绝对值。

作者的训练目标是找到最佳的权重和差异集合,以最大限度地提高损失函数。

反向传播

现在作者终于测量了分析精度 英语口语培训,需要找到一种方法来传递误差学英语从零开始博客,并升级权重和偏差。

为了合理的微调权重和差异,需要了解损失函数关于权重和差异的导数。

可以从演算中发现,函数的定理就是函数的导数。

梯度下降算法

如果有导数,可以轻松地利用降低/减少升级权重和差异(参见上图)。这被称为梯度下降。

然而,我们不能直接判断损失函数的权值和差异,因为损失函数的函数不包括权值和差异。因此,我们应该链式规则来判断它。

链式规则采用判断损失函数相对于指数的斜率。简单起见,只提示了如果1层神经网络的偏导数

得到相对于权值的损失函数的函数(斜率),以便合理调节权重。

现在,将反向传播函数添加到Python代码中。

为了深入解释演算的运用和逆向传递中的链式规则,作者强烈推荐3Blue1Brown撰写教程。

结合在一起

现在终于有了完整的python类库来做卷积和逆向传递,将神经网络应用于一个例子上,来说说它的完成度。

神经网络需要学习理想的权值集合来声称这个变量。注意,通过检测来判断权重并不是不重要的。

来想想训练神经网络进行1500次迭代后会出现哪些。查看以下每个迭代图的损失,可以知道地看着损耗单调递减到最小。这与之前的梯度下降算法一致。

1500次迭代后神经网络的最后分析(输出)。

从上图可以看出前馈和后向传递系统失败地训练了神经网络,并且分析与实际值差距不大。

请注意,预测和实际值两者可以存在微小的差别。因为它可以避免过拟合,使神经网络更好地归纳看不见的数据。

下一步是怎么?

幸运的是,关于神经网络和深度学习还有好多还要知道的内容。例如:

除了Sigmoid函数,还可以使用这些激活函数?

训练神经网络时的学习率

利用聚类进行图像分类任务

最后的想法

作者从头开始学习了神经网络。

尽管TensorFlow和Keras等深度学习库可以在不完全掌握神经网络的外部工作的状况下快速推进深度网络,但有野心的数据科学家可以更深入地认识神经网络。

这次练习对作者来说收获很大,希望它对您还有用!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: