此外,这样做还有一个莫大的好处,那就是可以节省大量的时间。
毕竟在这里工作100个小时,外面只过去大约1个小时
江寒思考了一会儿,很快就有了大概的思路。
首先,既然是图像识别,那么最适合的模型,自然是卷积神经网络了。
以为基础,打造一个深度学习网络,再进行一番优化,结合一些小技巧,大概率能取得极其优秀的成果。
江寒设想了一个多达十几层的卷积神经网络。
首先是输入层。
输入的图像数据,是nn3的彩色图像,所以这一层的数据格式,可以定义为一个三维数组。
接下来是卷积层。
对于卷积神经网络来说,这自然是重中之重。
江寒花费了很大的心血,终于设计出一个全新的结构。
通过反复地卷积、池化和标准化,一步步提取图像的特征
经过前面这些步骤,需要处理的神经元个数,和输入层相比,已经减少了很多。
接下来,就可以把数据送进全连接层,用sftx函数进行分类了。
最后还要有个输出层,对应1000种分类标签
确定了大体思路之后,江寒又设计了一下网络的具体结构。
比如,应该有几层卷积层,每一层如何实现
一般的神经网络里,激活函数主要使用igid和nh函数。
但这两个函数
在网络层次较浅时,问题可能还不是很大,网络层次一深,就容易梯度爆炸或者梯度消失。
江寒在研制软件的时候,就发现了这个问题,所以这一次,他准备引入e,作为卷积层的激活函数。
e,一般称作“线性整流函数”,也可以翻译成“修正线性单元”。
这个函数其实很简单,表达式为xx。
当自变量大于0时,它就是一个线性函数,相当于一次函数yx
当自变量0时,y0。
这个函数其实不是什么新鲜东西,只是在机器学习中,以前没人用过罢了。
所以这也算是一点小小的创举
要说e的好处嘛,那自然是不少的了。
一方面,可以有效缓解梯度消失、梯度爆炸。
并且,还能让梯度下降得更快,有效地提高训练效率。
另一方面,也比较符合仿生学原理。
生物神经细胞的工作模式,就和这个函数差不多
江寒思考了一下,又在网络的最后几个全连接层中,使用了rput方法。
所谓rput,就是在前向传导时,以某个概率,随机忽略部分神经元。
这样做,可以有效地避免过拟合。
在编写池化层时,江寒考虑了一下,使用了重叠的最大池化方法,而没有使用他此前在论文中提到的平均池化。
因为后者有个副作用,容易导致模糊化。
同时,这样做还有另外一些好处。
比如,由于有部分重叠和覆盖,提取出来的特征,往往也会更加丰富
在编写标准化层的时候,江寒考虑再三,运用了机制,也就是局部响应归一化。
这样做的目的,是让局部神经元的活动,产生某种竞争机制,使得强者愈强、弱者愈弱。
归根结底,是为了提高模型的泛化能力。
为了尽可能加快训练速度,江寒甚至考虑过使用编程。
虽然这个世界的厂商,还没有发明技术,但硬件条件已经完全具备了。
毕竟从理论上来说,能挖矿的显卡,就能用于大数据计算。
只要编写出合适的驱动和代码,就能利用,来进行大规模并行运算,显著地提高神经网络的训练速度。
可惜的是,单个显卡的显存比较有限,也就是说,可能承载不了太大的人工神经网络。
而这个深度网络
即使最保守的估计,也需要45的显存。
这样一来,就必须用两块显卡,交下火才行了
江寒在虚拟空间中忙碌了几十个小时,终于把这个空前巨大的人工神经网络搭建了起来。
当然,今天是没法开始训练了,只能等到明天再说
江寒想了想,又买了很多空白图纸,以及一些中性笔,开始草拟论文的初稿。
在这次的比赛中,没啥意外的话,自己这个“深度卷积神经网络”,应该能拿到不错的成绩。
到时候,万一有需要的话,现写论文就显得有点不够从容了。
所以江寒决定,今晚就把这个网络的框架,写成论文,保存起来。
等到训练完成,收集到足够的数据,再稍微修改下,就可以找个合适的时机,投出去了