只使用Numpy手动实现多层卷积神经网络(详解)

AiTechYun

编辑:yuxiangyu

在过去,我曾写过一篇关于“理解在最大池化层和转置卷积的反向传播”的文章。现在我想要使用这些知识做一个多层(或者说多通道)的卷积神经网络。

在阅读本文之前我建议你可以看一下下面两个链接的内容(都是探讨舍弃反向传播给人工智能找到新方向的):

  • 链接1:https://www.quora.com/Why-is-Geoffrey-Hinton-suspicious-of-backpropagation-and-wants-AI-to-start-over
  • 链接2:https://medium.com/intuitionmachine/the-deeply-suspicious-nature-of-backpropagation-9bed5e2b085e

加载训练数据并声明超参数

如上所示,所有的内核都是(3 * 3)矩阵,我们在执行一个非常简单的二进制任务,它只识别“ 识别手写数字 ”中0和1的图像。

网络架构

输入→尺寸为(8 * 8)的图像

红星→具有两个不同通道的第1层 红圈→将激活和最大池化层应用在第1层

蓝星→具有四个不同通道的第2层 蓝圈→将激活和最大池化的操作应用在第2层

绿星→全连接权重(W3)尺寸为(16 * 28)的第3层 绿圈→激活函数应用于第3层

粉星→全连接权重(W4)尺寸为(28 * 36)的第4层 粉圈→激活层应用于第4层

黑星→全连接权重(W5)尺寸为(36 * 1)的第5层 黑圈→应用于第5层的激活层

黑匣子→使用L2范数的代价函数

前馈操作的实现

每自颜色的框代表了该层的操作,这里需要注意两点。

1. 我在每个卷积层之前执行零填充以维持尺寸。

2. 每个层使用激活函数是不同的。

对W5、W4和W3的实施反向传播

标准的反向传播对每个激活函数都有适当的导数。对于标准的全连接层来说,这没什么特别之处。

对所有W2(W2a,W2b,W2c和W2d)实施反向传播

第一行代码(下划线绿色)→返回从前一层的传播

绿框→在W2a,W2b,W2c和W2d各自的规则中计算梯度。

对所有W1(W1a和W1b)实施反向传播

第一个红框→W1a的梯度

第二个红框→W2a的梯度

训练和结果

很好,结果最后的结果还不算太糟。如上所示,训练次数设置为500。网络将测试集中的每个图像分类(除了一个错的)。

破解在反向传播中的数学原理

这样上面已经是合适的反向传播了,在这里,我们对上一层的导数和激活函数的导数进行微分运算。然而,出于好奇,我决定做下面的事情。

蓝线→简单的元素智能乘法

绿线→仅对计算后的最大池层的导数进行转置 红线→仅在最大池层面的掩码执行转置。

为了方便起见,我将把上述网络称为折回网络(back prop net)。

我并不期待网络在改变之后表现更好,只是好奇而已。但是,看看下面显示的结果。我每次都用不同的超参数进行了三次不同的实验。(只更改最后全连接层的尺寸。)

结果1:W3(16 * 18),W4(18 * 20)和W5(20,1)

红框→折回网络的结果。

蓝色框→原始网络结果

你能看到,在第一个实验中,两个网络测试数据具有100%的准确率,然而在第250个周期时折回网络的代价(或者说成本cost)较低。

结果2:W3(16 * 48),W4(48 * 56)和W5(56,1)

红框→折回网络的结果 蓝框结果→原网络的结果 绿星结果→网络预测错误

这次有趣的是,折回网络的代价更高,但测试数据的准确率达到了100%。尽管原始网络的成本较低,但一些预测是错误的。

结果3:我忘记了这次的权重尺寸,但两个网络肯定是一样的。

红框→折回网络的结果 蓝框结果→原网络的结果

这次准确率都是100%。但折回网络的代价较高。

原始网络

注意:在线编译器没有“从sklearn中导入数据集”,所以我无法复制和粘贴笔记本电脑上使用的代码。所以我复制了四个训练示例,它们分别代表0,1,1,0的手写数字,并调整了超参数。

访问原始网络代码:https://repl.it/@Jae_DukDuk/Multi-Channel-and-Layer-Original

折回网络

注意:在线编译器没有“从sklearn中导入数据集”,所以我无法复制和粘贴笔记本电脑上使用的代码。所以我复制了四个训练示例,它们分别代表0,1,1,0的手写数字,并调整了超参数。

访问折回网络代码:https://repl.it/@Jae_DukDuk/Multi-Channel-and-Layer-Broken

结语

像这样的结果让我着迷,这就是我要做手动执行反向传播的原因。即使是Hinton博士自己,也怀疑反向传播,他希望人工智能有新的起点。然而对于我们来说,深入理解反向传播是非常重要的,尝试创造性的方法来看看,是否有其他方法可以做的更好。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2018-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding迪斯尼

手算梯度下降法,详解神经网络迭代训练过程

1944
来自专栏Echo is learning

machine learning 之 多元线性回归

1473
来自专栏数据派THU

一文读懂支持向量机SVM(附实现代码、公式)

支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问...

7103
来自专栏AI研习社

决策树:一种像人脑一样工作的算法

决策树是用于机器学习最流行的算法之一,尤其对于分类和回归问题。我们每次做决策时大脑都像决策树一样工作。

1323
来自专栏人工智能头条

SVM大解密(附代码和公式)

2342
来自专栏机器之心

教程 | 百行代码构建神经网络黑白图片自动上色系统

4186
来自专栏量子位

想打造一个神经网络,自动给黑白照片上色?这儿有一份超详细教程

王小新 编译自 FloydHub Blog 量子位 出品 | 公众号 QbitAI ? 昨天,你可能惊喜地看到了Adobe做了个给人像上色的软件,然后伤心地发现...

4555
来自专栏大数据挖掘DT机器学习

R分类器性能评价:图形方法

几个基本概念 对于二元分类器,我们可以把分类样本的真实值记为1(positive,正例/阳性),-1(或0,negative,负例/阴性)分类结果记作1(s...

30710
来自专栏PPV课数据科学社区

学习SVM,这篇文章就够了!

支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问...

5405
来自专栏人工智能

用TensorFlow生成抽象图案艺术

QQ图片20180204220437.jpg

8575

扫码关注云+社区

领取腾讯云代金券